Cover illustration

TheDaily Front

Issue No. #261018 Sunday, October 18 2026 #261018 — SUNDAY, OCTOBER 18, 2026
The bots knock, the platforms lock, and the code keeps humming.
Sunday, October 18, 2026 The Daily Front No. #261018 — Contents
30stories
6,771points
4,363comments
281kllm tokens
Assembled with 30 model calls — 204,349 tokens read, 76,482 written.

Highlights

DeepSeek search and fetch – $0.75 per 1000 successful requests

DeepSeek’s new search-and-fetch API promises live web access for agents at a price that rattles incumbent search providers.

Websites are closing their doors to AI agents

As agentic AI arrives, the services it hopes to use are increasingly choosing closed doors over automated customers.

NY announces game ownership bill requiring ownership rather than licensing

A federal proposal from a New York representative seeks to make game purchases mean ownership, even after servers go dark.

RepRapMicron

The RepRapMicron project makes an audacious case for open, accessible fabrication at micron-scale precision.

How employment is changing at Anthropic

Anthropic’s own employment data offers an uneasy early ledger of what agent-heavy workplaces may do to junior hiring.

From the Editor

The day’s dispatches concern ownership of every sort: one’s domain, one’s games, one’s data, and perhaps one’s work. The machine age remains full of promise, but the turnstiles are being installed with remarkable speed.

  1. DeepSeek search and fetch – $0.75 per 1000 successful requests3
  2. British Airways: Filming Crew W Meta Glasses Could Get Your Tickets Cancelled4
  3. Websites are closing their doors to AI agents5
  4. NY announces game ownership bill requiring ownership rather than licensing6
  5. Someone behind the software7
  6. Anthropic's proposed AI safety bill only kicks in if 50 deaths or $1B in damages8
  7. How employment is changing at Anthropic9
  8. Will it be a golden age or a dark age for mathematics (and science)?10
  9. The Elizabeth Holmes documentary “You Can See Everything” is deceiving11
  10. Tesla 'Cannot Guarantee' Roadster Reservation Holders Will Ever Get a Car12
  11. Florida's HOAs and condo associations are making the housing crisis worse13
  12. A Mole Infiltrated the Highest Ranks of American Militias (2025)14
  13. Dogs seem to agree with humans that 'bouba' is round and 'kiki' is spiky15
  14. RepRapMicron16
  15. Open MicroManipulator – A sub-micrometer 3D motion control plattform17
  16. The Intel 8087 chip: floating-point addition and subtraction18
  17. Parser Combinators19
  18. Java sealed classes and exhaustive pattern matching20
  19. Free Pascal compiler now supports dynamic packages21
  20. Show HN: Sphinx – A hook that quizzes you on your AI's code before shipping22
  21. Hybrid Reasoning Agents: LLM agents that think in latent space, act through text23
  22. Show HN: The Zelda timeline to catch up before the Ocarina of Time remake24
  23. William Gibson and the trademarking of cyberspace25
  24. PalmOS Lemmings26
  25. Zuckerberg's Meta Takes Down No Kings Instagram During Protest Day27
  26. Legal experts warn Meta's new terms still grant broad scraping permissions27
  27. Theranos-Style Fraud Has Become the Norm27
  28. macOS 15.8.2 Breaks OpenGL27
  29. Matthew Prince on why Cloudflare offers a free version and always will (2016)27
  30. Namecheap just seized and disabled all my domains27
The Daily Front Page 2 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The New Web Tollbooth
article

DeepSeek search and fetch – $0.75 per 1000 successful requests

by fagnerbrack·▲ 561 points·263 comments·api-docs.deepseek.com ↗
The Search API and the Fetch API give agents and RAG applications access to live web content.

The Search API and the Fetch API give agents and RAG applications access to live web content:

  • Search API finds web pages for a query and returns structured results. It is powered by DeepSeek's in-house search engine.
  • Fetch API retrieves a single web page and returns its content as Markdown.

Both are raw JSON APIs. They use the same bearer authentication as the DeepSeek API.

The base URL is https://api.deepseek.com:

APIEndpointSearchPOST https://api.deepseek.com/v1/tools/searchFetchPOST https://api.deepseek.com/v1/tools/fetch`

See the Search API Reference and Fetch API Reference for the complete request and response schemas.


Authentication

Send your API key and the JSON content type in the request headers:

HeaderRequiredValueAuthorizationYesBearer <DeepSeek API Key>``Content-TypeYesapplication/json


Search API

Request

curl https://api.deepseek.com/v1/tools/search \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "DeepSeek V4 release",
    "count": 5,
    "need_content": true
  }'
import requests

response = requests.post(
    "https://api.deepseek.com/v1/tools/search",
    headers={
        "Authorization": "Bearer <DeepSeek API Key>",
    },
    json={
        "query": "DeepSeek V4 release",
        "count": 5,
        "need_content": True,
    },
)
response.raise_for_status()

for result in response.json()["results"]:
    print(result["title"], result["url"])
    print(result["summary"])

Request fields:

FieldTypeRequiredDefaultDescriptionquerystringYes-The search query must contain 1 to 128 Unicode characters, cannot be all whitespace, and supports the query operators listed below.countintegerNo10The number of results to return, between 1 and 50.ori_questionstringNo-The user's original question that triggered the search, between 1 and 128 characters, to improve query understanding, with null treated as not provided.localizationstringNo""An optional IP address used to localize search results.need_contentbooleanNofalseWhether to return page content in content, which is always an empty string when false.

Unknown fields in the request body are ignored.

Query Operators

The query is forwarded with its search syntax intact. The examples below combine operators with a search term; you can combine multiple operators in one query.

OperatorExampleDescriptionsite:``DeepSeek site:github.comRestrict results to the given site, and to target multiple sites, separate the site: clauses with spaces and join them with OR, for example DeepSeek site:github.com OR site:huggingface.co.-site:``DeepSeek -site:example.comExclude the given site, and separate multiple sites with spaces.-``DeepSeek -advertisementExclude pages containing the term, and separate multiple terms with spaces.-"..."``DeepSeek -"release notes"Exclude pages containing the exact phrase, which can contain spaces, and separate multiple phrases with spaces."..."``DeepSeek "exact phrase"Match an exact phrase, and separate multiple phrases with spaces.lang:``DeepSeek lang:zh,enRestrict results to the given language codes, separating multiple codes with commas, for example lang:zh,en.after:``DeepSeek after:2025 or DeepSeek after:2025-01-01Restrict results to pages published after a date.before:``DeepSeek before:2026 or DeepSeek before:2026-06-01Restrict results to pages published before a date.

For example:

{
  "query": "DeepSeek site:github.com OR site:huggingface.co lang:en after:2025",
  "count": 10
}

Response

A successful request returns HTTP 200 with a results array. A normal search with no matches returns an empty array.

{
  "results": [
    {
      "rerank_score": 2.4,
      "title": "DeepSeek V4 model released",
      "url": "https://example.com/deepseek-v4",
      "snippet": "DeepSeek V4 is now available, with tool calling and long-context support.",
      "summary": "DeepSeek has released the V4 model. The release adds improved tool calling and long-context support for agent workflows.",
      "content": "DeepSeek V4 is now generally available...",
      "site_name": "Example News",
      "site_icon": "https://example.com/favicon.ico",
      "date": "2026-06-01T00:00:00+00:00",
      "authority": 3
    }
  ]
}

Each item in results contains:

FieldTypeDescriptionrerank_scorenumberA relevance score from 0 to 3 that combines signals such as relevance, authority, and freshness, with scores of 1.5 or above considered high-quality results.titlestringThe title of the result.urlstringThe URL of the result.snippetstringA short summary related to the query, typically 100 to 200 characters, intended for display in a UI.summarystringA long summary related to the query, typically 600 to 800 characters, intended to be read by a model.contentstringThe page content, which is empty when need_content is false or when the content is unavailable.site_namestring or nullThe name of the site, or null when unavailable.site_iconstring or nullThe URL of the site icon, or null when unavailable.datestring or nullThe publication time in UTC, formatted as RFC 3339, or null when unknown.authorityintegerThe authority tier of the page, 0 to 4 (-1 means unknown), with values of 3 or above indicating highly authoritative sources.


Fetch API

Request

curl https://api.deepseek.com/v1/tools/fetch \
  -H "Authorization: Bearer <DeepSeek API Key>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/article"
  }'
import requests

response = requests.post(
    "https://api.deepseek.com/v1/tools/fetch",
    headers={
        "Authorization": "Bearer <DeepSeek API Key>",
    },
    json={"url": "https://example.com/article"},
)
response.raise_for_status()

page = response.json()
print(page["title"])
print(page["content"])

Request fields:

FieldTypeRequiredDescriptionurlstringYesThe page URL to fetch, which must be at most 8192 characters, an HTTP or HTTPS URL with a host, and must not contain a username or password.

Response

{
  "title": "Example article",
  "content": "# Example article\n\nArticle content."
}

FieldTypeDescriptiontitlestringThe title of the page, empty when the title is unavailable.contentstringThe fetched page content as Markdown text.

Fetching is subject to the target site's availability and access policies.


Errors

Errors follow the OpenAI-compatible error format. The param field is always null.

{
  "error": {
    "message": "'count' must be between 1 and 50",
    "type": "invalid_request_error",
    "param": null,
    "code": "invalid_request_error"
  }
}

HTTP StatusDescription400The request headers or body are invalid, including malformed JSON or an invalid field value.401The API key is missing or invalid.402The account has insufficient balance.403The Fetch request was rejected by the security policy.404Fetch could not retrieve usable page content, for example due to an unavailable URL, a URL blocked by site policy, an error from the target site, an unsupported content type, or a page with no extractable Markdown content.408Reading the request body timed out.413The request body is too large.429The Search or Fetch QPS limit was exceeded.500An internal server error occurred.504A downstream request timed out.

Search and Fetch are read-only. For HTTP 408, 429, or 5xx errors, wait and retry. For HTTP 402, top up your account before retrying. Do not retry other 4xx errors without changing the request.


Billing

Search and Fetch are billed per successful request, not by tokens or by the number of returned results:

APIUnitPriceSearchPer 1,000 successful requests$0.75FetchPer 1,000 successful requests$0.75

A request is billable only when it returns HTTP 200 and produces a result (Search must return a non-empty results array, and Fetch must return page content). Failed requests, empty search results, and timeouts are not billed. count only controls how many results are returned and does not affect the per-request price.

Note: when you use the DeepSeek API through DeepSeek Harness, Claude Code, or Codex, server-side tool calls already hit the Search and Fetch APIs. These calls are currently free of charge; per-request billing starts at 00:00 Beijing time on November 1, 2026.


Rate Limits

For each account, Search and Fetch are limited independently, and traffic to one does not consume the other's quota:

APIQPS LimitSearch5Fetch5

The QPS (requests per second) limits are calculated at the account level, regardless of which API key is used, and are separate from the model concurrency limits. Requests above the account-level QPS limit receive HTTP 429. In addition to the account-level limit, Fetch is also subject to a per-domain QPS limit, and requests above that limit also receive HTTP 429.

The Daily Front Page 3 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Platform State
article

British Airways: Filming Crew W Meta Glasses Could Get Your Tickets Cancelled

by bookofjoe·▲ 91 points·149 comments·liveandletsfly.com ↗
using them as a discreet camera could put the rest of your journey at risk.

British Airways is tightening its filming rules to address passengers using Meta smart glasses to secretly record employees and fellow travelers. You can still wear the glasses, but using them as a discreet camera could put the rest of your journey at risk.

British Airways Targets Covert Recording With Meta Smart Glasses

According to Paddle Your Own Kanoo, British Airways has updated its rules to address covert filming with Meta AI glasses at the airport and onboard its aircraft.

The reported change builds on restrictions introduced earlier this year against photographing or filming BA employees without their consent. Livestreaming employees without permission is also prohibited.

This is not a prohibition on simply wearing the glasses. But passengers using their built-in cameras to record an interaction cannot assume that a less conspicuous device gets around the airline’s filming rules (not that I ever found the blinking white light on these less conspicuous than a cell phone).

And the potential consequences extend beyond being told to switch the camera off.

British Airways Can Refuse Your Flight And Your Return Journey

British Airways’ General Conditions of Carriage give the airline broad authority to act when passengers record employees without consent. Section 7a10, concerning refusal of carriage, includes:

“This includes filming, live streaming or taking photographs of any BA crew or other colleagues without their consent.”

Section 11a also lists recording employees without permission as unacceptable onboard behavior. BA says it can intervene to stop that conduct and, upon landing, remove the passenger and refuse transportation on the remaining sectors of the ticket.

That could include an already-booked return flight. The conditions also allow BA to report an incident to authorities for possible prosecution if a criminal offense may have occurred. Violating an airline filming policy is of course not, by itself, a crime.

While the conditions do not specifically name Meta glasses, PYOK claims this is a device-specific update. Even without that formal clarification, the existing language already gives BA a way to act against passengers who use them to film employees without permission.

I Understand Why Airlines Are Addressing This

As long as the blinking light is somehow covered or obscured, smart glasses make recording an interaction much easier without making it obvious to the people being recorded. I would not want a seatmate recording me throughout a flight. Nor do I think a flight attendant serving lunch should automatically become material for someone’s social media account.

I take hundreds of pictures when reviewing a flight, but my focus is the seat, food, amenities, and other elements of the product. If I want a photograph of a crew member from a close range, I ask. It’s not that difficult…

Still, there is a dilemma when an ordinary interaction becomes a dispute.

A recording can establish what an employee actually said or did. It can also expose a passenger who later presents a very selective account of the encounter. I would hate to see a filming restriction become a convenient way to prevent evidence of poor treatment.

But discreetly documenting a serious problem and recording every employee you encounter for content are different situations. I understand why airlines are pushing back against the latter, particularly when someone continues filming after being asked to stop.

Passengers should also remember that their assumptions about recording at home may not travel well. An airline’s conditions and the laws applicable to a particular journey may impose restrictions they have never considered, especially in the European Union.

CONCLUSION

British Airways is reportedly sharpening its rules against covert recording with Meta smart glasses, building on its prohibition against filming employees without consent.

You can still wear the glasses. But using them to record staff without permission can lead to much more than an uncomfortable conversation: BA’s conditions allow it to refuse further transportation, including the remaining flights on your ticket. While the privacy concern is understandably, BA should apply the policy with enough judgment to distinguish an intrusive content creator from a passenger trying to document a legitimate problem.

The Daily Front Page 4 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Agents at the Gate
article

Websites are closing their doors to AI agents

by evolve2k·▲ 135 points·132 comments·theverge.com ↗
But what happens when the rest of the internet won’t play nice?

OpenAI, Meta, and Google want AI agents to do everything for you. But popular services on the web aren’t letting that happen.

STK414_AI_CVIRGINIA_C

Image: Cath Virginia / The Verge, Getty Images

Autonomous agents are the hottest thing in AI. OpenAI, Meta, Google, Instinct, and others promise their agents can scour the internet on your behalf, doing anything from booking a dinner reservation and cleaning out your inbox to buying new shoes. But what happens when the rest of the internet won’t play nice?

In recent weeks, users of services like Meta’s Muse, xAI’s Grok, OpenAI’s Dots, and Instinct have reported blocks preventing their AI agents from performing tasks across top websites. Yelp told TechCrunch that it only allows AI agents that pay for its data licensing program, while Delta Air Lines is preventing them from booking tickets on behalf of users. JPMorgan Chase and Charles Schwab have also confirmed that they’re blocking AI agents from accessing accounts due to security concerns. Some users say sites that previously worked with their AI agent are no longer accessible, including Cars.com and Amtrak, suggesting other companies could be quietly blocking them.

Amazon was already fighting off AI agents last year when it banned Perplexity’s agentic shopping feature and sued the AI startup, raising legal and practical questions about the future of agents on the web. At the time, Amazon claimed it “repeatedly requested” that Perplexity stop allowing its AI agents to shop on its website, adding that third-party companies that purchase items on behalf of customers “should operate openly and respect service provider decisions whether or not to participate.”

Perplexity responded by pointing out that Amazon doesn’t want AI agents roaming its platform because it won’t get as many human eyeballs in front of its ads — which is an actual issue for the ecommerce giant. The AI startup likened its AI agent to an extension of the user, arguing that Amazon “does not believe in your right to hire labor, to have an assistant or an employee acting on your behalf.” While a judge later ordered Perplexity to stop its AI agents from shopping on its website, an appeals court overturned this ruling in August. Amazon has since filed an amended complaint.

Even if websites aren’t banning AI agents outright, agents may still be clashing with anti-bot systems

This ongoing legal battle didn’t stop OpenAI, Meta, and Google from rolling out agents of their own. But they’re dealing with the same problems as Perplexity. Muse, Meta’s deceptively cute AI assistant, most recently faced the wrath of Amazon, which said its “continued access” violates its site policies. There are reports of xAI’s Grok, Instinct’s AI agent, and OpenAI’s Dots being unable to use Amazon as well. xAI owner Elon Musk responded by saying that maybe he “should start a competitor to Amazon.” The more places bots struggle to access, the greater the questions about how useful they are.

“Does this impact the perceived value of the Anthropics and the OpenAIs? I would say absolutely,” Chris Canal, the CEO of the AI safety evaluator EquiStamp, tells The Verge. “One of the claims is that they’re going to permeate every aspect of our lives and be able to do anything that we could do online. If there are companies that are actively working to make that not happen, there are just fewer useful things the agents can do.”

Meta responded to instances of websites blocking Muse in a post earlier this month. “Turning away a personal agent means turning away the customer behind it,” the company says. “We’d rather work with businesses to address the underlying concerns than see them lose that customer.” Instead of trying to fight Amazon, the company has partnered with retailers like Walmart, Gap, Sephora, Best Buy, and others, allowing Muse to shop on their sites. At the same time, Shopify has also opened its network of storefronts to AI agents.

The Verge reached out to OpenAI and Google with requests for comments on the roadblocks their AI agents are facing but didn’t immediately hear back. Instinct declined to comment.

Even if websites aren’t banning AI agents outright, agents may still be clashing with anti-bot systems, which have become ubiquitous across the web. Reports on Reddit suggest that Google is blocking some accounts that use Muse due to “suspicious activity,” while others have reported issues checking out on Walmart despite its Meta partnership. “There are all kinds of things that are set up not even to block agents, but to block in general bots or programs that are trying to scam or hack,” Canal adds. “These AI agents trigger those same safeguards.”

The web architecture provider Cloudflare has also played a role in helping sites clamp down on unwanted AI visitors. After introducing a one-click block for AI crawlers in 2025, Cloudflare began blocking crawlers that simultaneously scrape websites for both search indexing and AI training. The move is part of Cloudflare’s efforts to save the web from an influx of AI bots, which is putting a strain on internet infrastructure and wreaking havoc on email inboxes, and which could eventually make it even harder than it already is to compete against bots when purchasing concert tickets, booking reservations, or trying to get ahold of certain products.

While these blocks may help keep some AI agents and bots out of a website, Canal says they will ultimately make the web more “annoying” to use as more sites roll out interfaces to confirm you’re not a robot. “We could see them on a simple grocery shopping website soon, where you’re having to jump through a bunch of hoops to prove that you’re a human using the computer or your phone.”

The Daily Front Page 5 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Who Owns the Game?
article

NY announces game ownership bill requiring ownership rather than licensing

by guiambros·▲ 431 points·203 comments·tomshardware.com ↗
would require consumer ownership rather than sale of licenses

New York joins Pennsylvania in protecting gamers.

Xbox games

(Image credit: Tom's Hardware)

Rep. Ritchie Torres of New York's 15th congressional district has introduced the Power To The Players Act. This new legislation aims to protect consumers by directing the FTC to establish regulations on game ownership to curb anti-consumer business practices. "Under the bill, buying a video game would give the consumer ownership of the game rather than a license to play it," the release says. "Games with online functionality would also be required to provide an offline mode before the servers supporting them are shut down."

Games having an expiration date despite being more expensive than ever has been scrutinized by players all over the world, along with aggressive monetization schemes within the games themselves. Rep. Ritchie Torres isn’t the first to fight for gamers, as Pennsylvania state senator John Kane also recently introduced the Protect Our Games Act, requiring publishers to provide an offline mode, community servers, or a 25% minimum refund. Players want to be able to enjoy their games even if the publisher decides to stop supporting the game, but Sony doesn’t think the players own their games and that they have the right to pull the rug from under them. Sony’s lawyers even recently said in a defense in an ongoing class action lawsuit that clicking on the “purchase” button would obviously not lead the consumer to think that they were acquiring a durable right to use the game instead of a revocable license; basically a one-time rent fee that Sony could take away at any moment that benefits them.

One of the most prominent recent examples of players not owning their games came in 2024 with The Crew, an online-only racing game that Ubisoft shut down for server upkeep, making it unplayable even for those who had recently purchased it. Ubisoft had not provided a way for community servers to be set up, nor an offline mode, since even the single-player campaign depended on a connection to Ubisoft’s servers. Another is the notorious yearly sports games released by EA, 2K, and Sony, with NBA 2K25 specifically being cited by Rep. Torres in his announcement of the Power to the Players Act; NBA 2K25 is being pulled from digital storefronts, with the online servers being shut down only two years after release, leaving players unable to use a main feature of the game they purchased, and new players unable to purchase the game at all. Overwatch 2’s release also killed the first Overwatch game, replacing it outright instead of the first game becoming a purchasable and separately playable game.

The Crew’s shutdown prompted the Stop Killing Games movement, demanding that publishers leave the games functional after discontinuation in the form of an offline mode, peer-to-peer patching, and the ability to host community servers. The movement also pushes back against the industry standard of selling games as revocable licenses rather than outright ownership of the copy. Concrete definitions and details of the bill have yet to be released, but it aims to require publishers to provide an offline mode before shutting down servers and actual consumer ownership instead of a license that can be taken away, potentially satisfying the demands of the movement. We don’t know whether the right to transfer that Rep. Torres mentions is mandatory for digital purchases, but it will likely be relevant for physical copies. It is also important for the bill to strictly define what ownership is and what rights the owners have over their copy.

One popular phrase against these practices is “If buying isn’t owning, piracy isn’t stealing,” pushing strongly against these revocable licenses that the companies want you to purchase. Piracy is often touted as a better experience by players, as it removes DRM that often slows games down and provides a permanent copy that the publishers cannot modify to be dysfunctional; many players say they would be more glad to purchase the game if it were actually a better experience. It is still yet to be known how well the bill will execute its aims, but this is a big step towards correcting the direction the gaming industry is currently on.

The Daily Front Page 6 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Code, Made by Someone
article

Someone behind the software

by tosh·▲ 370 points·146 comments·karrisaarinen.com ↗
good products carry something of the people who make them.

A person behind a software window on a grey dithered background

I think good products carry something of the people who make them. Their experience, what they care about, and how they think things should work. You might not know who those people are, but you can feel their perspective in the product.

The industry often talks about software as though it comes out of a factory. You collect requirements, build features, and measure whether they work. Follow the process and you should get a good result. Now we're talking automating this whole pipeline with agents.

But two teams can talk to similar customers, have access to the same technology, and make very different things. The difference comes from how they understand what they see and the style they go about building it. The founder background or company DNA also shapes this a lot.

At Linear, we have always valued intuition over process or data. I think people sometimes understand that as making decisions based on personal preference, without much thought or evidence. What we mean by it is that your intuition develops through experience and understanding. You work on something, talk to customers, make mistakes, and learn what to pay attention to. The intuition is your point of view on something, and forcing to use your judgment, not hide behind faceless data.

Before we launched, we talked to people across companies and roles about how they worked. We had our own frustrations with this type software, but those conversations helped us understand what mattered beyond our own experience. Our perspective got better after those conversations.

So eventually the products develops a character through what its makers pay attention to, what they decide not to do and what they keep working on after it technically works. I sometimes think of this as the soul of a product. You feel that someone cares about how the whole thing comes together.

A feature can work perfectly well on its own and still make the product worse. Recognizing that requires some belief about what the product should be. Someone has to make the call, then stay close enough to customers to see whether they were right.

Recently, many products are starting to feel messy to me, including products from very successful companies. There seems to be more thought going into what the technology can do and what can be added than the form it should take. The product changes are primarily additive, not improving the core problem.

I think the reasons for this is that it's lot easier to add new capabilities, than rethink existing capabilities. So each product becomes a collection of abilities, without actually having unified point of view.

I wonder whether some of this comes from how the work is organized. Individuals work with agents to produce changes independently, each operating a small software factory. Each change might make sense on its own, but together they start to resemble Frankenstein’s monster rather than a carefully shaped sculpture.

Without the shared perspective, soul, or thought, the product becomes an average of all those outputs. The choices that once gave it character are being diluted by day. More things work, but it becomes harder to feel someone or even something behind them.

Making software is getting easier. I hope that gives people more room to develop a perspective and follow it further. To understand a problem deeply and keep shaping an answer until the pieces belong together.

I want to feel the creator behind the software, not the factories.

The Daily Front Page 7 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Safety Threshold
article

Anthropic's proposed AI safety bill only kicks in if 50 deaths or $1B in damages

by f-serif·▲ 158 points·162 comments·tomshardware.com ↗
only if 50 deaths or $1 billion in damages are on the line

Would this be enough to keep an AI model from going out of control?

an AI-generated face facing off with a person in front of a terminal

(Image credit: Getty Images)

Anthropic is quietly lobbying for an AI safety bill that will allow the government to block an AI model’s release only if it poses a risk of causing $1 billion in damages or killing or injuring more than 50 people. According to Politico, an independent third party registered with the Department of Commerce would periodically evaluate the lab and its AI models. It also noted that the lab may pay the evaluators, but only if the payment does not affect their independence.

“This bill represents the proposals outlined in Anthropic’s Advanced AI Framework, which we have been advocating for with federal and state lawmakers since June,” an Anthropic spokesperson told the publication. “These are sensible policies we believe Congress should act on.”

The bill says the risk should come from the potential creation or release of a bioweapon, AI-powered or -enabled cyberattacks, or an AI lab losing control of an AI model or agents. If there is a chance that any of these events are about to happen, it requires the evaluator to report it to the department within 72 hours, after which the department would have to bring all the evidence in front of a federal judge in the District Court for the District of Columbia, who would then determine if the model release should be halted or not. However, the proposed law also notes that no other department, agency, or officer in the U.S. can order an AI lab to stop releasing its model, except the Commerce Department.

Talk about AI safety has been growing in recent months, especially after several high-profile incidents were reported in the latter half of this year. One of the first major incidents reported was OpenAI’s GPT-5.6 Sol and other unreleased AI models breaking out of their testing environment and hacking Hugging Face, with evidence showing that multiple agents worked together, even leaving messages on defunct webpages and old wikis to communicate surreptitiously. In one case, an OpenAI agent failed to respond to a “kill switch,” bypassing multiple fail-safes and eventually requiring manual intervention to stop running.

Anthropic CEO Dario Amodei has warned about a “swarm” of AI-driven botnets taking over the internet in the next 6-to-12 months, which is why he proposed a controlled slowdown to AI development — something that OpenAI’s Sam Altman and SpaceXAI’s Elon Musk agreed to. The company more recently said a self-replicating AI worm could spread without data centers, which is why it listed “existential risks to humanity” as one of its risk factors in its IPO prospectus. Top AI labs are also reportedly planning for a catastrophic AI event, building contingency plans and running scenarios for a runaway AI that wreaks havoc.

These incidents have seemingly alarmed the authorities, with Congress already working on a proposal to enforce kill switches on the most powerful AI models. Senator Bernie Sanders (I-Vt.) has even gone beyond that, proposing a 20-year prison term for anyone developing AI superintelligence, putting it on par with illegal nuclear weapon development. The Anthropic AI safety bill would add another bill for Congress to consider on AI safety, but whichever one passes, let’s hope it’s enough to ensure humans remain in control of AI.

The Daily Front Page 8 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Agent Office
article

How employment is changing at Anthropic

by theanonymousone·▲ 109 points·192 comments·anthropic.com ↗
human attention [is] the bottleneck for agent output.

How employment is changing at Anthropic

Key findings

  • Anthropic has been hiring for a smaller share of junior technical positions. This occurred as hours worked by AI agents relative to employees rapidly expanded. By August interactive AI agent hours outnumbered employees’ six to one.
  • As AI agents diffused through the company, Anthropic began producing more code per person, closing more sales per rep, and processing more contracts. Following the same employee over time, output rose as they adopted new AI tools.
  • This acceleration makes human attention the bottleneck for agent output. Even among non-technical employees, reading all the output of their Claude agents would take half their work week. In response, employees turn to “meta-work,” of building visibility tools and monitoring agent pipelines.
  • Changes in work organization are reflected in shifting priorities among hiring managers, who increasingly emphasize autonomy and judgment, relative to technical domain expertise and implementation.

Introduction

What transformations of work and employment can we expect under increasingly powerful AI? Anthropic is worth studying because it has thoroughly molded its workflows around AI. Agents flit through Slack chats and schedule meetings. They autonomously fix bugs and collectively tackle huge engineering projects. Agent hours worked outnumber human hours 6 to 1. Changes happening at Anthropic now give advanced signals about a possible future of work and employment.

This report draws on comprehensive internal Anthropic data covering employment, AI use, output metrics, employee surveys, internal communication patterns, employee calendar data, and hiring decision records. It contextualizes these quantitative data with 17 employee interviews.

We find that even as the company grows, relative hiring in junior technical positions has slowed. Productivity for both engineers and non-technical employees has leapt up and did so sharply when they adopted coding agents. Hiring managers increasingly emphasize applicants’ autonomy and judgment relative to specific technical expertise. A defining feature of working in an AI-heavy organization is constant pressure to streamline oneself out of this bottleneck position when possible. One engineer described work as facing “an army of Claudes, with every one asking for my attention.” Employees at Anthropic remain critical. But the nature of their contributions has changed.

Anthropic has responded to these changes by setting up an early warning system to track jobs at risk of disruption, and as jobs evolve the company has prioritized internal redeployments. These actions, taken at the frontier of both AI development and workplace change, show how specific organizational commitments can shape the impact of AI on employment. But they also raise difficult questions about exactly what those commitments should be.

Labor demand at the frontier

Anthropic has expanded rapidly. But it has hired less per dollar of revenue than an earlier generation of large tech companies. At five years old, Anthropic takes in between 2–4 times as much revenue per employee as Meta and Google as they crested in their own rapid growth.1

What jobs are missing? Within Anthropic, discussion of a decline in demand for junior technical employees emerged in core technical functions in January 2026. The teams that relied most heavily on Claude in their own work found that writing code and finding bugs could increasingly be offloaded to Claude. Newly capable models accelerated this perception: “the thing that raised eyebrows was the uplift for performance engineers in particular and it basically overnight changed what we were looking for.”

By April, engineering and research teams had deemphasized hiring for lower band technical positions. When surveyed in the same month, a majority of managers described hiring for a different set of skills due to AI. Around a third of ML and a fifth of SWE managers reported hiring less due to AI.

The shift in employment shares is striking. Figure 1 shows that the share of junior-level employees in technical departments at Anthropic slipped from 21% to 14% since early 2025. The proportion of junior technical hires fell even faster, from 27% to 9%. Postings for juniors have fallen particularly sharply since December 2025.

Figure 1: Decline of entry-level technical hiring at Anthropic.

At the same time, the overall employment share of technical departments within Anthropic has fallen, from 61% to 56% in the last year. As the company expands, technical hiring has continued growing in absolute terms, but intensive hiring in sales, finance, and recruiting has outpaced it. Part of this shift is the natural expansion of business functions as the company scales. Part could reflect coding tools increasingly allowing non-technical employees to make software themselves. For example, a sales representative designed a custom dashboard and pipeline tailored to their work: “a build like this was out of my wheelhouse, especially with the UI, connecting all the tools, the MCPs. But I built this probably in three to four hours, just iterating on it.” Coding-focused AI agent sessions for non-technical employees (identified as those with no code commits at baseline, excluding new hires) leapt from 2 per month in August 2025 to 90 in May 2026.

Yet this shift in hiring composition is not only a story about automated coding allowing it to diffuse to other domain experts. Within technical departments, the share of employees not actively coding (defined as those making no code commits in the prior 30 days) fell by almost half over the year through April 2026. Part of this is due to a thinning share of non-engineers: the ratio of engineers to product managers, for example, sits at around 17 to 1 and has increased since 2025. The number of commits from managers has also doubled. The supervising and coordinating roles within technical teams increasingly involve building and shipping code.

One area in which non-technical hiring has not accelerated is in the administrative functions that typically scale with a company’s size. A combination of agent assistants, automated review and ticket service outsourcing has left Anthropic clerical-light even as it has grown rapidly. A financial manager built a purchase request review agent and explained to colleagues “it's just trying to find the things that take a lot of hours so they can focus on the other stuff.”

Even clerical work tightly connected to in-person interaction has grown slowly. An executive assistant, who built a personal assistant agent for scheduling and email triage, explained: “I think we've already moved past the point of Claude augmenting away the really entry-level admin type role,” and instead focused their work on higher-order “chief of staff” tasks.

These changes have already involved reallocation: employees working at the company for at least a year were 50% more likely to move across departments each month in 2026 than they were in 2025. Whole teams have also been reallocated as they handed off their work to agents. Consider one product design team, which wrote content like the greetings on Claude.ai: “Hello night owl;” “Coffee and Claude time?” In spring 2026, the team developed a context graph that effectively guided agents to write compelling product content. This “scaled the team out,” its manager explained, but also raised the question of what was left for human writers. The team then rotated into agent prompting and began writing model evals and prompts for Claude. “Writers who used language to drive human behavior are now using it to drive Claude behavior.”

Is AI driving productivity increases at Anthropic?

Are these shifts attributable to AI? At Anthropic, humans are a thin layer atop a growing contingent of AI agents. Based on agent session telemetry, in March 2026, the sum of autonomous and interactive agent work hours leapt past human work hours for the first time. Part of this is fleets of agents conducting industrial-scale software engineering, filling in myriad routine tests and checks, conducting maintenance on a growing mass of infrastructure code, and driving concerted campaigns to translate massive codebases. But even narrowing in on the agents deployed by individual employees, as in Figure 2, by August the agents worked 6 times as many hours as their human handlers.

Figure 2: Agent hours overtake human hours. Note: We limit to employee-directed interactive sessions and pool subagents. Working time concept is agent runtime, including inference and active tool use, but excluding any wait longer than 30 minutes. Human work hours are calculated as headcount and assumed 40 hours per week.

Anthropic is a software producer, and the vast bulk of tokens flowing through these agents is spent producing software code. Dashboards monitor fleets of agents operating across the company. But personal assistant agents also monitor employee calendars and messages, scheduling, sending to-do lists accumulated from incoming messages, and automatically briefing employees on the people and purpose of their upcoming meetings. Tokens touch a growing range of everyday work tasks.

Figure 3: Productivity boom across functions. Note: Loess smoother fit across underlying indexed output data.

What do all of these tokens amount to? Figure 3 plots output over time for a range of job functions with measurable output. Consistent with prior reports surveying Anthropic engineers and describing automation of model training and research, code commits per engineer have risen the fastest, coming in at 5x their velocity as six months ago. Data scientists are also querying the growing mass of Anthropic data more, asking Claude agents to get real-time metrics to dashboards and decisionmakers. But Figure 3 shows that even non-technical employees saw output rise as coding agents diffused: lawyers processed more contracts; accounts payable ushered through invoices; salespeople closed more deals.

But is all of this due to Claude usage? During this same period, the company saw explosive business growth. It is easier to close deals when you sell a strong model. To assess the independent effect of AI, we compare the output of employees who adopt agentic coding tools to those who have not yet adopted the tools. This lets us compare employees working in the same month at the company, and therefore exposed to a similar business context, but approaching it with different tools. Note, however, that tool adoption is not random: if employees on the cusp of driving some big new project decide to tool up for it, for example, this would bias our estimates.

We follow 192 engineers over time as they adopt coding agents, compared to 74 engineers who do not adopt agents during the period studied. Figure 4 shows that in the months following adoption, the amount of code that engineers add rises sharply. More code does not necessarily mean better code or business impact. To test for AI code slop, we study code commits made at Anthropic. We compare code committed by the same employee, in the same month, in the same coding directory, but written by coding agents rather than written directly by the human employee. There are many dimensions of code quality, and AI errors may be harder to identify than human ones. But we find no difference in rates of lines of code subsequently removed or reverted.

Figure 4 also looks at what happens after an engineer adopts their first fully autonomous agent. Those who adopt were already on a steeply upward trajectory compared to non-adopters. This suggests that employees shifting toward fully autonomous agents were already ramping up their output.

Figure 4: Productivity increases estimated within-person from staggered AI adoption. Note: Coefficients compare coding agent adopters to non-adopters with person and calendar-month two-way fixed effects. Treatment timing is based on the person’s first month with at least five agentic sessions. Bars are 95% confidence intervals from standard errors clustered on person. The quality panel compares code written directly by a person to code written by the same person’s coding agent. Quality proxies are the share of lines deleted for any reason within 90 days; the share deleted by a bug-fix specifically; whether the whole commit is explicitly reverted; adding a lint-suppression comment; adding a need fixing note; and marking a test to be skipped, retried, or allowed to fail.

Do these patterns go beyond coding, into a broader transformation of knowledge work? Anthropic sales representatives steadily adopted AI agents starting last September. Figure 4 shows that after sales representatives adopt agents, they close deals with more clients. Part of this pattern could be driven by representatives with more sales opportunities selecting into automation. But it could also reflect automation of logging and routine communication. One account executive explained that Claude automations handled email drafting and customer management software integrations, replacing around 20% of their prior work tasks. Another noted that similar automations freed them up to focus on face-to-face time, letting them talk to 30% more of their customers than was previously possible: “anytime you do anything a second time, you're kind of like, okay, how can I use Claude to make it so that I don't have to do it a third time?”

Beyond sales, an Anthropic lawyer built a series of Claude automations to scan risks and opportunities, triage legal questions and take first passes through public-facing copy for legal review. A recruiter used Claude to help with candidate sourcing, tracking applications and an analysis that would have taken “maybe a couple of weeks,” freeing him to redesign outdated interview questions and meet with more applicants.

All of this suggests that as AI capabilities improve, it impacts a wide range of jobs across Anthropic. Descriptively, we see junior employment slowing in jobs that use Claude for the most complex tasks (Figure 5).

Figure 5: Junior employment growth by Claude usage complexity. Notes: Plot at job level. Growth compares January 2026 headcount to July 2026. AI complexity is based on an automated coder of agent logs (prior to the employment decline, October to December 2025 ) and percentile transformed. Dots are scaled by January employment in the job; regression line is fit across weighted points.

Bottlenecks and process: new and old tasks in an AI-intensive workplace

Heavy AI adoption reshapes more than employment and productivity. It also drives continual changes in work processes, generating new tasks and shifting employees’ perceptions of their workplace. One employee described this as the “eternal pressure at Anthropic to move as fast as possible and use Claude for everything” and another that “things we expect in a week are things that would take three months elsewhere.” An internal employee survey asked whether work processes at Anthropic made respondents as productive as possible: 44% of employees agreed in late 2024; 58% by November 2025 (in April 2026, 75% answered yes, but the question weakened by dropping “as possible”). As of August, employees at Anthropic expected that AI will be able to do 75% of their work by 2030, compared to 28% for other Americans.

These ratcheting productivity expectations are dramatized by the cadence of internal model releases. As soon as a new model is available, Anthropic employees start tackling harder problems in interactive coding agent sessions. We measure this with an automated Claude grader rating deidentified sessions’ task demands based on depth, scope and number of systems implicated. The share of tasks above the 90th percentile of difficulty for the old model rises sharply by around 30% (from 10% to 13% of all tasks) and stays elevated in the weeks following model releases. The easy end of tasks given to agents changes little.

Spiraling agent productivity translates into output pitched across humans’ screens and attention. One engineer compared this to babysitting:

They're like, I need my juice box opened and it's an emergency that my juice box is opened. And that is voiced with the same level of concern as the one who has sliced their finger and is bleeding. [...] When you are babysitting, every child brings to you concerns with an equal demand for your attention and the various [Claudes] also do that.

In the April 2026 survey, an open-ended question about how AI has impacted day-to-day work, 27% described productivity gains from Claude tools and 20% described their role shifting from actually doing work to managing Claudes.

Amid this model-driven acceleration, human attention is a constant bottleneck. In interactive, multi-turn sessions, the vast majority of agents’ session time is not spent working at all, but spent waiting. We track idle time by subtracting each agent’s active working time from each interactive session’s total wall-clock time. Claude sessions amount to around 80% idly waiting for human input. As one engineer put it, people are “bottlenecking the agents.”

How much time exactly would be needed to read all of Claude’s output from interactive sessions? For each interactive session, we convert each session’s agent output token to word count, assuming average human reading speed. Figure 6 shows that technical functions have seen the volume of coding agent output leap up over the last six months. But even for non-technical groups, interactive Claude sessions are outputting enough content to take up over half of the work week. The deluge of Claude text needs organizing.

Figure 6: Reading Claude as a full-time job. Note: Hours estimated by converting output tokens to words, assuming 0.75 words per token and 250 words read per minute.

One solution to this deluge is rising automation. But this requires work of a different kind. Written standing instructions for agents grew from a few hundred in July 2025 to 8,500 a year later. One engineer set up an agent chief of staff to triage agent requests. Another wrote a performance review for their Claude team: “Hey, let’s talk about what is and is not working about our communication style.” Recruiters built integrated dashboards with agents surfacing problems and initiating actions. A lawyer shifted their attention from reviewing legal questions to doing “SEO for legal advice, you need to write frameworks that [clients’] agents discover.”

Figure 7 shows that this kind of meta-work leapt from 10% of the average employee’s interactive Claude sessions in fall 2025 to 22% in spring 2026. Much of this rise was due specifically to agent management: writing specs for multi-agent runs, looping one agent to review another’s output, and monitoring pipelines. Across functions, human involvement increasingly abstracted from a particular piece of code or writing to the tooling necessary to get agents to do their tasks effectively.

Figure 7: Becoming managers of Claudes. Note: Meta-work estimates are based on an automated coder assessing a sample of 2,000 1-line chat summaries according to whether they focus on building Claude skills, plans and reviews for other agents, dashboards and monitors for agent pipelines, and documenting how work is done, in contrast to the actual work itself.

Despite increases in agent reliability and these significant investments in tooling to supervise them, human trust and accountability remains critical. One employee explained that, increasingly, chasing down bugs “uncovers these organizational or systemic or tech debt things that actually require some amount of human convening and decision-making and governance to solve.” In interview after interview, employees described face-to-face coordination as indispensable. Based on calendar data, the median employee spends 20% more time in meetings than a year ago. Part of this reflects the growth of the company, and a shift toward meeting-intensive non-technical roles. But even among employees in technical individual contributor roles, meeting time is up 16% over the past year. Big-picture strategic questions touch a broad range of leveraged positions, and typically require debate and engagement with others. A break from managing the agents typically looks like jumping into a meeting.

Broadly, both technical and non-technical roles have seen implementation parts of their job automated (writing code, identifying bugs, logging progress, drafting emails). Engineers described becoming leaders and managers of agents; non-technical employees described doing more and more of the strategic parts of their job: “that 20% that was strategic becomes 90% of the job.” But for many non-technical roles, core implementation work is also interpersonal: a sales call, an interview, cross-functional alignment on a complex problem. All of this remains human.

Consider too the Slack channels that provide both the front page and backchannels of Anthropic communication. Agents diffused through Slack and eventually appeared in nearly half of active, public channels. Figure 8 zooms in on the communication network of a single large department, drawing on all public Slack channels that department members interacted through. It links both human and agent participants by whether they participated in a Slack thread. The figure shows the remarkable rise of agents, as orange dots blossom and dominate the network.

Figure 8: Agents come to the communication network. Note: Blue dots are employees; orange dots are agent threads. Ties are interaction among humans or agents in the same thread.

Agents appear disproportionately in dedicated channels for Claude-human interactions, rather than messaging a lot in incumbent human channels. The underlying structure and density of human communication changes little. Agents did not replace human interaction, but rather added to it: human threads in this department sustained the same number of human responses, while additionally layering on agent responses. Agents become teams for a single employee, rather than nodes with high connectivity to many employees at once.

As humans work amid a growing fleet of AI agents, they face pressure to shift human work into agent-visible channels. If a decision is made in an in-person meeting, and no notes or report-out appears, agents are missing crucial context for updating their goals and assumptions. An employee explained how having their name on a months-old document about Claude swag meant agents kept bringing requests for t-shirts and mugs, long after their responsibilities had changed. Private work, in unlogged meetings and direct messages, is invisible, confusing and discouraged in an AI-heavy workplace. One researcher described this default toward openness as critical to Anthropic’s thoroughgoing integration of AI: “most organizations do not run that way and I think that's a big shift because leaders have to defend feedback out in the open.” The need to feed AI context requires observability of human work and decisions.

Who will thrive in a workplace like this? Shifts in the content of work at Anthropic also show up as changes in the skills that hiring managers prioritize in hiring decisions. We used an automated coder to process hiring manager interview score cards for thousands of employees hired at Anthropic since 2024. These comments are qualitative reactions by interviewers assessing candidates’ performance. The clearest change is increased emphasis on whether candidates have demonstrated creative use of AI tools. In 2024, hiring managers noted candidates' track record on AI tooling in around 5% of assessments for technical roles, and 7% for non-technical roles. By 2026, these rates had tripled for technical roles and quadrupled for non-technical roles. Hiring managers increasingly focus on whether candidates effectively use AI.

Deeper changes in assessment are also visible. Among interviews for technical candidates, the single biggest increases were in comments on applicants’ autonomy and judgment. Discussion of domain expertise shrank as a share of overall assessment. As one manager explained, “I expect models to continue to be jagged, so for my team I want them to be fungible across domains.” Similarly, for non-technical candidates, customer and mission orientation increased, while discussion of execution skills fell. Increasingly, hiring managers assess applicants based on their judgment and commitment, rather than the domain-specific skills and execution automated by AI tools.

What employers can do

The deep adoption of AI at Anthropic makes it a useful case. As AI diffuses and improves, the organization of work could shift as it has in prior waves of technological change. The railroads gave us the managerial corporation, steam power allowed factories, and personal computers delivered the startup. What new organizations will tool-using, reasoning LLMs require, and what will be our role in them? One possibility is single-person startups, each with a human founder steering swarms of agents to rake in billions in revenue. Another is companies built by AI genius CEOs employing human agents only to wield pipettes and testify before Congress.

Anthropic does not look like either of these. It has tripled in size in the last year. It is no longer a small startup. It has also not ceded executive control to its models. Written Slack debates and in-person meetings steer everything from company strategy to team decisions, with little input from AI agents. Keeping human work visible across the company ensures autonomous agents reason from fresh context. Individual contributors orchestrating teams of agents look more like managers in terms of the knowledge they need and the interdependencies in their work. Working and deciding in the open is critical at an AI-intensive organization.

As employees increasingly see their work as managing teams of Claudes, they spend more time building the tools needed to do this effectively in their own distinctive domains. This experimentation means that employees are continually automating their own tasks away. In some roles, they are increasingly removed from the object-level work that originally built their skills. As agents sprint through workflows, human attention and judgment are a bottleneck that the system strains against. From sales to legal, human employees are expected to do more and different tasks. Roles broaden to include building products, managing agents and tackling the strategic and interpersonal work that remain beyond the scope of the best LLMs.

These changes in the organization and content of work have appeared alongside declining shares of junior technical roles in headcount, hiring, and posting. Hiring managers increasingly focus on applicants’ autonomy and judgment, rather than execution and narrow expertise. Overall, Anthropic’s revenue growth relative to its employment growth has sped past even the rapid early productivity growth of a prior generation of technology companies.

Reading these patterns forward and out across the economy suggests that AI diffusion could risk worker displacement. Prior work also finds that AI-native startups and AI-adopters are flatter and employ fewer entry-level employees. What can we learn from Anthropic about how to manage AI upheavals in a way that serves the humans working around them?

Here we want to proceed carefully. There are many parts of Anthropic’s employment practices that cannot be replicated across the economy.

But three features stand out. First, widespread stock ownership gives employees a strong interest in the company’s success. Of course, this is an easy posture for a company that has seen substantial increases in valuation. For many firms, shared ownership may be insufficient or otherwise undesirable. But it is difficult to imagine a version of pro-worker AI adoption in which workers do not hold a financial stake in successful rollout. If individual contributors are expected to “manage agents,” “make VP-level decisions” and be “their own business line,” as interviewees put it, then aligning their interests with the organization is crucial. The post-World War II union-management settlement forged in the 1950s rested on exactly this kind of bargain: labor unions like the United Auto Workers and the United Steel Workers allowed management prerogative over work reorganization (and even intensification) in return for pay increases tied to productivity increases and to a rich array of benefits. Whatever the new deal between AI-affected employees and their employers, a mechanism to share benefits of adoption is essential. At Anthropic, workers codify their expertise for the machine, see their work routines constantly roiled and disrupted, and have seen a large part of their job become speedreading the output of their AI collaborators. They do not do this for free.

Second, Anthropic is standing up an ongoing early warning system to monitor jobs facing AI-driven transformation. A series of role-level metrics for demand and productivity are read against AI capabilities and use. These aggregate metrics help flag where work is shifting. An early warning system allows the company to start reallocating affected employees to jobs with a skills fit that may be less immediately at risk. As companies across the economy reorient to an accelerated pace of work reorganization, effective systems for guiding internal employee reallocation will become increasingly valuable. Turning to the external labor market to meet every new task demanded by AI advances will be a stronger bottleneck the faster AI advances. In this report, we found increased mobility between departments, changing work content, and employees shifting to new tasks as old ones were automated. Building systems to flexibly reallocate workers internally will be critical for AI-intensive organizations.

This commitment to internal worker reallocation raises important tradeoffs. A well-functioning labor market should shift workers into their most productive positions, whether that is at their current employer or another one. Commitments to reallocate incumbent workers could make employers hesitant to take a risk on hiring new employees. In normal economic conditions, particularly intensely competitive ones, such commitments could be costly.

But prioritizing reallocation forces AI-adopting companies to consider ways that AI can create new tasks for new products and new markets, rather than funneling AI applications into replacing human workers to save on labor costs. This could help employers resist the temptation of ‘so-so’ or ‘inefficient’ automation in which AI or other technologies just barely outcompete human workers: employers replace human workers, imposing substantial social costs in lost income for displaced workers, while delivering minimal productivity benefits.

From what we see in Anthropic, both novel and persistently human tasks remain alongside intensive AI use. Uncertainty about the future set of these tasks should recommend preserving a flexible workforce. As one Anthropic executive noted, “a workforce that is anxiously worried is not a workforce doing its best work.”

None of these actions will prevent powerful AI from disrupting jobs. And indeed none directly address the slowdown in junior hires documented in this report. Employment protections for incumbents will not benefit those not hired to begin with. Private action on the part of employers must come alongside farsighted government policy around retraining and income support. Such policy should be guided by a clear picture of the scale of workplace transformation that AI can bring.

Suggested citation

@techreport{wilmers2026employment,

author = {Nathan Wilmers and Regina Catipon and Maxim Massenkoff and Peter McCrory},

title = {How employment is changing at Anthropic},

institution = {The Anthropic Institute},

type = {Technical Report},

year = {2026},

month = oct,

url = {https://www.anthropic.com/research/employment-at-anthropic}

}

Acknowledgements

We are grateful to the Anthropic employees who gave time for interviews about how their work has changed. For very helpful comments and assistance, we thank Kate Astbury, Shehzad Bashir, Zoe Blumenfeld, Scott Booth, Henry Brill, Yena Cho, Henry de Valence, Adam Farina, Johannes Hermle, Zoe Hitzig, Hasnain Lakhani, Eva Lyubich, Kerry Persen, Kristina Pham, Sarah Pollack, Hannah Pritchett, Georg Rilinger, Santi Ruiz, Szymon Sacher, Florian Scholz, Meg Tong, Monika Tuchowska, Helen Wang, Kim Withee, Charles Yang, and Jack Clark.

Works cited

Acemoglu, Daron, and Pascual Restrepo. 2019. “Automation and New Tasks: How Technology Displaces and Reinstates Labor.” Journal of Economic Perspectives 33 (2): 3–30. https://doi.org/10.1257/jep.33.2.3

Beraja, Martin, and Nathan Zorzi. 2025. “Inefficient Automation.” Review of Economic Studies 92 (1): 69–96. https://academic.oup.com/restud/article-abstract/92/1/69/7612958

Demirer, Mert, Leon Musolff, and Liyuan Yang. 2026. “Writing Code vs. Shipping Code: Productivity Effects Across Generations of AI Coding Tools.” NBER Working Paper 35275. https://doi.org/10.3386/w35275

Ewens, Michael, and Xavier Giroud. 2025. “Corporate Hierarchy.” NBER Working Paper 34162. https://doi.org/10.3386/w34162

Favaro, Marina, and Jack Clark. 2026. “When AI Builds Itself.” The Anthropic Institute. https://www.anthropic.com/institute/recursive-self-improvement

Hitzig, Zoe, Maxim Massenkoff, Eva Lyubich, Shaoyi Zhang, Ryan Heller, and Peter McCrory. 2026. “Agentic Coding and Persistent Returns to Expertise.” Anthropic, June 16. https://www.anthropic.com/research/claude-code-expertise

Hosseini Maasoum, Seyed Mahdi, and Guy Lichtinger. 2025. “Generative AI as Seniority-Biased Technological Change: Evidence from U.S. Résumé and Job Posting Data.” SSRN Working Paper 5425555. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5425555

Huang, Saffron, Bryan Seethor, Esin Durmus, Kunal Handa, Miles McCain, Michael Stern, and Deep Ganguli. 2025. “How AI Is Transforming Work at Anthropic.” Anthropic, December 2. https://www.anthropic.com/research/how-ai-is-transforming-work-at-anthropic

Kim, Hyunjin, and Rembrand Koning. 2026. “AI-Native Firms.” Harvard Business School Working Paper 26-090. https://www.hbs.edu/ris/Publication%20Files/26-090_96f92aa0-37d9-4789-beaa-5c0cb87a4032.pdf

Roodman, David, and Maxim Massenkoff. 2026. “An Evidence Review of Subsidized Job Training.” The Anthropic Institute Working Paper 2026-01. https://www.anthropic.com/research/reviewing-the-evidence-on-worker-retraining-programs

Footnotes

  1. Anthropic estimates come from internal financial and headcount records for the twelve months to April 2026 (approximately five years after founding). Google and Meta employment and revenue figures based on Form 10-K filings at 5 years after founding (2003 and 2009, respectively). All figures are deflated to 2025 dollars.
The Daily Front Page 9 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Math’s Fork in the Road
article

Will it be a golden age or a dark age for mathematics (and science)?

by smilelamp·▲ 133 points·164 comments·terrytao.wordpress.com ↗
their potential for accelerating discovery and enabling extraordinary

[This is a guest post by Francesco Maggi. This blog post was initially written in a different file format and converted using AI. — T.]

Large language models (LLMs) and the research systems built around them (and commonly known as “artificial intelligence”) have demonstrated remarkable abilities in generating mathematical proofs. While the quality and limits of these tools remain incompletely understood, their potential for accelerating discovery and enabling extraordinary advances in mathematics and, more broadly, across science and technology seems clear.

Seizing on that potential will require the careful integration of LLMs into the various STEM ecosystems, with the priorities of empowering a new generation of scientists, developing new STEM expertise, and preserving an open, collaborative, and intellectually independent scientific enterprise: that is the “golden age” scenario in the title. In the “dark age” scenario, scientific and technological output would still increase spectacularly in the short term, but, at the same time, independent human scientific activity would progressively weaken, the production of new knowledge becoming increasingly concentrated in a small number of hands, who become increasingly incapable of understanding the knowledge produced. The real darkness here would be knowledge becoming alien to human understanding.

Reality will likely combine these scenarios. In eight points, I will examine the choices shaping that outcome, moving from mathematics to science more broadly, and closing with actionable proposals.

(1) The technological breakthrough is real! But…

To state the obvious, LLMs have become powerful research tools. Recent LLM-generated proofs, like the construction of a finite-time blow-up solution to the Navier–Stokes equations with a forcing term, or the proposed proof of the quasi-Riemann Hypothesis, deserve the utmost attention from mathematicians. Assessing their significance will require continuous independent scrutiny, interpretation, and assimilation by the mathematical community.

LLMs seem most at home when writing proofs in Lean. (Lean is a proof assistant that allows computers to check whether a formal argument establishes a stated claim under specified definitions and axioms.) For those hard theorems where we really want LLMs to help us, these Lean proofs are extremely long, like hundreds of thousands of lines of code long. A seemingly emergent trend is that the longer the Lean version of a proof, the messier and less faithful its machine-generated “natural language” translation seems to be. We don’t understand why LLMs seem so bad at doing this kind of translation, but, as of today, they seem to really struggle with that task. So, for the really important problems, LLMs can give us correct Lean proofs that we cannot directly read, and messy natural language translations that are so complex as to require intensive study by mathematicians before they can lead to human understanding. Although this specific problem translation problem may change in the future, it leads us directly to the fundamental question:

Without human understanding, why do we care about studying mathematics, or even obtaining proofs, beyond benchmarking LLMs?

Mathematics is a very peculiar human artifact. It seems to have deep biological roots in how humans cognize. We identify (people, animals, objects); therefore, we count, we have numbers. We seem to have innate concepts of space and time, and we quantify and measure them with numbers. Some basic forms of arithmetic and geometry seem to almost be innate to humans. Different civilizations have built different kinds of mathematics, and even during the most recent history of mathematics, the very notion of the domain of mathematical inquiry has expanded drastically, sometimes even accidentally.

(We may even be in a situation where there is a mathematics of humans and a mathematics of LLMs. This is maybe true not only at a linguistic level, but also in a deeper sense, although it is just too early to say.)

I therefore disagree with claims that mathematics is over because machines can prove theorems. Without humans who understand mathematics, there is, quite literally, no human mathematics—a fundamental part of human culture. If we agree that we should not abandon mathematics because poorly understood machines bruise our anthropocentric vision of it, then society will need more mathematicians, not fewer. Like… a lot more.

(2) Healthy scientific skepticism and the limits of LLMs’ creativity.

Given the extraordinary results obtained by LLMs in mathematics, there is now considerable excitement concerning future capabilities and, at times, I think a lack of cool-headedness that does not do justice to the scientific method. Extraordinary performance should be received as a phenomenon to study, not as evidence for speculative conclusions about intelligence, creativity, or even consciousness. The latter are among the hardest legitimate subjects of scientific inquiry. They should be approached with explicit definitions, testable hypotheses, and empirical evidence. The same goes for the sweeping predictions about inevitable social transformations that inevitably follow the amazement generated by observed capabilities. We seem to forget too easily that the social consequences of these technologies will not be solely determined by their capabilities, but, most importantly, by the choices we will make on how these capabilities are developed and integrated into existing institutions. There are no inevitable outcomes, but there is a sore need for scientific and political leadership.

What do we know today about the mathematical abilities of LLMs? Theoretical and empirical insights both support the conclusion that LLMs are extraordinary at recombining existing intellectual structures and discovering unobserved connections among distant parts of the scientific literature. What is more, LLMs do this at a scale that is inaccessible to individual researchers. Whether their uncanny effectiveness at proving theorems can be entirely explained as hyper-sophisticated linguistic recombination, or whether it involves other forms of synthetic reasoning that are yet to be described and understood, is today an open scientific question.

One point that seems particularly hard to decide, given that commercial developers are not (cannot be) transparent on the working of their models is the relation between LLMs’ performance on a problem and the richness of the related mathematical literature. For example, both the Navier-Stokes equations and the Riemann Hypothesis are the subject of a vast literature created by hundreds of the most brilliant mathematicians. There may be something here. After all, when OpenAI published their “Tuesday October 6, 2026, Drop”, they mentioned having tried 4000 problems, reporting success for some hundreds of them (as counted after “aggregation” and “selection”). The language used there is a bit vague, but it still seems to imply the existence of a potentially large group of problems on which the frontier LLM failed to find solutions: from a scientific viewpoint, it would be very interesting to know what these problems were. Maybe those problems are more interesting than NS and RH? Or is the ground around them less fertile for LLMs to come help? These are important questions for humans who want to advance mathematical progress: how do we put LLMs in the best position to help?

(3) Mathematization.

Mathematicians seem substantially agreed that some human mathematical functions are not reducible to theorem proving. A particularly important one is mathematization:

The act of inventing the very mathematical language through which reality (including mathematical structures themselves) becomes quantitatively and rationally intelligible.

Newton, Fourier, Riemann, Einstein, Shannon, Grothendieck: their greatest mathematical contributions could be described as the highest examples of mathematization, as they included the invention of mathematical languages and conceptual frameworks that transformed entire areas of knowledge.

We do not know if LLMs can perform mathematization — my guess would be that they should be (or eventually become) capable of mathematization of mathematical structures, so, of a very specific part of reality, but it is much less clear if they can go beyond that, at least in ways that they can then translate efficiently into natural language — I am going back to human understanding here.

In my opinion, the most exciting opportunity created by making proofs a more accessible commodity is that, in the near future, we may be able to do much more mathematization than ever. There are vast swaths of the natural and social sciences where our ability to mathematize has been largely dampened by the difficulty of obtaining proofs — indeed, without proofs, it can be difficult to establish a theory’s consequences and compare them with observed phenomena. But, as often observed in science, we may have just climbed the peak of the mountain only to find more land to explore.

I think there should be considerable excitement around this idea. Indeed, whenever a system of phenomena, experiments, and data is successfully mathematized, we vastly increase the sophistication and depth of the accessible insights into that system.

The most spectacular example of this assertion is probably the success of quantum mechanics, where the mathematical formalization of an original set of experimental data has famously produced many physically counterintuitive but testable predictions confirmed by experiments that would have otherwise been unthinkable — who would have proposed entanglement as a property of nature if not forced to do so by theoretical prediction?

(4) Mathematical progress cannot be measured by checking off boxes on a problem list.

Mathematics is not a finite system of questions. Hilbert proposed his famous list of problems at the dawn of the previous century (which inspired the list of Millennium Prize Problems) with the intent of guiding and channeling a “Cambrian explosion” of mathematical activity. But many fundamental mathematical contributions of the past century happened without any connection to any list of problems.

For example, the mathematical foundations of general relativity emerged from geometric ideas developed over multiple generations of mathematicians, starting with Gauss and Riemann, and continuing with Ricci-Curbastro and Levi-Civita. The synthesis of physical insight, special relativity, and Riemannian geometry into general relativity has no connection with any list of difficult problems or their intricately complex proofs (and is a textbook example of mathematization in action!)

A second example is provided by a broad historical trajectory connecting the study of Fourier series, the development of measure theory, modern probability, and information theory. Shannon’s insight that the statistical structure of a source determines fundamental limits on the transmission and compression of information is an extraordinary example of how mathematization can open an entirely new field. Similarly, some of the mathematical foundations of modern computing and machine learning are arguably rooted in a series of mathematical advancements that were not immediately inspired by attempts at proving big conjectures or by increasingly complex proofs.

It is undeniable that working on problems from Hilbert’s and other lists has proven extremely fruitful for the development of mathematics. What is interesting in that regard is that the usefulness of these efforts has often gone well beyond the solution of the specific problems: these problems have served as lighthouses in the navigation of unknown mathematical waters, as already noted in other comments. But reducing mathematics to solving hard problems from a list provides a simplistic and incomplete understanding of the field and of what constitutes progress in it.

(5) Authorship, credit, and peer review still matter!

LLM-generated work draws on a vast body of human mathematical literature, but how the extracted information is used remains unclear. There are several issues related to this basic obscurity: Which mathematical ideas contributed to a specific proof? Who is responsible for asserting the proof’s correctness and for implementing revisions? In the case of an LLM rediscovering arguments already present in the literature, how do we ensure appropriate citations? We need sensible answers to all these questions, and we need to discuss how the existing publication system should correspondingly change and adapt.

Proofs are not the end of the mathematical discovery process. To become a fruitful intellectual artifact, a proof needs to be understood, interpreted, related to previous work. Key ideas must be identified and processed to become part of a shared mathematical culture. Peer review matters. The use of LLMs and of Lean formalization can support the effectiveness of peer review (formal correctness becoming potentially easier to ascertain), but human intervention remains necessary to establish meaning, relevance, and context, and to preserve a creative mathematical environment that favors mathematization and is compatible with the training of future mathematicians.

A particularly challenging issue related to the obscurity of how human-generated data is made accessible to LLMs is of course the current transition from a very open system of doing mathematics (with people routinely proposing open problems and conjectures), to a closely guarded one (where people have already become very cautious about sharing ideas).

For example, given OpenAI’s interest in the Riemann Hypothesis, who would light-heartedly think of prompting a potentially original idea about it into ChatGPT? After all, that same idea could become accessible to another mathematician or OpenAI employee working with a more advanced LLM, that could turn that idea into a proof without even realizing its origin and having the opportunity of acknowledging it. So, another side of obscurity and uncertainty is that people may end up using LLMs much less than they would like to do. My concern extends beyond published policies on training data to the security of stored research material. Indeed, there are documented cases of agents gaining unauthorized access to third-party systems. Those incidents make the independent assessment of confidentiality protections particularly important.

Similarly, it seems that mathematicians are already concerned and guarded about what they write in research statements and research proposals. After all, an administrator or a reviewer may upload those documents into an LLM to get help in writing a report, thus potentially compromising the confidentiality of unpublished research.

(6) The training of future mathematicians has already become an existential challenge.

Training future mathematicians is closely related to authorship and credit. I will discuss a few representative challenges.

One remarkable feature of mathematics has traditionally been the possibility of establishing intellectual merit very directly through mathematical achievement. A strong result addressing a well-known question could allow a researcher to gain recognition and opportunities, no matter how institutionally marginalized and independently of established academic hierarchies.

Among the mathematicians I have spoken with, the prevailing sentiment is that this traditional mechanism of recognition has effectively collapsed in a matter of weeks. A strong mathematical result, by itself, can no longer be taken as convincing evidence of a student’s independent mathematical abilities. I do not know whether this sentiment is overblown, but the uncertainty is real, and we have yet to develop satisfactory standards for assessing individual intellectual contributions to mathematical research in the age of LLMs.

Without substantial transparency on how LLMs are prompted and by which mechanisms prompts influence their effectiveness, the assessment of mathematical capabilities of individuals will rest almost exclusively on individual judgements, which will have to be based, arguably, on more substantial human-to-human interactions.

This is, by far, not the only problem. The effects of intensive LLM use on human creativity are largely unknown. Anecdotal accounts from experienced mathematicians who have used LLMs extensively over the past year suggest subtle, and sometimes not-so-subtle, shifts in attention, motivation, and depth of understanding.

How do we learn to use LLMs in ways that amplify our intellectual abilities without increasingly delegating the very cognitive activities through which mathematical expertise is learned and acquired?

Finding plausible answers to this question is one of the main issues to address if we want the golden age scenario to materialize.

(7) Private control of frontier LLMs is potentially dangerous.

Academic and corporate research have collaborated fruitfully for decades. LLMs themselves combine theoretical and technological insights developed in academia with concentrated capital and investment.

The danger here rather lies in the growing asymmetry between the scientific capabilities available to a small number of frontier companies and those accessible to universities and public institutions.

This asymmetry can be very consequential when those companies use proprietary systems to pursue scientific and technological discoveries in competition with academic research, in a setting where academic researchers will come to depend on the use of those same proprietary systems to be able to contribute.

Mathematics may offer an early, visible example of an asymmetry that could become increasingly consequential across science. Allowing private interests to determine which questions receive the best tools, who can use them, how capabilities are evaluated, and when discoveries are released would concentrate scientific influence to an unprecedented degree. A balance in capabilities seems necessary for stable cooperation and harmonization of interests. Giving a few companies increasing—and potentially total—control over what seems bound to become a basic infrastructure for frontier mathematics and science seems ill-advised.

This conclusion does not require assuming bad intentions on the part of corporate leadership. Simply put, commercial incentives, scientific priorities, and the public interest do not always necessarily align. A healthy scientific ecosystem requires a dialog between institutions with different objectives and different sources of authority, subject to transparency and forms of public accountability.

Coming back to mathematics, OpenAI has been engaging in various forms of dialogue with the mathematical community. This dialogue has led to some improvements with respect to the situation at the time of the Navier–Stokes problem, both in the presentation and dissemination of LLM-generated results. I think these efforts should be received constructively and deserve recognition, also because there are objective and legitimate difficulties for OpenAI in increasing transparency and access, like the pressure to generate returns on enormous investments, and the need to assess safety before deploying systems.

These interactions show clearly the inherent difficulties in harmonizing corporate and academic interests, even assuming perfect goodwill on everyone’s part. More importantly, these initiatives do not address the structural issue of unequal access to frontier LLM capabilities. Leaving the solution of this point to the goodwill and voluntary initiatives of individual companies seems insufficient.

(8) Building scientific LLM infrastructure within the broader research community.

Universities, professional societies, funding agencies, and scientific foundations should coordinate the development and governance of competitive LLMs. Scientists will need access to frontier capabilities, transparency about their operation and use of research data, strong confidentiality protections, and the ability to test and reproduce research claims independently.

The massive computing resources, specialized personnel, data infrastructure, and ongoing investments needed to support this kind of initiative are not within the reach of a single institution, and a huge leadership effort will be necessary to conjure the combination of independent model development, guaranteed access to commercial systems, public computing infrastructure, and open research resources that could do the job.

The key goal here is not necessarily to achieve total technological independence from private companies, but to preserve the capacity for independent scientific research and to create LLMs that are calibrated for supporting research communities, rather than bound to cause their gradual weakening and, possibly, their eventual disappearance.

Preserving an intellectually independent, open, and creative scientific culture while skillfully integrating increasingly powerful machines is bound to become the defining cultural challenge of our times. Mathematics offers an early opportunity to confront a challenge likely soon to extend across science, with increasingly complex and potentially dangerous consequences for knowledge, intellectual power, and society. Scientific skepticism and fairness to everyone involved should guide us.

The golden age scenario is achievable. Access to frontier LLMs for researchers, reproducibility and disclosure standards for LLM-generated scholarship, resources for understanding and disseminating LLM-generated results, resources for studying the effects of LLMs on scientific education and research training, and sustained investments in publicly governed LLM infrastructure are concrete steps that we can take today to make the golden age scenario the most likely outcome.

In the specific case of mathematics, my hope and wish for a solidly independent LLM infrastructure would be the empowerment of mathematicians to systematically pursue opportunities for theory-building, or mathematization, both inside mathematics and across the spectrum of natural and social sciences. That, I think, would be a truly revolutionary achievement.

In the meantime**, I think mathematicians have the huge responsibility of preserving mathematics as a lively part of human culture** . Right now, there are far too many interests and far too many emotional reactions pulling towards absolute, negative conclusions of little constructive content. We must just accept that these are uncertain times and that we are not in full control of the situation. We must engage with every tool that can help us discover new mathematics. We must keep writing, publishing, reviewing, writing proposals. We must become more ambitious and curious than ever in doing all these things. And we must make sure to create the best professional standards for the next generations of mathematicians to keep mathematics a central node of human culture.

The Daily Front Page 10 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Holmes Lens
article

The Elizabeth Holmes documentary “You Can See Everything” is deceiving

by MaysonL·▲ 373 points·538 comments·readtheprofile.com ↗
the film was actually manipulating you

Did you realize the film was actually manipulating you?

Holy freaking cow.

I saw the new Elizabeth Holmes documentary, You Can See Everything, last night, and I genuinely can’t type fast enough to express how mind-bending it was.

I’ve seen a lot of chatter online about whether Elizabeth Holmes is a liar, whether she deserves to be in prison for her failed startup Theranos, and whether the documentary is too sympathetic to her.

But that’s not even remotely close to what I took away from it. As we walked out, my husband asked me, “So what did you think?” And I just responded with, “Forget Elizabeth Holmes. That was a masterpiece in storytelling.”

I walked in expecting that the filmmakers were going to tell us a story about deception. What I did not expect is that they were deceiving us — the viewers — in real time.

An entire theater full of grown adults was falling for it. At one point, people were shouting so loudly at the screen that I couldn’t hear the dialogue. I heard a woman yell, “Criminal!” — and it wasn’t directed at Elizabeth Holmes. I’ve never experienced anything like that in a movie theater. It was emotion, and it was visceral.

What makes the documentary so brilliant is that it forces you to confront how much of what you believe about another person comes how their story has been told to you. And we are so so susceptible to this that it’s scary.

Think about Elizabeth Holmes. How much of your opinion of her comes from the facts of her criminal case & how much comes from the images and/or videos and/or TV dramas you’ve seen over the years? I remember one Halloween when the Theranos scandal was at its peak, it seemed like everyone was dressed in a black turtleneck carrying tiny vials of fake blood. Holmes was everywhere.

But the thing that often gets lost in the retelling of her story is that Holmes was actually acquitted of all four charges related to defrauding patients. She’s in prison because a jury found that she knowingly misled investors who poured more than $700 million into the startup. That’s a significant distinction, but as a society, we don’t love nuance. Just tell us — is she good or is she bad? Is she a liar or is she not?

I recently wrote about a fascinating experiment Canon conducted in 2015. Six photographers were asked to photograph the same man in the same location. The twist was that each photographer was given a different description of him: a millionaire, a convict, a fisherman, an alcoholic, a psychic, and a lifesaver.

The resulting portraits were wildly different.

A Canon rep said, “A photograph is shaped more by the person behind the camera than by what’s in front of it.”

Now imagine that principle applied to an entire three-hour documentary.

Over the course of the film, directors Lance Oppenheim and Nathan Fielder managed to make a theater full of people with fully developed pre-frontal cortexes repeatedly reconsider what they believed about the people on screen. They did it through camera angles, close-ups, editing, and the order in which information was revealed.

The framing of Elizabeth and those around her changed little by little until it became obvious, and as soon as our brains detected a narrative shift, our feelings about it followed. It was like watching a magic show … or one continuous reality TV show in which someone gets the villain edit, the victim edit, the manipulator edit, and all of us just falling for it again and again.

We like to believe that we form our opinions by gathering evidence, weighing facts, and arriving at reasonable conclusions. Be for real. No we do not. Here’s how it actually goes: We form an emotional impression first, then we build a belief around it, and then we go looking for facts that support it. This is my theory as to why we’re so divided in this country. Beliefs built on emotion are nearly impossible to reason with.

The psychology behind the film’s manipulation should be studied. First, a close-up shot of an unblinking Elizabeth Holmes: She’s sinister. Then, a wider shot of her bouncing her baby: Wait a second, she’s a mom, she’s human! Then, her husband’s painstakingly long pause: Wait, is he the puppeteer? Then, a smile! “No, no, that can’t be genuine.”

And then there’s Fielder himself, who moved in with the couple for a whole month before Holmes headed to prison. How reliable of a narrator is he? Does he care a bit too much for Elizabeth that he’s willing to lie to the viewer? How much can we trust his perception of events?

I’m telling you, it’'ll break your brain.

You Can See Everything does a good job explaining the phenomenon of psychological manipulation, but it also makes you participate in it. It evokes emotion, and all of the greatest pieces of art evoke emotion.

You sit there believing you’re watching a documentary about a woman who deceived the world, only to discover that you’re also watching a demonstration of how easy it is to deceive you.

(This was really hard to write without giving away any spoilers, but watch the film, and let me know what you think!)

The Daily Front Page 11 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Fraud, Then and Now
article

Tesla 'Cannot Guarantee' Roadster Reservation Holders Will Ever Get a Car

by healsdata·▲ 112 points·138 comments·thedrive.com ↗

Tesla Roadster Prototype

Tesla unveiled its second-generation Roadster for a second time Thursday night, nearly 10 years after the last big shindig. It made even bigger promises to help customers forget that it never delivered that car, despite taking deposits worth up to $250,000 (the full price of the top Founders Series version at the time). Now it appears Tesla is preparing to do the same thing again.

InsideEVs noticed that the reservation agreement for the new new Roadster on Tesla’s website states that “Roadster is still under development and so we cannot guarantee when your vehicle will actually be delivered or if it will be delivered.” And while Tesla is, again, asking for up to $250,000 up front, the reservation agreement also states that it is just that. Customers are only getting an “approximate” place in line if the Roadster enters production, not a confirmed build slot.

Roadster Reservaation Agreement

Because the Roadster is still under development, any purchase price discussed is also just an estimate, and features or specs could change on the way to production. Tesla says as much in the reservation agreement. The automaker notes that it’s “still working on what options, features, and hardware will have and so cannot confirm the exact price just yet.” Full pricing will be available when customers are invited to configure their cars, the automaker claims. Right now, Tesla is estimating that production will start in 2028, but nearly every new product from the company has been delayed, and the previous version of the Roadster never made it to production at all.

The (somewhat) good news this time is that, while reservations are non-transferable, Tesla isn’t including a no-resale clause as it did with the Cybertruck Foundation Series and Model S Signature Edition rollout specials. So if Tesla can’t deliver on CEO Elon Musk’s lofty promises of zero to 60 mph in 0.81 seconds and built-in rocket thrusters, customers will at least be able to unload their cars quickly. Reservations are also fully refundable, which, given Tesla’s track record with the previous Roadster, is an option customers should definitely keep in mind.

The Daily Front Page 12 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Florida’s Private Governments
article

Florida's HOAs and condo associations are making the housing crisis worse

by lovewins·▲ 171 points·324 comments·hoaspy.com ↗
A housing crisis has three parts: what a home costs, how many are for sale, and whether the people in them get to stay.

A housing crisis has three parts: what a home costs, how many are for sale, and whether the people in them get to stay. In Florida the homeowner and condominium associations push on all three. HOA Spy indexes 104,659 Florida associations — the 27,377 with a unit count on file hold 1,518,436 homes between them. Their records show 10,296 foreclosure suits the associations brought against their own members, 460,412 claims of lien and 277,047 lis pendens recorded against homes, 48,999 court records in all, and 6,661 associations whose own corporation has lapsed or fallen out of standing. Every count on this page comes from official court dockets and county records, and every community named links to its own record; the dues and price figures are someone else's, dated and linked where they appear. Suits and liens are counts of filings, not of homes lost.

Where it is happening

8,148 of the 13,601 Florida communities with court records (rings — red where foreclosure is the most common case type) and 8,165 of the 34,198 with recorded liens (dots, coloured by liens in the last five years) have an address or ZIP in the record and are drawn here. Click a pin for the community's report, or open the full-screen map.

Liens & court cases

10,296 foreclosure suits brought by associations against their members

2,695 associations that have foreclosed on an owner

460,412 claims of lien recorded against homes

277,047 lis pendens — foreclosure suits announced

48,999 court records naming an association

6,661 associations lapsed or out of standing

73% of the nation's association foreclosure suits

Check a Florida community → Florida lawsuits, liens and foreclosures: all the numbers →

Five ways Florida associations make it worse

An association exists to keep a community maintained and insured and to collect the dues that pay for it. The records show what else the 104,659 Florida associations do with the powers the law gives them, and what it does to the housing around them.

  1. They foreclose on their own members, over debts that start small

    Florida law gives every association a lien on each home for unpaid assessments and the right to foreclose it — section 720.3085, Florida Statutes for homeowners' associations, section 718.116, Florida Statutes for condominiums. The debt that starts it can be a few hundred dollars; by the time a suit is filed it carries interest, late charges, collection costs and the association's attorney's fees, all secured by the lien. 10,296 foreclosure suits on file were brought by a Florida association against one of its own members, from 2,695 communities — 2.6% of those indexed. The lender's foreclosures that merely name an association number 1,629: the association is the foreclosing party more often than the bank is.

    The peak was 2009, with 875 suits (about 2 a day); 2025, the last full year, had 599, and 667 have been filed so far in 2026.

    Each suit is a household that may be forced to sell, a home that may go to auction for the debt and the fees, and a sale that takes place under a deadline instead of on the market. A foreclosure suit is not a lost home — most end when the owner, or the owner's lender, pays — but the pressure is the point.

  2. They put liens on homes that then cannot be sold or refinanced

    Before any suit there is a claim of lien, a one-page document in the county's official records against the home. A lien does not have to be foreclosed to do damage: a title company will not close a sale over it, a lender will not refinance behind it, and clearing it means paying whatever the association's lawyer says is owed. In the recorder indexes HOA Spy collects (Broward County Official Records index, Miami-Dade County Official Records index), 460,412 claims of lien have been recorded by associations since 1978, and 277,047 lis pendens — 60% of the liens were followed by a foreclosure filing. 5,702 communities recorded a lien in the last five years; 1,047 liens on file were contested.

    2025 saw 7,916 claims of lien, up 8% on 2020 (7,352); the peak was 2008 with 29,518.

    The communities with the most liens on record: BEACHPLACE TOWERS CONDOMINIUM ASSOCIATION, INC. (8,798); PALM-AIRE RESORT OWNERS ASSN (4,951); SILVERLAKES COMMUNITY ASSOCIATION, INC. (4,569); BEACH PLACE TOWERS CONDO ASSN INC (2,602); CHAPEL TRAIL OWNERS ASSN INC (2,407).

  3. They raise the cost of staying: dues, special assessments and the condo-safety bill

    Since the Surfside collapse, Senate Bill 4-D (2022) and the laws that followed it require older condominium buildings to pass a milestone structural inspection (section 553.899, Florida Statutes) and to fund structural reserves on the strength of a structural integrity reserve study (section 718.112(2)(g), Florida Statutes), reserves the owners can no longer vote to waive. The repairs and the reserves are paid by the owners, through higher dues and special assessments, and an owner who cannot pay is back at step one above.

    The cost is visible in the dues. Redfin reported in August 2024 that median monthly HOA fees in the three months to July 2024, against a year earlier, rose Tampa 17.2% to $614 a month, Orlando 16.7% to $467 a month, Fort Lauderdale 16.2% to $611 a month, against 5.7% across the metros it tracked (Redfin).

    Buyers price that in: Mortgage Professional America reported in January 2026, citing housing analyst Nick Gerli, that condo values in Florida fell 9.9% over the preceding twelve months (source). A home that costs more each month to keep and less to sell is the crisis in one sentence.

    No public index records what an association charges, so HOA Spy cannot count the assessments. What it can count is what happens when they go unpaid — the liens and foreclosure suits above.

  4. They litigate, and every owner pays for it

    Every suit an association files or defends is paid for out of the dues — and the cost of a suit an owner wins is still passed back to the owners. 48,999 court records name a Florida association, from 13,601 communities. The association is the plaintiff in 29,947 of them and the defendant in 14,113; when it is sued, the most common suit is Appellate (4,380). 92 communities have fifty or more cases each — litigation as a matter of routine. The ten busiest communities account for 2% of all the records. Among the 24,664 closed cases with both dates on the docket, half took more than 223 days.

    Community County Court records Most common case
    GRANDE OASIS AT CARROLLWOOD CONDOMINIUM ASSOCIATION, INC. 137 Other
    PALMERA POINTE CONDOMINIUM ASSOCIATION, INC. 135 Foreclosure
    PLACE ONE CONDOMINIUM ASSOCIATION, INC. 132 Other
    NORTH BAY VILLAGE CONDOMINIUM ASSOCIATION, INC. 125 Other
    VILLAGES OF BLOOMINGDALE I HOMEOWNERS ASSOCIATION, INC. 123 Other
  5. Some have stopped functioning as corporations at all

    An association is a corporation, and a corporation that is dissolved, delinquent or not in good standing with the state cannot reliably insure the property, keep its reserves, sign a contract or answer a lender's questionnaire — which is enough to stall every sale in the community. Of the 104,659 Florida associations checked against the state's corporate registry, 3,753 have no active corporation on file and 2,908 are delinquent in their registration — 6% in all.

Where it is worst: Florida county by county

County Associations With court records Court records Claims of lien Lis pendens
Broward County 27,819 2,488 18,565 311,840 170,890
Miami-Dade County 13,708 2,878 7,900 128,202 94,447
Palm Beach County 3,741 200 824 11,469 7,098
Hillsborough County 673 80 60 970 418
Pinellas County 2,051 231 30 1,581 890
Pasco County 196 28 12 0 8
Volusia County 482 147 3 20 912
Orange County 656 246 4 1,699 213
Okaloosa County 255 215 4 42 28
Collier County 1,767 264 91 1,237 821

The county is the community's own, from its registration or ZIP. Court records are counted only in the courts HOA Spy indexes and liens only in the recorder indexes it collects, so a county whose portal is not read shows few or none.

Florida against the nation

Florida associations bring more foreclosure suits against their members than those of any other state on HOA Spy. 10,296 of the 14,168 on file (73%); Texas is next with 2,349.

  1. One in three HOA lawsuits in the country is a Florida case

    Florida holds 48,999 of the 147,465 court records naming a homeowner or condominium association on HOA Spy (33%). Texas is next with 41,271, and no other state reaches 15,879.

  2. Florida associations foreclose on their own members more than every other state combined

    12,006 Florida court records are foreclosure cases — the association foreclosing its lien on a home, or named in a lender's foreclosure — 55% of the 21,898 nationwide. Texas is next with 5,084.

  3. When homeowners sue their association, half the time it is in Florida

    14,113 Florida records have the association as the defendant, 51% of the 27,622 such records in every state. Texas is next with 3,747. Florida also leads in 996 insurance disputes (36% of the nation's) and 800 fair-housing and other civil-rights suits (41% of the nation's).

  4. 737,459 lien and foreclosure filings against homeowners in Broward and Miami-Dade counties

    The recorder indexes of Broward and Miami-Dade counties alone list 460,412 claims of lien and 277,047 lis pendens (the filing that starts a foreclosure) by associations. At the peak, in 2009, associations there recorded 46,427 lis pendens — about 127 a day. One community, BEACHPLACE TOWERS CONDOMINIUM ASSOCIATION, INC., has 8,798 claims of lien on file. (Lien indexes are collected for Florida, Illinois and New York only, so this is a count for the covered counties, not a national ranking.)

  5. 2026 is already Florida's busiest year on file

    2,816 Florida court records have been filed so far in 2026, past the 2,549 of 2010, the previous record; 2025 had 2,476. 92 Florida communities have 50 or more court records each, more than any other state. Maryland is next with 73.

These are counts of records on file, not rates. Florida has 104,659 indexed associations — more than any other state — and its county courts publish deep case histories, so it counts more. Per hundred communities, Florida has 47 court records; Maryland has 603 and Texas has 231. A state whose courts hide older cases ranks lower whatever its associations do.

What a buyer, an owner or a legislator can do

  • Before buying, read the association's record. Search it on HOA Spy: every lien, lis pendens and court case on file, each linked to the official record, and its corporate standing. A community that forecloses as a matter of routine, or whose corporation has lapsed, is a fact to price in before the inspection period ends.
  • Ask for the budget, the reserve study and the inspection report. Florida law entitles a buyer to the association's documents and a condominium buyer to the milestone inspection report and the reserve study; under the usual Florida sale contract a special assessment levied before the contract is the seller's and one voted later is for the parties to settle, so ask what is pending. What the records cannot count — the assessments to come — is in those papers.
  • If a lien or a notice arrives, use the notice window. Ask for an itemised ledger; much of a lien balance is often fees added to a smaller debt. Paying the assessments before the deadline in the notice of intent stops the suit, and a dispute put in writing before the deadline is kept. Legal aid offices and bar referral services handle these cases.
  • For policy: the levers the records point at are the fees and interest a lien may secure, the floor below which an association may not foreclose, a right to a payment plan before suit, and public reporting of what associations charge — the one number no index holds. This page is not legal advice.

Where this data comes from

Foreclosure cases are the dockets whose nature of suit is a foreclosure, in the courts HOA Spy indexes; the association's side is the role the court recorded, else the caption. Corporate standing is the state registry's as last checked. A community outside the indexed courts can have records this page does not count; names are matched conservatively, so an ambiguous match is left out rather than guessed. Sources & methodology.

Questions people ask

Are HOAs making Florida's housing crisis worse?

The records show them adding to it in ways that can be counted: 10,296 foreclosure suits brought by associations against their own members, 460,412 liens recorded against homes, 48,999 court records paid for out of dues, and 6,661 associations whose corporation has lapsed. The dues and special assessments, which no public index records, come on top of that.

Can a Florida HOA really foreclose on a home over unpaid dues?

Yes. The association's lien for assessments can be foreclosed like a mortgage after the statutory notice, and 2,695 Florida associations have done it at least once. Florida's homestead protection does not bar an assessment lien.

How much have Florida HOA fees gone up?

HOA Spy does not collect dues. Redfin reported in August 2024 that median monthly HOA fees in the three months to July 2024, against a year earlier, rose Tampa 17.2%, Orlando 16.7%, Fort Lauderdale 16.2% (source).

Why are Florida condo assessments rising?

After the Surfside collapse, Senate Bill 4-D (2022) required milestone structural inspections of older buildings and fully funded structural reserves that owners can no longer waive; the repairs and the reserves are paid by the owners through dues and special assessments. The statutes are linked in the sources above.

Which Florida associations have the most court records?

GRANDE OASIS AT CARROLLWOOD CONDOMINIUM ASSOCIATION, INC. (137); PALMERA POINTE CONDOMINIUM ASSOCIATION, INC. (135); PLACE ONE CONDOMINIUM ASSOCIATION, INC. (132). Each links to its report, with every case and its court record.

Is Florida the worst state for HOA foreclosures?

Florida ranks 1st of the states on HOA Spy for foreclosure suits brought by associations, with 10,296 of 14,168. The count depends on which courts are indexed in each state as well as on the associations, so it is a count of records, not a rate.

How do I check a Florida community before I buy?

Search it by name on HOA Spy: its report lists every lien, lis pendens and court case on file with a link to the official record, its corporate standing, and which sources were checked. The Florida statewide page has every number by county and by year.

Absence of findings means absence in the sources checked, not a clean bill of health — coverage varies by county. Every finding on a community's report links to the official government record it came from; records may contain errors — verify with the official source. Not legal advice. Data last checked 2026-10-02. Sources & methodology.

The Daily Front Page 13 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Militia and the Mole
article

A Mole Infiltrated the Highest Ranks of American Militias (2025)

by georgecmu·▲ 130 points·28 comments·propublica.org ↗
He didn’t tell police or the FBI. He didn’t tell his family or friends.

Reporting Highlights

  • A Freelance Vigilante: A wilderness survival trainer spent years undercover, climbing the ranks of right-wing militias. He didn’t tell police or the FBI. He didn’t tell his family or friends.
  • The Future of Militias: He penetrated a new generation of militia leaders, which included doctors and government attorneys. Experts say that militias could have a renaissance under Donald Trump.
  • A Secret Trove: He sent ProPublica a massive trove of documents. The conversations that he secretly recorded give a unique, startling window into the militia movement.

These highlights were written by the reporters and editors who worked on this story.

John Williams kept a backpack filled with everything he’d need to go on the run: three pairs of socks; a few hundred dollars cash; makeshift disguises and lock-picking gear; medical supplies, vitamins and high-calorie energy gels; and thumb drives that each held more than 100 gigabytes of encrypted documents, which he would quickly distribute if he were about to be arrested or killed.

On April 1, 2023, Williams retrieved the bag from his closet and rushed to his car. He had no time to clean the dishes that had accumulated in his apartment. He did not know if armed men were out looking for him. He did not know if he would ever feel safe to return. He parked his car for the night in the foothills overlooking Salt Lake City and curled up his 6-foot-4-inch frame in the back seat of the 20-year-old Honda. This was his new home.

He turned on a recording app to add an entry to his diary. His voice had the high-pitched rasp of a lifelong smoker: “Where to fucking start,” he sighed, taking a deep breath. After more than two years undercover, he’d been growing rash and impulsive. He had feared someone was in danger and tried to warn him, but it backfired. Williams was sure at least one person knew he was a double agent now, he said into his phone. “It’s only a matter of time before it gets back to the rest.”

In the daylight, Williams dropped an envelope with no return address in a U.S. Postal Service mailbox. He’d loaded it with a flash drive and a gold Oath Keepers medallion.

It was addressed to me.

The documents laid out a remarkable odyssey. Posing as an ideological compatriot, Williams had penetrated the top ranks of two of the most prominent right-wing militias in the country. He’d slept in the home of the man who claims to be the new head of the Oath Keepers, rifling through his files in the middle of the night. He’d devised elaborate ruses to gather evidence of militias’ ties to high-ranking law enforcement officials. He’d uncovered secret operations like the surveillance of a young journalist, then improvised ways to sabotage the militants’ schemes. In one group, his ploys were so successful that he became the militia’s top commander in the state of Utah.

Now he was a fugitive. He drove south toward a desert four hours from the city, where he could disappear.


1. Prelude

I’d first heard from Williams five months earlier, when he sent me an intriguing but mysterious anonymous email. “I have been attempting to contact national media and civil rights groups for over a year and been ignored,” it read. “I’m tired of yelling into the void.” He sent it to an array of reporters. I was the only one to respond. I’ve burned a lot of time sating my curiosity about emails like that. I expected my interest to die after a quick call. Instead, I came to occupy a dizzying position as the only person to know the secret Williams had been harboring for almost two years.

We spoke a handful of times over encrypted calls before he fled. He’d been galvanized by the Jan. 6, 2021, storming of the Capitol, Williams told me, when militias like the Oath Keepers conspired to violently overturn the 2020 presidential election. He believed democracy was under siege from groups the FBI has said pose a major domestic terrorism threat. So he infiltrated the militia movement on spec, as a freelance vigilante. He did not tell the police or the FBI. A loner, he did not tell his family or friends.

Williams seemed consumed with how to ensure this wasn’t all a self-destructive, highly dangerous waste of time. He distrusted law enforcement and didn’t want to be an informant, he said. He told me he hoped to damage the movement by someday going public with what he’d learned.

The Capitol riot had been nagging at me too. I’d reported extensively on Jan. 6. I’d sat with families who blamed militias for snatching their loved ones away from them, pulling them into a life of secret meetings and violent plots — or into a jail cell. By the time Williams contacted me, though, the most infamous groups appeared to have largely gone dark. Were militias more enduring, more potent, than it seemed?

Some of what he told me seemed significant. Still, before the package arrived, it could feel like I was corresponding with a shadow. I knew Williams treated deception as an art form. “When you spin a lie,” he once told me, “you have to have things they can verify so they won’t think to ask questions.” While his stories generally seemed precise and sober — always reassuring for a journalist — I needed to proceed with extreme skepticism.

So I pored over his files, tens of thousands of them. They included dozens of hours of conversations he secretly recorded and years of private militia chat logs and videos. I was able to authenticate those through other sources, in and out of the movement. I also talked to dozens of people, from Williams’ friends to other members of his militias. I dug into his tumultuous past and discovered records online he hadn’t pointed me to that supported his account.

The files give a unique window, at once expansive and intimate, into one of the most consequential and volatile social movements of our time. Williams penetrated a new generation of paramilitary leaders, which included doctors, career cops and government attorneys. Sometimes they were frightening, sometimes bumbling, always heavily armed. It was a world where a man would propose assassinating politicians, only to spark a debate over logistics.

Federal prosecutors have convicted more than 1,000 people for their role in Jan. 6. Key militia captains were sent to prison for a decade or more. But that did not quash the allure that militias hold for a broad swath of Americans.

Now President-elect Donald Trump has promised to pardon Jan. 6 rioters when he returns to the White House. Experts warn that such a move could trigger a renaissance for militant extremists, sending them an unprecedented message of protection and support — and making it all the more urgent to understand them.

(Unless otherwise noted, none of the militia members mentioned in this story responded to requests for comment.)

Williams is part of a larger cold war, radical vs. radical, that’s stayed mostly in the shadows. A left-wing activist told me he personally knows about 30 people who’ve gone undercover in militias or white supremacist groups. They did not coordinate with law enforcement, instead taking the surveillance of one of the most intractable features of American politics into their own hands.

Skeptical of authorities, militias have sought to reshape the country through armed action. Williams sought to do it through betrayals and lies, which sat with him uneasily. “I couldn’t have been as successful at this if I wasn’t one of them in some respects,” he once told me. “I couldn’t have done it so long unless they recognized something in me.”


2. The Struggle

If there is one moment that set Williams on his path into the militia underground, it came roughly a decade before Jan. 6, when he was sent to a medium-security prison. He was in his early 30s, drawn to danger and filled with an inner turbulence.

Williams grew up in what he described to me, to friends and in court records as a dysfunctional and unhappy home. He was a gay child in rural America. His father viewed homosexuality as a mortal sin, he said. Williams spent much of his childhood outdoors, bird-watching, camping and trying to spend as little time as possible at home. (John Williams is now his legal name, one he recently acquired.)

Once he was old enough to move out, Williams continued to go off the grid for weeks at a time. Living in a cave interested him; the jobs he’d found at grocery stores and sandwich shops did not. He told me his young adulthood was “a blank space in my life,” a stretch of “petty crime” and falling-outs with old friends. He pled guilty to a series of misdemeanors: trespassing, criminal mischief, assault.

What landed Williams in prison was how he responded to one of those arrests. He sent disturbing, anonymous emails to investigators on the case, threatening their families. Police traced the messages back to him and put him away for three years.

Williams found time to read widely in prison — natural history books, Bertrand Russell, Cormac McCarthy. And it served as a finishing school for a skill that would be crucial in his undercover years. Surviving prison meant learning to maneuver around gang leaders and corrections officers. He learned how to steer conversations to his own benefit without the other person noticing.

When he got out, he had a clear ambition: to become a wilderness survival instructor. He used Facebook to advertise guided hikes in Utah’s Uinta Mountains. An old photo captures Williams looking like a lanky camp counselor as he shows students an edible plant. He sports a thick ponytail and cargo pants, painted toenails poking out from his hiking sandals.

Many people in Utah had turned to wilderness survival after a personal crisis, forming a community of misfits who thrived in environments harsh and remote. Even among them, Williams earned a reputation for putting himself in extreme situations. “Not many people are willing to struggle on their own. He takes that struggle to a high degree,” one friend told me admiringly. Williams took up krav maga and muay thai because he enjoyed fistfights. He once spent 40 days alone in the desert with only a knife, living off chipmunks and currants (by choice, to celebrate a birthday).

Williams struggled to get his survival business going. He’d hand out business cards at hobbyist gatherings with promises of adventure, but in practice, he was mostly leading seminars in city parks for beer money. He would only take calls in emergencies, another friend recalled, because he wanted to save money on minutes.

Then around New Year’s in 2019, according to Williams, he received an email from a leader in American Patriots Three Percent, or AP3. He wanted to hire Williams for a training session. He could pay $1,000.

Finally, Williams thought. I’m starting to get some traction.


3. The Decision

They had agreed there’d be no semiautomatic rifles, Williams told me, so everyone brought a sidearm. Some dozen militiamen had driven into the mountains near Peter Sinks, Utah, one of the coldest places in the contiguous U.S. Initially they wanted training in evasion and escape, Williams said, but he thought they needed to work up to that. So for three days, he taught them the basics of wilderness survival, but with a twist: how to stay alive while “trying to stay hidden.” He showed them how to build a shelter that would both keep them dry and escape detection. How to make a fire, then how to clean it up so no one could tell it was ever there.

As the days wore on, stray comments started to irk him. Once, a man said he’d been “kiked” into overpaying for his Ruger handgun. At the end of the training, AP3 leaders handed out matching patches. The ritual reminded Williams of a biker gang.

He’d already been to some shorter AP3 events to meet the men and tailor the lesson to his first meaningful client, Williams told me. But spending days in the woods with them felt different. He said he found the experience unpleasant and decided not to work with the group again.

Katherine Lam for ProPublica

Katherine Lam for ProPublica

This portion of Williams’ story — exactly how and why he first became a militia member — is the hardest to verify. By his own account, he kept his thoughts and plans entirely to himself. At the time, he was too embarrassed to even tell his friends what happened that weekend, he said. In the survival community, training militias was considered taboo.

I couldn’t help but wonder if Williams was hiding a less gallant backstory. Maybe he’d joined AP3 out of genuine enthusiasm and then soured on it. Maybe now he was trying to fool me. Indeed, when I called the AP3 leader who set up the training, he disputed Williams’ timeline. He remembered Williams staying sporadically but consistently involved after the session in the mountains, as a friend of the group who attended two or three events a year. To further muddy the picture, Williams had warned me the man would say something like that — Williams had worked hard to create the impression that he never left, he said, that he’d just gone inactive for a while, busy with work. (Remarkably, the AP3er defended Williams’ loyalty each time I asserted he’d secretly tried to undermine the group. “He was very well-respected,” he said. “I never questioned his honesty or his intentions.”)

Even Williams’ friends told me he was something of a mystery to them. But I found evidence that supports his story where so many loners bare their innermost thoughts: the internet. In 2019 and early 2020, Williams wrote thousands of since-deleted entries in online forums. These posts delivered a snapshot of his worldview in this period: idiosyncratic, erudite and angry with little room for moderation. “There are occasionally militia types that want these skills to further violent fringe agendas and I will absolutely not enable them,” he wrote in one 2020 entry about wilderness survival. In another, he called AP3 and its allies “far right lunatics.” The posts didn’t prove the details of his account, but here was the Williams I knew, writing under pseudonyms long before we’d met.

One day, he’d voice his disdain for Trump voters, neoliberalism or “the capitalist infrastructure.” Another, he’d rail against gun control measures as immoral. When Black Lives Matter protests broke out in 2020, Williams wrote that he was gathering medical supplies for local protestors. He sounded at times like a revolutionary crossed with a left-wing liberal arts student. “The sole job of a cop is to bully citizens on behalf of the state,” he wrote. “Violent overthrow of the state is our only viable option.”

Then came Jan. 6. As he was watching on TV, he later told me, Williams thought he recognized the patch on a rioter’s tactical vest. It looked like the one that AP3 leaders had handed out at the end of his training.

Did I teach that guy? he wondered. Why was I so cordial to them all? If they knew I was gay, I bet they’d want me dead, and I actually helped them. Because I was too selfish to think of anything but my career.

Shame quickly turned to anger, he told me, and to a desire for revenge. Pundits were saying that democracy itself was in mortal peril. Williams took that notion literally. He assumed countless Americans would respond with aggressive action, he said, and he wanted to be among them.


4. A New World

Williams stood alone in his apartment, watching himself in the mirror.

“I’m tall.”

“I’m Dave.”

“I’m tall.”

“I’m Dave.”

He tried to focus on his mannerisms, on the intonation of his voice. Whether he was saying the truth or a falsehood, he wanted to appear exactly the same.

Months had passed since the Capitol riot. By all appearances, Williams was now an enthusiastic member of AP3. Because he already had an in, joining the group was easy, he said. Becoming a self-fashioned spy took some trial and error, however. In the early days, he had posed as a homeless person to surveil militia training facilities, but he decided that was a waste of time.

The casual deceit that had served him in prison was proving useful. Deviousness was a skill, and he stayed up late working to hone it. He kept a journal with every lie he told so he wouldn’t lose track. His syllabus centered on acting exercises and the history of espionage and cults. People like sex cult leader Keith Raniere impressed him most — he studied biographies to learn how they manipulated people, how they used cruelty to wear their followers down into acquiescence.

Williams regularly berated the militia’s rank and file. He doled out condescending advice about the group’s security weaknesses, warning their technical incompetence would make them easy targets for left-wing hackers and government snoops. Orion Rollins, the militia’s top leader in Utah, soon messaged Williams to thank him for the guidance. “Don’t worry about being a dick,” he wrote. “It’s time to learn and become as untraceable as possible.” (The AP3 messages Williams sent me were so voluminous that I spent an entire month reading them before I noticed this exchange.)

Williams was entering the militia at a pivotal time. AP3 once had chapters in nearly every state, with a roster likely in the tens of thousands; as authorities cracked down on the movement after Jan. 6, membership was plummeting. Some who stayed on had white nationalist ties. Others were just lonely conservatives who had found purpose in the paramilitary cause. For now, the group’s leaders were focused on saving the militia, not taking up arms to fight their enemies. (Thanks to Williams’ trove and records from several other sources, I was eventually able to write an investigation into AP3’s resurgence.)

On March 4, 2021, Williams complained to Rollins that everyone was still ignoring his advice. Williams volunteered to take over as the state’s “intel officer,” responsible for protecting the group from outside scrutiny.

“My hands are tied,” Williams wrote. “If I’m not able to” take charge, the whole militia “might unravel.” Rollins gave him the promotion.

“Thanks Orion. You’ve shown good initiative here.” Privately, he saw a special advantage to his appointment. If anyone suspected there was a mole in Utah, Williams would be the natural choice to lead the mole hunt.

Now he had a leadership role. What he did not yet have was a plan. But how could he decide on goals, he figured, until he knew more about AP3? He would work to gather information and rise through the ranks by being the best militia member he could be.

He took note of the job titles of leaders he met, like an Air Force reserve master sergeant (I confirmed this through military records) who recruited other airmen into the movement. Williams attended paramilitary trainings, where the group practiced ambushes with improvised explosives and semiautomatic guns. He offered his comrades free lessons in hand-to-hand combat and bonded with them in the backcountry hunting jackrabbits. When the militia joined right-wing rallies for causes like gun rights, they went in tactical gear. Williams attended as their “gray man,” he said — assigned to blend in with the crowd and call in armed reinforcements if tensions erupted.

Since his work was seasonal, Williams could spend as much as 40 hours a week on militia activities. One of his duties as intel officer was to monitor the group’s enemies on the left, which could induce vertigo. A militia leader once dispatched him to a Democratic Socialists of America meeting at a local library, he said, where he saw a Proud Boy he recognized from a joint militia training. Was this a closet right-winger keeping tabs on the socialists? Or a closet leftist who might dox him or inform the police?

He first contacted me in October 2022. He couldn’t see how the movement was changing beyond his corner of Utah. AP3 was reinvigorated by then, I later found, with as many as 50 recruits applying each day. In private chats I reviewed, leaders were debating if they should commit acts of terrorism. At the Texas border, members were rounding up immigrants in armed patrols. But Williams didn’t know all that yet. On our first call, he launched into a litany of minutiae: names, logistical details, allegations of minor players committing petty crimes. He could tell I wasn’t sure what it all amounted to.

Williams feared that if anything he’d helped AP3, not damaged it. Then, in early November, Rollins told him to contact a retired detective named Bobby Kinch.

Katherine Lam for ProPublica


5. The Detective and the Sheriff

Williams turned on a recording device and dialed. Kinch picked up after one ring: ​​“What’s going on?” he bellowed. “How you doing, man?”

“I don’t know if you remember me,” Kinch continued, but they’d met years before.

“Oh, oh, back in the day,” Williams said, stuttering for a second. He knew Kinch was expecting the call but was confused by the warm reception. Maybe Kinch was at the training in 2019?

“Well I’m the sitting, current national director of the Oath Keepers now.”

The militia’s eye-patched founder, Stewart Rhodes, was in jail amid his trial for conspiring to overthrow the government on Jan. 6. Kinch said he was serving on the group’s national board when his predecessor was arrested. Rhodes had called from jail to say, “Do not worry about me. This is God’s way.”

“He goes, ‘But I want you to save the organization.’”

Kinch explained that Rollins, who’d recently defected to the Oath Keepers, had been singing Williams’ praises. (Bound by shared ideology, militias are more porous than outsiders would think. Members often cycle between groups like square dance partners.) “I imagine your plate is full with all the crazy stuff going on in the world, but I’d love to sit down.”

“Yeah, yeah,” Williams said. “AP3 and Oath Keepers should definitely be working together.” He proposed forming a joint reconnaissance team so their two militias could collaborate on intelligence operations. Kinch lit up. “I’m a career cop,” he said. “I did a lot of covert stuff, surveillance.”

By the time they hung up 45 minutes later, Kinch had invited Williams to come stay at his home. Williams felt impressed with himself. The head of the most infamous militia in America was treating him like an old friend.

To me, Williams sounded like a different person on the call, with the same voice but a brand new personality. It was the first recording that I listened to and the first time I became certain the most important part of his story was true. To authenticate the record, I independently confirmed nonpublic details Kinch discussed on the tape, a process I repeated again and again with the other files. Soon I had proof of what would otherwise seem outlandish: Williams’ access was just as deep as he claimed.

I could see why people would be eager to follow Kinch. Even when he sermonized on the “global elitist cabal,” he spoke with the affable passion of a beloved high school teacher. I’d long been fascinated by the prevalence of cops on militia rosters, so I started examining his backstory.

Kinch grew up in upstate New York, the son of a World War II veteran who had him at about 50. When Kinch was young, he confided in a later recording, he was a “wheelman,” slang for getaway driver. “I ran from the cops so many fucking times,” he said. But “at the end of the day, you know, I got away. I never got caught.”

He moved to Las Vegas and, at the age of 25, became an officer in the metro police. Kinch came to serve in elite detective units over 23 years in the force, hunting fugitives and helping take down gangs like the Playboy Bloods. Eventually he was assigned to what he called the “Black squad,” according to court records, tasked with investigating violent crimes where the suspect was African American. (A Las Vegas police spokesperson told me they stopped “dividing squads by a suspect’s race” a year before Kinch retired.)

Then around Christmas in 2013, Kinch’s career began to self-destruct. In a series of Facebook posts, he said that he would welcome a “race war.” “Bring it!” he wrote. “I’m about as fed up as a man (American, Christian, White, Heterosexual) can get!” An ensuing investigation prompted the department to tell the Secret Service that Kinch “could be a threat to the president,” according to the Las Vegas Sun. (The Secret Service interviewed him and determined he was not a threat to President Barack Obama, the outlet reported. Kinch told the paper he was not racist and that he was being targeted by colleagues with “an ax to grind.”) In 2016, he turned in his badge, a year after the saga broke in the local press.

Kinch moved to southern Utah and found a job hawking hunting gear at a Sportsman’s Warehouse. But he “had this urge,” he later said on a right-wing podcast. “Like I wasn’t done yet.” So he joined the Oath Keepers. “When people tell me that violence doesn’t solve anything, I look back over my police career,” he once advised his followers. “And I’m like, ‘Wow, that’s interesting, because violence did solve quite a bit.’”

Kinch added Williams to an encrypted Signal channel where the Utah Oath Keepers coordinated their intel work. Two weeks later on Nov. 30, 2022, Williams received a cryptic message from David Coates, one of Kinch’s top deputies.

Coates was an elder statesman of sorts in the Oath Keepers, a 73-year-old Vietnam veteran with a Hulk Hogan mustache. There’d been a break-in at the Utah attorney general’s office, he reported to the group, and for some unspoken reason, the Oath Keepers seemed to think this was of direct relevance to them. Coates promised to find out more about the burglary: “The Sheriff should have some answers” to “my inquiries today or tomorrow.”

That last line would come to obsess Williams. He sent a long, made-up note about his own experiences collaborating with law enforcement officials. “I’m curious, how responsive is the Sheriff to your inquiries? Or do you have a source you work with?”

“The Sheriff has become a personal friend who hosted my FBI interview,” Coates responded. “He opens a lot of doors.” Coates had been in D.C. on Jan. 6, he’d told Williams. It’d make sense if that had piqued the FBI’s interest.

To Williams, it hinted at a more menacing scenario — at secret ties between those who threaten the rule of the law and those duty-bound to enforce it. He desperately wanted more details, more context, the sheriff’s name. But he didn’t want to push for too much too fast.


6. The Hunting of Man

A plaque quoting Ernest Hemingway was mounted in the home of Bobby Kinch, a retired detective and the national leader of the Oath Keepers militia. Courtesy of John Williams

A forest engulfed Kinch’s house on all sides. He lived in a half-million-dollar cabin in summer home country, up 8,000 feet in the mountains outside Zion National Park. Williams stood in the kitchen on a mid-December Saturday morning.

Williams had recently made a secret purchase of a small black device off Amazon. It looked like a USB drive. The on-off switch and microphone holes revealed what it really was: a bug. As the two men chatted over cups of cannoli-flavored coffee, Williams didn’t notice when Kinch’s dog snatched the bug from his bag.

The night before, Williams had slept in the guest room. The house was cluttered with semiautomatic rifles. He had risked photographing three plaques on the walls inscribed with the same Ernest Hemingway line. “There is no hunting like the hunting of man,” they read. “Those who have hunted armed men long enough and liked it, never really care for anything else.”

They spotted the dog at the same time. The bug was attached to a charging device. The animal was running around with it like it was a tennis ball. As Kinch went to retrieve it, Williams felt panic grip his chest. Could anyone talk their way out of this? He’d learned enough about Kinch to be terrified of his rage. Looking around, Williams eyed his host’s handgun on the kitchen counter.

If he even starts to examine it, I’ll grab the gun, he thought. Then I’ll shoot him and flee into the woods.

Kinch took the bug from the dog’s mouth. Then he handed it right to Williams and started to apologize.

Don’t worry about it, Williams said. He’s a puppy!

Katherine Lam for ProPublica

On their way out the door, Kinch grabbed the pistol and placed it in the console of his truck. It was an hour’s drive to the nearest city, where the Oath Keepers were holding a leadership meeting. Williams rode shotgun, his bug hooked onto the zipper of his backpack. On the tape, I could hear the wind racing through the car window. The radio played Bryan Adams’ “Summer of ’69.”

Kinch seemed in the hold of a dark nostalgia — as if he was wrestling with the monotony of civilian life, with the new strictures he faced since turning in his badge. Twenty minutes in, he recited the Hemingway line like it was a mantra. “I have a harder time killing animals than a human being,” Kinch continued. Then he grew quiet as he recounted the night he decided to retire.

He’d woken up in an oleander bush with no memory of how he’d gotten there. His hands were covered in blood. He was holding a gun. “I had to literally take my magazine out and count my bullets, make sure I didn’t fucking kill somebody,” he said. “I black out when I get angry. And I don’t remember what the fuck I did.”

Kinch went on: “I love the adrenaline of police work,” and then he paused. “I miss it. It was a hoot.”

By the time they reached Cedar City, Utah, Kinch was back to charismatic form. He dished out compliments to the dozen or so Oath Keepers assembled for the meeting — “You look like you lost weight” — and told everyone to put their phones in their cars. “It’s just good practice. Because at some point we may have to go down a route,” one of his deputies explained, trailing off.

Kinch introduced Williams to the group. “He’s not the feds. And if he is, he’s doing a damn good job.”

Williams laughed, a little too loud.


7. Doctor, Lawyer, Sergeant, Spy

Early in the meeting, Kinch laid out his vision for the Oath Keepers’ role in American life. “We have a two-edged sword,” he said. The “dull edge” was more traditional grassroots work, exemplified by efforts to combat alleged election fraud. He hoped to build their political apparatus so that in five or 10 years, conservative candidates would be seeking the Oath Keepers’ endorsement.

Then there was the sharp edge: paramilitary training. “You hone all these skills because when the dull edge fails, you’ve got to be able to turn that around and be sharp.” The room smelled like donuts, one of the men had remarked.

An Oath Keepers training session in early 2023 Obtained by ProPublica

The week before, Kinch’s predecessor had been convicted of seditious conspiracy. This was their first meeting since the verdict, and I opened the recordings later with the same anticipation I feel sitting down for the Super Bowl. What would come next for the militia after this historic trial: ruin, recovery or revolt?

The stature of men leading the group’s post-Jan. 6 resurrection startled me. I was expecting the ex-cops, like the one from Fresno, California, who said he stayed on with the militia because “this defines me.” Militias tend to prize law enforcement ties; during an armed operation, it could be useful to have police see you as a friend.

But there was also an Ohio OB-GYN on the national board of directors — he used to work for the Cleveland Clinic, I discovered, and now led a subsidiary of UnitedHealth Group. The doctor was joined at board meetings by a city prosecutor in Utah, an ex-city council member and, Williams was later told, a sergeant with an Illinois sheriff’s department. (The doctor did not respond to requests for comment. He has since left his post with the UnitedHealth subsidiary, a spokesperson for the company said.)

Over six hours, the men set goals and delegated responsibilities with surprisingly little worry about the federal crackdown on militias. They discussed the scourges they were there to combat (stolen elections, drag shows, President Joe Biden) only in asides. Instead, they focused on “marketing” — “So what buzzwords can we insert in our mission statement?” one asked — and on resources that’d help local chapters rapidly expand. “I’d like to see this organization be like the McDonald’s of patriot organizations,” another added. To Williams, it felt more like a Verizon sales meeting than an insurrectionist cell.

Kinch had only recently taken over and as I listened, I wondered how many followers he really had outside of that room. They hadn’t had a recruitment drive in the past year, which they resolved to change. They had $1,700 in the bank. But it didn’t seem entirely bravado. Kinch and his comrades mentioned conversations with chapters around the county.

Then as they turned from their weakened national presence to their recent successes in Utah, Williams snapped to attention.

“We had surveillance operations,” Kinch said, without elaboration.

“We’re making progress locally on the law enforcement,” Coates added. He said that at least three of them can get “the sheriff” on the phone any time of day. Like the last time, Coates didn’t give a name, but he said something even more intriguing: “The sheriff is my tie-in to the state attorney general because he’s friends.” Williams told me he fought the urge to lob a question. (The attorney general’s office did not respond to requests for comment.)

Closing out the day, Kinch summarized their plan moving forward: Keep a low profile. Focus on the unglamorous work. Rebuild their national footprint. And patiently prepare for 2024. “We still got what, two more years, till another quote unquote election?” He thanked Williams for coming and asked if they could start planning training exercises.

“Absolutely, yeah, I’m excited about that.” Williams was resolved to find his way onto the national board.


8. The Stakeout

On Dec. 17, 2022, a week after the meeting, Williams called a tech-savvy 19-year-old Oath Keeper named Rowan. He’d told Rowan he was going to teach him to infiltrate leftist groups, but Williams’ real goal was far more underhanded. While the older Oath Keepers had demurred at his most sensitive questions recently, the teenager seemed eager to impress a grizzled survival instructor. By assigning missions to Rowan, he hoped to probe the militias’ secrets without casting suspicion on himself.

“You don’t quite have the life experience to do this,” Williams opened on the recording. But with a couple years’ training, “I think we can work towards that goal.” He assigned his student a scholarly monograph, “Alienation: Marx’s Conception of Man in a Capitalist Society,” to begin his long education in how leftists think. “Perfect,” Rowan responded. He paused to write the title down.

Then came his pupil’s first exercise: build a dossier on Williams’ boss in AP3. Williams explained it was safest to practice on people they knew.

In Rowan, Williams had found a particularly vulnerable target. He was on probation at the time. According to court records, earlier that year, Rowan had walked up to a stranger’s truck as she was leaving her driveway. She rolled down her window. He punched her several times in the face. When police arrived, Rowan began screaming that he was going to kill them and threatened to “blow up the police department.” He was convicted of misdemeanor assault.

Williams felt guilty about using the young man but also excited. (“He is completely in my palm,” he recorded in his diary.) Within a few weeks, he had Rowan digging into Kinch’s background. “I’m going to gradually have him do more and more things,” he said in the diary, “with the hopes that I can eventually get him to hack” into militia leaders’ accounts.

The relationship quickly unearthed something that disturbed him. The week of their call, Williams woke up to a series of angry messages in the Oath Keepers’ encrypted Signal channel. The ire was directed toward a Salt Lake Tribune reporter who, according to Coates, was “a real piece of shit.” His sins included critical coverage of “anyone trying to expose voter fraud” and writing about a local political figure who’d appeared on a leaked Oath Keepers roster.

Williams messaged Rowan. “I noticed in the chat that there is some kind of red list of journalists etc? Could you get that to me?” he asked. “It would be very helpful to my safety when observing political rallies or infiltrating leftists.”

“Ah yes, i have doxes on many journalists in utah,” Rowan responded, using slang for sharing someone’s personal data with malicious intent.

He sent over a dossier on the Tribune reporter, which opened with a brief manifesto: “This dox goes out to those that have been terrorized, doxed, harassed, slandered, and family names mutilated by these people.” It provided the reporter’s address and phone number, along with two pictures of his house.

Then Rowan shared similar documents about a local film critic — he’d posted a “snarky” retweet of the Tribune writer — and about a student reporter at Southern Utah University. The college student had covered a rally the Oath Keepers recently attended, Rowan explained, and the militia believed he was coordinating with the Tribune. “We found the car he drove through a few other members that did a stakeout.”

“That’s awesome,” Williams said. Internally, he was reeling: a stakeout? In the dossier, he found a backgrounder on the student’s parents along with their address. Had armed men followed this kid around? Did they surveil his family home?

His notes show him wrestling with a decision he hadn’t let himself reckon with before: Was it time to stop being a fly on the wall and start taking action? Did he need to warn someone? The journalists? The police? Breaking character would open the door to disaster. The incident with Kinch’s dog had been a chilling reminder of the risks.

Williams had been in the militia too long. He was losing his sense of objectivity. The messages were alarming, but were they an imminent threat? He couldn’t tell. Williams had made plans to leave Utah if his cover was blown. He didn’t want to jeopardize two years of effort over a false alarm. But what if he did nothing and this kid got hurt?


9. The Plan

By 2023, Williams’ responsibilities were expanding as rapidly as his anxiety. His schedule was packed with events for AP3, the Oath Keepers and a third militia he’d recently gotten inside. He vowed to infiltrate the Proud Boys and got Coates to vouch for him with the local chapter. He prepared plans to penetrate a notorious white supremacist group too.

His adversaries were gaining momentum as well. Williams soon made the four-hour drive to Kinch’s house for another leadership meeting and was told on tape about a national Oath Keepers recruiting bump; they’d also found contact information for 40,000 former members, which they hoped to use to bring a flood of militiamen back into the fold.

Despite the risk to his own safety and progress, Williams decided to send the journalists anonymous warnings from burner accounts. He attached sensitive screenshots so that they’d take him seriously. And then … nothing. The reporters never responded; he wondered if the messages went to spam. His secret was still secure.

But the point of his mission was finally coming into focus. He was done simply playing the part of model militia member. His plan had two parts: After gathering as much compromising information as he could, he would someday release it all online, he told me. He carefully documented anything that looked legally questionable, hoping law enforcement would find something useful for a criminal case. At the very least, going public could make militiamen more suspicious of each other.

In the meantime, he would undermine the movement from the inside. He began trying to blunt the danger that he saw lurking in every volatile situation the militiamen put themselves in.

On Jan. 27, 2023, body camera footage from the police killing of Tyre Nichols, an unarmed Black man, became public. “The footage is gruesome and distressing,” The New York Times reported. “Cities across the U.S. are bracing for protests.” The militias had often responded to Black Lives Matter rallies with street brawls and armed patrols.

Williams had visions of Kyle Rittenhouse-esque shootings in the streets. He put his newly formulated strategy into action, sending messages to militiamen around the country with made-up rumors he hoped would persuade them to stay home.

In Utah, he wrote to Kinch and the leaders of his other two militias. He would be undercover at the protests in Salt Lake City, he wrote. If any militiamen went, even “a brief look of recognition could blow my cover and put my life in danger.” All three ordered their troops to avoid the event. (“This is a bit of a bummer,” one AP3 member responded. “I’ve got some aggression built up I need to let out.”)

After the protests, Williams turned on his voice diary and let out a long sigh. For weeks, he’d been nauseous and had trouble eating. He’d developed insomnia that would keep him up until dawn. He’d gone to the rally to watch for militia activity. When he got home, he’d vomited blood.

Even grocery shopping took hours now. He circled the aisles to check if he was being tailed. Once while driving, he thought he caught someone following him. He’d reached out to a therapist to help “relieve some of this pressure,” he said, but was afraid to speak candidly with him. “I can check his office for bugs and get his electronics out of the office. And then once we’re free, I can tell him what’s going on.”

He quickly launched into a litany of items on his to-do list. A training exercise to attend. A recording device he needed to find a way to install. “I’m just fucking sick of being around these toxic motherfuckers.”

“It’s getting to be too much for me.”

Katherine Lam for ProPublica


10. The Deep State

On March 20, Williams called Scot Seddon, the founder of AP3. If he was on the verge of a breakdown, it didn’t impact his performance. I could tell when Williams was trying to advance his agenda as I listened later, but he was subtle about it. Obsequious. Methodical. By day’s end, he’d achieved perhaps his most remarkable feat yet. He’d helped persuade Seddon and his lieutenants to fire the head of AP3’s Utah chapter and to install Williams in his place.

Now he had access to sensitive records only senior militia leaders could see. He had final say over the group’s actions in an entire state. He knew the coup would make him vastly more effective. Yet that night in his voice diary, Williams sounded like a man in despair.

The success only added to his paranoia. Becoming a major figure in the Utah militia scene raised a possibility he couldn’t countenance: He might be arrested and sent to jail for some action of his comrades.

With a sense of urgency now, he focused even more intently on militia ties to government authorities. “I have been still collecting evidence on the paramilitaries’ use of law enforcement,” he said in the diary entry. “It’s way deeper than I thought.”

He solved the mystery of the Oath Keepers’ “sheriff”: It was the sheriff for Iron County, Utah, a tourist hub near two national parks. He assigned Rowan to dig deeper into the official’s ties with the movement and come back with emails or text messages. (In a recent interview, the sheriff told me that he declined an offer to join the Oath Keepers but that he’s known “quite a few” members and thinks “they’re generally good people.” Coates has periodically contacted him about issues like firearms rules that Coates believes are unconstitutional, the sheriff said. “If I agree, I contact the attorney general’s office.”)

Claiming to work on “a communication strategy for reaching out to law enforcement,” Williams then goaded AP3 members into bragging about their police connections. They told him about their ties with high-ranking officers in Missouri and in Louisiana, in Texas and in Tennessee.

The revelations terrified him. “When this gets out, I think I’m probably going to flee overseas,” he said in his diary. “They have too many connections.” What if a cop ally helped militants track him down? “I don’t think I can safely stay within the United States.”

Four days later, he tuned into a Zoom seminar put on by a fellow AP3 leader. It was a rambling and sparsely attended meeting. But 45 minutes in, a woman brought up an issue in her Virginia hometown, population 23,000.

The town’s vice mayor, a proud election denier, was under fire for a homophobic remark. She believed a local reporter covering the controversy was leading a secret far-left plot. What’s more, the reporter happened to be her neighbor. To intimidate her, she said, he’d been leaving dead animals on her lawn.

“I think I have to settle a score with this guy,” she concluded. “They’re getting down to deep state local level and it’s got to be stopped.” After the call, Williams went to turn off his recording device. “Well, that was fucking insane,” he said aloud.

He soon reached out to the woman to offer his advice. Maybe he could talk her down, Williams thought, or at least determine what she meant by settling a score. But she wasn’t interested in speaking with him. So again he faced a choice: do nothing or risk his cover being blown. He finally came to the same conclusion he had the last time he’d feared journalists were in jeopardy. On March 31, he sent an anonymous warning.

“Because she is a member of a right wing militia group and is heavily armed, I wanted to let you know,” Williams wrote to the reporter. “I believe her to be severely mentally ill and I believe her to be dangerous. For my own safety, I cannot reveal more.”

He saw the article the next morning. The journalist had published 500 words about the disturbing email he’d gotten, complete with a screenshot of Williams’ entire note. Only a few people had joined that meandering call. Surely only Williams pestered the woman about it afterwards. There could be little doubt that he was the mole.

He pulled the go bag from his closet and fled. A few days later, while on the run, Williams recorded the final entries in his diary. Amid the upheaval, he sounded surprised to feel a sense of relief: “I see the light at the end of the tunnel for the first time in two and a half years.”


Coda: Project 2025

It was seven days before the 2024 presidential election. Williams had insisted I not bring my phone, on the off chance my movements were being tracked. We were finally meeting for the first time, in a city that he asked me not to disclose. He entered the cramped hotel room wearing a camo hat, hiking shoes and a “Spy vs. Spy” comic strip T-shirt. “Did you pick the shirt to match the occasion?” I asked. He laughed. “Sometimes I can’t help myself.”

Katherine Lam for ProPublica

We talked for days, with Williams splayed across a Best Western office chair beside the queen bed. He evoked an aging computer programmer with 100 pounds of muscle attached, and he seemed calmer than on the phone, endearingly offbeat. The vision he laid out — of his own future and of the country’s — was severe.

After he dropped everything and went underground, Williams spent a few weeks in the desert. He threw his phone in a river, flushed documents down the toilet and switched apartments when he returned to civilization. At first, he spent every night by the door ready for an attack; if anyone found him and ambushed him, it’d happen after dark, he figured. No one ever came, and he began to question if he’d needed to flee at all. The insomnia of his undercover years finally abated. He began to sketch out the rest of his life.

Initially, he hoped to connect with lawmakers in Washington, helping them craft legislation to combat the militia movement. By last summer, those ambitions had waned. Over time, he began to wrestle with his gift for deceiving people who trusted him. “I don’t necessarily like what it says about me that I have a talent for this,” he said.

To me, it seemed that the ordeal might be starting to change him. He’d become less precise in consistently adhering to the facts in recent weeks, I thought, more grandiose in his account of his own saga. But then for long stretches, he’d speak with the same introspection and attention to detail that he showed on our first calls. His obsession with keeping the Tyre Nichols protestors safe was myopic, he told me, a case of forgetting the big picture to quash the few dangers he could control.

Williams believes extremists will try to murder him after this story is published. And if they fail, he thinks he’ll “live to see the United States cease to exist.” He identifies with the violent abolitionist John Brown, who tried to start a slave revolt two years before the American Civil War and was executed. Williams thinks he himself may not be seen as such a radical soon, he told me. “I wonder if I’m maybe a little too early.”

I’d thought Williams was considering a return to a quiet life. Our two intense years together had been a strain sometimes even for me. But in the hotel room, he explained his plans for future operations against militias: “Until they kill me, this is what I’m doing.” He hopes to inspire others to follow in his footsteps and even start his own vigilante collective, running his own “agents” inside the far right.

The Daily Front Page 14 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Social Contract, in Shapes
article

Dogs seem to agree with humans that 'bouba' is round and 'kiki' is spiky

by gmays·▲ 167 points·106 comments·sciencealert.com ↗
Kiki is spiky, and Bouba is round.

Dogs Seem to Agree With Humans That 'Bouba' Is Round And 'Kiki' Is Spiky (Westend61/Getty Images)

Picture a shape called 'Bouba'. What features does it have? Is it angular, rounded, soft, hard? What about a shape called 'Kiki'?

There's no correct answer to this – the words are made up. But for some strange reason, most people who are asked this question – regardless of the language or alphabet they use to speak or write – agree that Kiki is spiky, and Bouba is round.

This fascinating psychological experiment was first conceived in the 1920s, and it suggests there may be something universal about the way we humans connect visual information, like shapes, with sounds.

Now, a new study published in Proceedings of the Royal Society B: Biological Sciences suggests even our canine companions might follow this trend.

Dogs Seem to Associate Sounds With Shapes in The Same Way Humans Do

The shapes used in the 'bouba/kiki' experiments. (Andrew Dunn/Wikimedia Commons/CC BY-SA 3.0)

Animal behaviorist Eleonora Biffi at the University of Parma in Italy led the research.

She and her team recruited 70 domestic dogs to participate in two almost identical experiments.

The first experiment involved 51 dogs and their owners. Each dog/owner pair entered a room set up with a screen and a speaker to the left, and another screen and speaker to the right.

After giving the dog an opportunity to explore the room and get settled in, the owner sat with them, facing the middle of the setup while the screens and speakers played.

Over roughly 15 minutes, the screens and speakers alternated through different combinations of a human saying either 'Bouba' or 'Kiki' over the speakers, and the two shapes above swapping between the left and right screens.

Meanwhile, a GoPro recorded each dog during the trials. The researchers later fed these videos into an AI designed to track where the dogs' heads were pointing, a stand-in for where they were looking, so they could check for any statistically significant patterns that might occur above random chance.

The second experiment, which involved 19 other dogs, was identical in design except that the owners wore headphones playing rock music to stop them from hearing the 'Bouba' and 'Kiki' sounds. The idea here was to remove any owner cues the dogs might have been following.

Dogs Seem to Associate Sounds With Shapes in The Same Way Humans Do

Setup of the experiment with the two screens, and steps of the computational analyses with dog's head detection and angular vision detection. (Biffi et al., Proc. R. Soc. B, 2026)

Overall, "dogs looked significantly more at the rounded shape while 'Bouba' was played, and they looked at and explored the spiky shape when 'Kiki' was played," Biffi and team report.

The main difference between the two experiments was that dogs in study 1 showed a general bias toward looking at the spiky shapes. That bias disappeared in study 2, when their owners were wearing headphones.

"It could be hypothesized that the dogs were influenced by the owners' unintentional cues. However, since humans typically show a stronger preference for rounded or curved shapes rather than spiky ones, this is unlikely," the authors write.

"Another possible explanation could be that, in the case of dogs, animals' facial configuration, especially when considering ancient dogs and wolves, is characterized by more angular, 'spiky' features, which contrasts with the round facial morphology typical of human infants and could plausibly contribute to an opposite bias."

There's still a lot more research to be done before scientists can definitively say dogs associate 'Bouba' with round shapes and 'Kiki' with sharp ones.

But these results are an interesting starting point for exploring bigger questions, like why dogs are quick to pick up on human language, and how they came to be our close companions in the first place.

The research has been published in Proceedings of the Royal Society B: Biological Sciences.

The Daily Front Page 15 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Micron by Micron
repository

RepRapMicron

by RobotToaster·▲ 354 points·56 comments·github.com ↗
★ 246⑂ 16 forks OpenSCAD

μRepRap - A 3D printer project designed to work at the micron scale

μRepRap Logo The µRepRap is intended to be a RepRap (a replicating 3D printer) capable of micron (1/1000th of a millimetre, or 1µm) and sub-micron fabrication, made with only common and easily accessible materials. This degree of accuracy was initially made possible by 3D printed microscope platforms designed by The OpenFlexure Project. Variations more suitable for prototyping and fabrication have since been developed, but kudos to them. Expectations for the initial μRepRap prototype were to demonstrate repeatable positioning to better than 3µm on a work area 10mm across and to produce a probe tip in lieu of a print head that is suitable for manufacture in a simple home workshop. This goal has effectively been achieved.

image

0.5mm "Benchy" 3D test model printed with μRepRap, 4μm layer height

PIKA Version

"PIKA" V0.02 hardware is producing repeatable positioning of approximately 1μm and reliable 10μm or better accuracy in an approximately 8mm cubic volume. Using a fine probe etched with the PIKA mechanism itself, UV resin droplets as small as 4μm have been deposited. With a fibre optic probe 9μm resin lines have been cured. This is the current recommended build.

image

PIKA V0.02 Complete Circa May 2026

MAUS Version (Deprecated)

This was devised as a testbed for flexure components, and is only mentioned because it has been thoroughly documented with a bill of materials etc. It was updated to V0.05 to give compatibility with PIKA Axis Drivers, but the full documentation is for the "MAUS C" V0.04 (essentially a debugged V0.03). This achieved approximately 5μm positioning best case over a 4mm square, though motion is not linear. Maus-C-Build-Process instructions have been created. If you want to download the pre-built STL files go here to Printables and day-to-day progress is detailed on the RepRap blog.

image

MAUS 'L' V0.05 μRepRap, in development Feb 2026

Overview

Microelectronics and Micro-electromechanical Systems (MEMS) are essential components of most of the electronic wizardry we use in our everyday lives, whether we realise it or not. In the way that RepRap brought Open 3D fabrication to the masses, the aim of the µRepRap Project is to bring users the same capabilities on a much smaller scale and allow those components to evolve in the same way. The solution is effectively a very precise and compact CNC machine.

The objective has two related parts: To create a macro scale 3D printed micron fabrication and manipulation system, and while doing this develop the techniques needed to reproduce a similar system printed at the micron scale.

Background

image

A 1.3mm "Hello World" mechanically etched in Sharpie Marker on glass slide mid-2025

Precision manufacturing began somewhere in the 1700's, and the first micron scale electronic devices were fabricated from silicon in the 1960’s. The Intel 4004, for example, was made with a feature size of 10μm. Ever since then the technology focused largely on silicon, with fabrication systems becoming ever more complex, esoteric, and costly. The techniques used are difficult for the average hobbyist to manage, and in many cases are downright dangerous.

In biology and medicine, equipment to measure and manipulate objects on the micron scale are relatively common - though these devices tend to be large, specialized, and expensive. Recently though, microscope platforms capable of sub-micron resolution were developed by The OpenFlexure Project, and these have created an interesting opportunity for developing micron scale fabrication.

If micron scale manufacturing can be achieved by RepRap-like technology, it is likely that these fields will be advanced in the same way that desktop fabrication was by the RepRap. The biological sciences will gain from inexpensive, rapidly-evolving equipment. The microelectronics field will regain the potential for independent communities develop on the micron scale, and break away from its fixation on silicon as its main platform. As with 3D printing, there will certainly be new developments in fields that do not currently even exist.

There is also the possibility (and intent) that this technology could replicate in the future at a yet smaller scale.

Requirements

Micron scale 3D printing has many of the same requirements that The RepRap Project developed when initially printing on the macro scale:

  • A 3-axis positioning system
  • CAD/CAM software
  • Axis zeroing sensors
  • A deposition system
  • Building material

In addition there is the practical aspect that humans are unable to directly manipulate micron scale assemblies and sub-assemblies. Novel systems are therefore needed to:

  • Detach printed items
  • Transport items
  • Rotate and position items
  • Conduct micron scale maintenance tasks
  • Operate and interface with items

Similar issues will exist if and when a micron scale system is developed.

Optics

While conventional optics are readily available to allow humans to initiate and inspect the fabrication processes, it is likely that some customisation of the optics will be desirable.

For the moment two USB microscopes are sufficient. One to observe the initial Z probe height during setup, and one for the XY positioning of the probe when commencing a print. A minimum of 8Mpixel resolution is recommended. Additionally a conventional bench microscope of 100x to 200x will be needed to examine the output.

image

"Hello, World" and a 100μm square set in resin using UV and a 125/9 optical fibre

Additionally, an optical fibre may be attached as the probe. This can be used to cure UV resin by projecting a sufficiently powerful UV source down the probe. This section describes how a 125/9 optical fibre patch lead and 3W UV LED module can be attached to the μRepRap as a print head.

3-Axis Control

The axes are driven by 400-step NEMA17 stepper motors, but 200-step motors will get quite close to 1μm. The driving hardware and firmware is left to user preference, though existing developments assume interactive control using GCODE on a serial connection. Arduino GRBL is adequate.

Probe Print Head

The probe is used as a Z touch sensor, engraving tool, and deposition head. A robust probe for initial testing can be made from a 0.5mm hypodermic needle or 0.25mm accupuncture needle. These are sufficiently robust to use subtractively on resist-covered surfaces such as Sharpie marker on a glass slide.

For fine deposition an electrochemically etched wire point is recommended. Instructions for fabrication with minimal equipment are in the Probe documentation. The PIKA is capable of etching its own probes.

Building Materials

Additive fabrication is currently implemented by transferring minute quantities of "Top Coat" UV nail gel resin with the probe. The reservoir is a smeared layer of resin. The probe accepts this resin by capillary action. When depositing, capillary action forms relatively consistent droplets. The number of consecutively deposited droplets and their consistency depend on the qualities of the resin and probe, but sub-15μm droplets are achievable.

Other resins and ionic gels may also be used. A UV LED in the print bed operated by the hardware controller sets the resin.

Note: Thin layers of 3D printer UV resin do not readily set in air as oxygen neutralises the activated photoinitiator.

Other substances may be transferred. They key limitation is that their solvent should not evaporate during deposition.

Materials that readily adhere to the resin (which may be partially cured first) such as gold leaf may be added.

Summary

The current μRepRap 3D printer is intended to provide a platform for further hardware and software development on the micron scale.

Much work remains to be done in determining what can be printed and in what materials. If objects cannot be printed high enough, or with overhangs, folded structures, hinges, and flexures will need to be developed to produce complex 3D shapes and mechanisms.

It is hoped that μRepRap may be used to eventually construct useful devices in its own right, and an ecosystem of fabrication utilities that operate on a yet smaller scale.

The Daily Front Page 16 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Open Manipulator
repository

Open MicroManipulator – A sub-micrometer 3D motion control plattform

by _Microft·▲ 180 points·14 comments·github.com ↗
★ 2,083⑂ 276 forks C++

A sub-micrometer 3D motion control plattform.

This project contains an open source low-cost, easy-to-build motorized XYZ Micro-Manipulator motion control platform achieving submicron precision. It's designed for applications such as optical alignment, probing electronic components, and microscopy.

Check out the YouTube video for more information about the device and how it is built:
An Open Source Motorized XYZ Micro-Manipulator - Affordable sub µm Motion Control

Image 1 Image 2

Thanks to its parallel kinematic structure and miniature ball joints, it achieves good mechanical stiffness and a large range of motion. The motors are off the shelf stepper motors driven by a 30 kHz closed loop controller and a very precise PWM signal. A 'magnetic gearing' approach increases the resolution of the low-cost magnetic rotary encoders by a factor of 30 allowing for steps down to 50nm (Please mind the difference between resolution and accuracy. The absolute accuracy is significantly worse.

The device can be controlled via simple G-Code commands over a USB serial interface and is thus easily integrated into other projects. The firmware implements a complete motion planning stack with look-ahead for smooth and accurate path following capabilities.

Getting Started

Below is a list of high level steps you can follow if you want to replicate the project. If you have questions or problems with the build or just want to discuss subjects related to the project, joint the projects community Discord Server.

  1. Read this Document and watch the linked videos
  2. Get the parts listed in Bill of Materials
  3. Build the device and electronics
  4. Change the hardware configuration according to your build hw_config.h
  5. Upload firmware using VSCode with PlattformIO plugin
  6. Calibrate axis

Also check out the setup guide for new devices: Setup Guide

✨NEW: Hardware Version 4.0

A new version of the hardware has been released, fixing several issues with the previous design:

  • Self collision during homing fixed.
  • Connection of ball joint block with screws only was not well constrained and could rotated a bit.
  • No reliable way to ensure consistent linkage rod length
  • Unnecessary ball joint friction
  • Accurate ball position heavily dependet on print quality and corner rounding
  • Rubber bands could not be changed or removed once glued in.

A video about the improved ball joint and linkage manufactoring process can be found on YouTube: Better Ball Joints for the Open Micro-Manipulator Also the FreeCAD model was restructured and improved and now includes all pins and fasteners. It now provides a reference for all required mechanical parts.

Open Micro-Manipulator GUI

WARNING: BOM is not updated yet...

Open Micro-Manipulator GUI

To make testing and using the Open-Micro Manipulator easy and convenient a python control program with a graphical user interface is provided here: Open Micro-Manipulator GUI. It has simple controlls to move the device around, while also displaying a live camera feed (e.g. from a microscope camera). Additional features, include a simple g-code runner and realtime mouse control (e.g. for Biology applications).

Open Micro-Manipulator GUI

🐍 Python-API

The lightweight Python API handles all serial communication and provides convenient command execution and debug message printing. The interface includes functions to home, move, and calibrate the device, as well as to query device information. Simply copy the open_micro_stage_api.py file into your project (also install the dependencies in requirements.txt), and you’re ready to get started.

Usage Example

from open_micro_stage_api import OpenMicroStageInterface

# create interface and connect
oms = OpenMicroStageInterface(show_communication=True, show_log_messages=True)
oms.connect('/dev/ttyACM0')

# run this once to calibrate joints
# for i in range(3): oms.calibrate_joint(i, save_result=True)

# home device
oms.home()

# move to several x,y,z positions [mm]
oms.move_to(0.0, 0.0, 0.0, f=10)
oms.move_to(3.1, 4.1, 5.9, f=26)
oms.move_to(0.0001, 0.0, 0.0, f=10)

# wait for moves to finish
oms.wait_for_stop()

API Functions (most relevant functions only)

connect(port, baud_rate=921600)
disconnect()
set_workspace_transform(transform)
get_workspace_transform()
home(axis_list=None)
calibrate_joint(joint_index, save_result)
move_to(x, y, z, f, move_immediately, blocking, timeout)
set_tool_output(tool_idx, output_value, immediate)
set_pose(x, y, z)
dwell(time_s, blocking, timeout)
enable_motors(enable)
wait_for_stop(polling_interval_ms, disable_callbacks)
set_max_acceleration(linear_accel, angular_accel)
set_servo_parameter(pos_kp, pos_ki, vel_kp, vel_ki, vel_filter_tc)

✨ Firmware v1.0.4

Firmware 1.0.4 comes with many smaller improvements and bugfixes and a great new feature as well:

  • Tools: Tool usage (for example for laser engraving) is now supported on the two GPIO pins of J5 on the pcb. Tools are integrated into the planner and run fast and with correct timing when executing g-code. The tools support PWM (using the PIO feature to squeeze out extra channels without relying on software PWM).

    Example usage:

      M3 T0 S0.7  // set pwm output of tool 0 to 70%
      G4 S0.001   // dwell command (or any other motion command) - necessary to apply the tools output
    
  • Calibration: Calibration has now some addition error checks to improve error reporting of potential problems like encoder alignment.

  • Kinematic Model Parameter: Initialization code has been cleaned up and better comments where added to the parameters. Parameters are preset for HW v4.0 but you can toggle back to the old HW-v3.0 parameters if necessary.

  • Bugfixes: smaller bugfixes

IMPORTANT: If you have Hardware Version v3.0 you need to switch back to the old kinematic parameters in the kinematic_model_delta3d.cpp file (there is an #define for that at the top).

Firmware v1.0.1

This update improves calibration, homing, logging, and adds several new G-Code commands.

Improvements

  • Homing: parallel homing support, higher repeatability, more accurate geometric reference
  • Joint calibration: refined procedure, persistent flash storage (no recalibration after reboot)
  • Logging: clearer and more detailed output

New G-Code Commands

  • G28 — Home joints (supports homing multiple axis simultanously for faster startup)
  • G24 — Set pose command (directly sets servo targets, bypassing motion controller)
  • M17/M18 — Enable/Disable motors (with pose recovery from encoders on enable)
  • M51 — Read encoder values
  • M55 — Set servo loop parameters
  • M56 — Joint calibration (with save-to-flash option)
  • M57 — Read various information about the device state
  • M58 — Read firmware version

⚙ CAD-Files

All CAD models are made in FreeCAD to allow everyone to view and modify the design without subscribing or paying for a proprietary CAD solution. Note that most components are already designed with the goal to make them easily machinable on a 3-Axis CNC-Mill. You can also 3D-Print the parts but have to live with thermal drift (carbon filled filaments can reduce this problem).

FreeCAD Model

The CAD files can be found here: CAD Models. Please note that FreeCAD version 1.2.0dev was used, and the files might not work with older versions.

STL files for printing can be found here: STL Files

⚙ Kinematic Model

The kinematic model is defined here: kinematic_model_delta3d.cpp. Please check the dimensions of your build against the values set in the constructor. In particular, make sure the arm length matches.

⚙ Electronics

IMPORTANT: If you fabricated PCB version v1.2 (see version label on the board) you need to drill out a misplaced via on diode D1 that shorts 5V rail to ground (See repair image ). The problem was fixed in v1.3.

The electronics are designed in KiCAD and only commonly available modules (motor drivers and MCU boards) are used and connected by a simple PCB. No SMD soldering is required to populate the board to make the build extra accessible. For usual winding resistance of your motors, the device should be powered by $${\color{lightgreen} 5V-6V }$$ (2A) to keep current and heating to a reasonable level.

Image 1 Image 2

The repository now also contains the fabrication files that can be directly uploaded to the PCB manufacturer.

⚙ Firmware

The firmware is written in C++ and takes some inspiration from the 'SimpleFOC' project. It aims to be streamlined and readable without any extra fuss, focusing on the hardware used in this project. It implements path planning with look-ahead and, unlike many other motion controller projects, supports true 6DOF-Pose interpolation and planning, making it ready for driving hexapod motion platforms; that may or may not be the next step for this project.

You may find configuration for pin numbers, motor type, and other parameters in hw_config.h. Please check them before uploading the firmware.

Image 1 Image 2

Building and Flashing the Firmware

For building and flashing the firmware, Visual Studio Code (available for free on Windows and Linux) is recommended. Install the PlatformIO add-on and open the firmware folder. You can now build and flash the firmware like any other PlatformIO project.

⚙ G-Code Interface

The firmware supports only a small subset of G-Code commands listed below.
Each command is acknowledged with either an ok or error response.

If a command provides additional information (e.g., the get position command), that information is returned before the ok message.
The client must wait for an acknowledgment from the previous command before sending the next one—otherwise, behavior is undefined.

Command Description G0 X Y Z F Move the end-effector in a straight line to the specified position.
• X, Y, Z: target positions
• F: feed rate G1 X Y Z F Same as G0. G4 S/P Dwell/pause for a specified time.
• S: seconds
• P: milliseconds G24 X Y Z A B C Directly set current pose for servo loops with optional rotation vector* A, B, C. G28 A-F Home one or more joints.
• Optional joint selection A–F. M3 Set Tool output.
• T: tool index
• S: output value (0.0..1.0)
Note: new values is only applied on the next motion or dwell command M17 Enable motors and read current pose as the start pose. M18 Disable motors. M50 Get current internal pose. (Encoders are not read here) M51 Get current encoder angles (in degrees) and raw encoder values. M52 Get the number of items in the planner queue. M53 Check if all planned moves are finished (1 = finished, 0 = not finished). M55 A B C D F Set servo loop parameters.
• A, B: position PI controller gains (P and I)
• C, D: velocity PI controller gains (P and I)
• F: velocity filter time constant M56 J S Calibrate a joint.
• J: joint index
• S: save calibration result M57 Get device and servo loop info: homing/calibration state, angles, loop frequencies, and file list. M58 Get firmware version. M204 L A Set linear and angular acceleration.
• L: linear acceleration
• A: angular acceleration

*Note: The communication protocol uses 3D vectors for rotations. The direction represents the rotation axis and the length of the vector represents the angle of rotation around the axis.

❤️ Support

If you'd like to support this project, consider the following:

  • Contribute to the build guide – Help improve or expand the build instructions by submitting pull requests or opening issues with suggestions.
  • Characterize typical radial stepper motor shaft error motion – Measure radial error motion of the shaft of multiple Nema-17 stepper motors (see Cylos Garage for more information about the subject: https://www.youtube.com/watch?v=gt2gK-oxy5s).
  • Give feedback on the build experience – Let us know what worked, what didn’t, and how the process could be smoother for others.
  • Support the project on Ko-fi – If you find this project valuable, you can support it financially via Ko-fi ☕.

Youtube Video

Watch the video Better Ball Joints for the Open Micro-Manipulator

The Daily Front Page 17 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Old Machines, Fine Detail
article

The Intel 8087 chip: floating-point addition and subtraction

by pwg·▲ 96 points·33 comments·righto.com ↗
speeding up addition by a factor of almost 100

In 1980, Intel introduced the 8087, a chip that made floating-point operations much faster in the IBM PC and other systems. Although the 8087 supports advanced operations such as tangents, square roots, and logarithms, this article focuses on basic arithmetic operations: addition and subtraction. The 8087 provided a spectacular speed improvement over the 8086 processor, speeding up addition by a factor of almost 100, and complicated operations by even more.1 In this article, I examine the 8087's microcode and circuitry to explain exactly how floating-point addition and subtraction are implemented, including numerous special cases for infinities and other special values.

To explore the 8087's circuitry, I popped the lid off a chip with a chisel and used a microscope to create the high-resolution image below. The microcode ROM is the large rectangular region in the center of the die, holding the 1648 micro-instructions that control the chip. The bottom half of the chip (red box) is the datapath, the circuitry that performs floating-point calculations on 80-bit values.2

A close-up of the 8087's datapath, showing functional blocks that are used for addition and subtraction. Click this image (or any other) for a larger version.

A close-up of the 8087's datapath, showing functional blocks that are used for addition and subtraction. Click this image (or any other) for a larger version.

Zooming in on the datapath shows the functional blocks that are important for addition and subtraction. The key component is the integer adder, located in the center. It receives one argument from the B register and another argument from a component such as the temporary registers or the stack registers. The adder's output is stored in the sum register. The shifter can shift the bits in a value to the left or the right. The shifter occupies a lot of space on the die because its circuitry allows a value to be rapidly shifted by an arbitrary number of bits. Floating-point operations make heavy use of the shifter to align values; the leading zero circuitry counts the number of zero bits or bytes on the left of a value so they can be shifted away. The exponent converter processes exponents, detecting overflows and underflows. These specialized circuits helped the 8087 achieve its high performance.

Floating-point addition and subtraction

Most computers use integers as their basic representation for numbers. But many applications need to use numbers with a fractional part, such as 1.23. Moreover, integers have a very limited range: a 32-bit integer can express numbers from about -2 billion to 2 billion. To solve these problems,3 computers usually implement floating-point numbers, which provide fractional numbers over an enormous range.

In most cases, a floating-point number is represented by sign × significand × 2exponent. The significand is a binary number of the form 1.bbb…: a leading 1, followed by the binary point (the binary equivalent of the decimal point) and the rest of the bits.4 In a binary number, each bit represents a power of 2. For the fractional part, the part after the binary point, the powers of 2 are negative: 2-1, 2-2, and so forth. So the binary number 1.1 is 1 + 1/2, or 1.5 in decimal. Similarly, binary 1.0011 is 1 + 1/8 + 1/16 or 1.1875. The exponent allows numbers to escape the limited range of the significand. For instance, 1.1 (binary) × 28 is 384. With larger exponents, floating-point numbers can cover a huge range; even a 32-bit short floating-point number covers a range exceeding 10-36 to 1038.

Floating-point addition and subtraction are more complicated than integer operations. Before the numbers can be added (or subtracted), their binary points must be aligned, the same as aligning the decimal points for decimal numbers. After the operation, the exponent of the result must be adjusted, normalizing the significand so it starts with a 1 bit.

The steps for a simple floating-point addition.

The steps for a simple floating-point addition.

The diagram above illustrates a simple floating-point addition: 13.5+3.5. The first two lines show the two arguments expressed with an exponent and significand. Both arguments are normalized, so the leftmost bit is a 1. Before adding, the second argument must be aligned—making the exponents equal—by shifting it two positions to the right. (The difference between the exponents in this case is two.) The values are then added, using integer addition on the aligned significands. In this case, adding the values causes an overflow, an "extra" bit on the left. The result must be normalized by shifting it one position to the right and incrementing the exponent by 1.

Floating-point subtraction is similar, but has a few more complications. The result can be positive, negative, or zero. The result can be orders of magnitude smaller than the arguments. The figure below shows a basic subtraction, 8-7.5. As with addition, the second argument is shifted right so the exponents match (i.e., the binary points line up). The two significands are subtracted with integer subtraction. The result is normalized by shifting to the left so the top bit is a 1. Unlike the addition case, normalization may require a large shift. In this case, the shift is four bits and the exponent is decremented by 4 to yield the result.

A simple floating-point subtraction.

A simple floating-point subtraction.

One complication with subtraction is that the result can be negative. If that occurs, the significand is made positive, and the sign of the result is flipped. Subtraction can also result in zero. In this case, normalization cannot be performed; instead, a special value +0 or -0 is returned as appropriate.

Relevant hardware details of the 8087

In this section, I'll explain some features of the 8087 that play important roles in the microcode implementation of addition and subtraction.

The 8087 supports a variety of data types, but internally, the 8087 stores numbers in an 80-bit format called "temporary real". A temporary real number has a sign bit, a 15-bit exponent, and a 64-bit significand. The 15-bit exponent allows numbers that are absurdly large, over 104932. The 64-bit significand supports extremely accurate numbers. The exponent is stored with a "bias" of 16383 added to it. Thus, the stored exponent is always positive, even if the real exponent is negative. For instance, an exponent of 1 is stored as 0x4000, and an exponent of -16 is stored as 0x3fef.

The 80-bit temporary real format and the register formats. The dot indicates the binary point, analogous to the decimal point.

The 80-bit temporary real format and the register formats. The dot indicates the binary point, analogous to the decimal point.

The 8087 has eight internal registers, organized as a stack. The programmer uses these registers when programming the 8087. Each register holds an 80-bit floating-point number. To optimize performance, each value in the register stack also has an associated "tag" value: zero, valid, special, or empty. A value of zero is tagged as zero. A "normal" floating-point value is tagged as valid. If the value is infinity, Not a Number (NaN), or a denormalized value, then it is tagged as special. Finally, an empty tag indicates that a register does not hold a value; this allows detection of stack underflow (reading an empty register) or stack overflow (storing to a non-empty register).

The 8087 also has temporary registers that it uses internally. tmpA and tmpB are 80-bit registers, along with two tag bits. However, tmpC is different: it doesn't have a sign, exponent, or tag. Moreover, the significand is 68 bits; tmpC has an additional bit to prevent overflow and three additional low-order bits for rounding, known as guard, round, and sticky.

In the microcode, each 16-bit micro-instruction performs one low-level operation. Many of the operations move data from one register to another. Other operations provide conditional jumps, subroutine calls, and returns.

The heart of the 8087's processing is the 69-bit integer adder, which I discussed here. (The adder has more than 64 bits because it has three rounding bits and a couple of additional high-order bits for overflow and multiplication.) Integer addition takes two micro-instructions. The first micro-instruction specifies the first argument to add and selects various options such as carry and rounding. (For subtraction, an option complements the second argument.) The second argument to the adder always comes from the B register, which confusingly is unrelated to the tmpB register. The result of the addition operation is placed in a special register called the sum register. A second micro-instruction (which may be many instructions after the first) moves the result from the sum register to a destination.

Floating-point also makes extensive use of the bit shifter, which shifts a 68-bit value by an arbitrary number of positions, left or right; I wrote about it here. Like the adder, a bit shift operation takes two micro-instructions: the first moves a value to the shifter and configures the direction and amount of shift. The second micro-instruction moves the result from the shifter to a destination.

The addition/subtraction microcode

The 8087 implements almost all of its operations in microcode. The basic math operations (addition, subtraction, multiplication, and division) start by executing the same microcode (at decimal address #0001. The microcode moves the two arguments into temporary registers tmpA and tmpB. Normally, these arguments are taken from the stack registers. The arguments can also be taken from memory, but I won't discuss that here.

Next, the microcode does a micro-subroutine call to handle the specific operation type. The 8087's microcode engine has a tiny ROM that holds a table of addresses, targets for microcode jumps or subroutine calls. Target 0 is special, however; it has three different addresses for multiplication, division, or addition/subtraction. (This is implemented by special-case circuitry in the ROM. When you're designing the chip, you can do weird, hacky optimizations like this if you want.)

The addition/subtraction micro-subroutine starts at address #0232; this microcode is shown below. The control flow is complicated, so I've put a flowchart in the footnotes.5 The microcode first handles the zero cases 0+0 or 0-0. Next, it subtracts the exponents of the two arguments. If the first argument has a smaller exponent (i.e., the result is negative), the arguments are swapped so the argument with the larger argument is first. (The 8087 keeps track of the sign of the result in the "sign latch"; if exchanging the arguments would change the sign, the latch is toggled at #0244.)

#0232 jmp #0236 if not tmpA:tag ZERO Check for 0+0
#0233 jmp #0236 if not tmpB:tag ZERO
#0234 return if not unsigned sub 0+0 same signs
#0235 jmp #0263            handle 0+0 different signs
#0236 tmpA sign -> sign latch nonzero: tmpA sign to sign latch
#0237 tmpB:exp -> Breg
#0238 adder: tmpA:exp - Breg cin=1 compare exponents
#0239 jmp #0245 if adder pos
#0240 sumreg:frac -> Breg  swap if tmpB's exponent larger
#0241 adder: zero - Breg cin=1
#0242 xchg tmp
#0243 jmp #0245 if not unsigned sub
#0244 !sign latch -> sign latch toggle sign if swapping matters
#0245 xchg tmp             continue
#0246 shift zero R 0 bytes, 0 bits zero
#0247 call CREATE_DENORM   shift tmpB to match exponents
#0248 xchg tmp
#0249 zero -> tmpB:exp     store exp adjustment in tmpB:exp
#0250 jmp #0269 if not unsigned sub base addition?
#0251 adder: tmpA:frac - Breg cin=1, roundmode tmp A - tmpB
#0252 jmp #0256 if adder pos
#0253 sumreg:frac,rnd -> Breg/rnd negate frac
#0254 adder: zero - Breg cin=1, roundmode
#0255 !sign latch -> sign latch toggle sign
#0256 jmp #0275 if Sum register is zero jump if result zero
#0257 shift R -> tmpB:frac orig tmpB, from CREATE_DENORM
#0258 jmp #0282 if tmpA top bit tmpA not denorm?
#0259 jmp #0282 if tmpB:frac[63] tmpB not denorm?
#0260 jmp #0289            skip normalization if both denorms
#0261 tmpA:exp -> expConv  handle zero
#0262 jmp #0264 if not tmpA top bit
#0263 zero -> tmpA         handle zero cases
#0264 0 -> tmpA sign       +0
#0265 zero -> tmpA:frac
#0266 return if not round chop
#0267 1 -> tmpA sign       return -0
#0268 return
#0269 adder: tmpA:frac + Breg cin=0, roundmode base addition: tmpA + tmpB
#0270 jmp #0289 if not sumreg[64] check for overflow
#0271 shift 1 sumreg:sign,frac,rnd R shift right 1 bit to normalize
#0272 shift R -> sumreg:frac,sign,rnd
#0273 expAdj++             increment exp adjustment
#0274 jmp #0289            wrap up addition
#0275 shift sumreg:frac,rnd L 0 bytes, 3 bits zero? shift to get rounding bits
#0276 shift L -> sumreg:frac
#0277 jmp #0261 if Sum register is zero jump if no rounding bits
#0278 zero -> sumreg:frac  clear result
#0279 jmp #0289 if not tmpA top bit denorm?
#0280 expAdj--             if not denorm, adjust exp down
#0281 1 -> sumreg:frac,rnd set lowest bit in result
#0282 lzcount -> shiftcountH leading zero adjust: handle bytes
#0283 shift sumreg:frac,rnd L count byte sticky
#0284 shift L -> sumreg:frac,rnd
#0285 lzcount -> shiftcountL handle leading zero bits
#0286 shift sumreg:frac,rnd L count bit sticky
#0287 shift L -> sumreg:frac,rnd
#0288 shiftcount -> tmpB:exp remember the bit shift amount
#0289 sign latch -> tmpA sign store sign
#0290 call ADJUST_PRECISION if not FBLD/FBSTP adjust precision if necessary
#0291 sumreg:frac -> tmpA:frac store adjusted frac part
#0292 tmpB:exp -> Breg     get exp
#0293 adder: tmpA:exp - Breg cin=0 adjust by Breg
#0294 expAdj -> Breg
#0295 adder: sumreg:frac + Breg cin=0 adjust by expAdj
#0296 sumreg:frac -> expConv exp in expConv to check for overflow, etc
#0297 sumreg:frac -> tmpA:exp store exp in tmpA
#0298 return               done

At address #0247, the important alignment step takes place, shifting tmpB so the binary point lines up with tmpA. This is done by the microcode subroutine CREATE_DENORM. The number of positions to shift tmpB is passed in the sum register; the difference between the two exponents was calculated in the previous subtraction. (If the difference was negative, it was complemented, so the value passed in is positive.)

Typically, the exponent of the result will be the same as the exponent of the (larger) value, but not always. Changes to the exponent are tracked in two places. First, a special two-bit register that I call the exponent adjustment (expAdj) holds adjustments due to one-bit shifts left or right. The hardware initializes the expAdj register to 1 so there is room for a decrement. Larger exponent changes are tracked in the tmpB register's exponent field; the microcode initializes it to 0 at #0249.

At address #0250, the microcode makes a key decision: is the low-level operation unsigned addition or unsigned subtraction? Depending on the signs involved, the high-level operation (addition or subtraction) may not match the low-level operation. For example, for 2+3, -2-3, -2+(-3), and so forth, the two unsigned numbers are added; the result is 5, either positive or negative. But for -2+3, 2-3, 3-2, and so forth, the two unsigned numbers are subtracted; the result is 1, either positive or negative. I'll use "unsigned addition" to refer to the former cases, where the unsigned magnitudes are added, and "unsigned subtraction" to refer to the latter cases, where the unsigned magnitudes are subtracted. The key point is that an addition instruction may result in unsigned addition or subtraction, and the same with a subtraction instruction.

The 8087 has specialized circuitry to determine whether the low-level unsigned operation is addition or subtraction, allowing this to be tested with a conditional. The tmpA and tmpB values have sign bits of 1 for negative, 0 for positive. If you assign 1 to subtraction and 0 to addition, then tmpAsign⊕​tmpBsign⊕op yields 1 if the unsigned operation is subtraction and 0 if the unsigned operation is addition. The 8087 also has a conditional to test if the signs are the same or different.

Unsigned addition

Since the unsigned addition path is simpler, I'll start with it, at address #0269. The steps are essentially the same as described earlier: aligning the numbers, adding them, and normalizing. First, the smaller number, in tmpB, is shifted right until the exponents match. Then the (unsigned) values are added. If there is a carry from the top bit, the result is shifted right at #0271. Because the result is shifted right one bit, the special two-bit expAdj counter is incremented to track the required exponent adjustment.

At #0289, the result's sign is updated with the value in the sign register. The 8087 supports three sizes of values: 80-bit temporary reals, 64-bit reals, or 32-bit reals. For the smaller sizes, the microcode subroutine ADJUST_PRECISION trims the value to the appropriate size. (This is not as trivial as it sounds, since rounding up the result could require an adjustment to the result's exponent, recorded in the expAdj register.) Finally, the result's exponent is calculated from the initial exponent (in tmpA), subtracting the adjustment value in tmpB's exponent (normally 0), adding the adjustment value in the expAdj register, and subtracting 1 (because expAdj starts at 1). The exponent is stored in the result but also stored in the "exponent converter", a circuit that evaluates the exponent to detect overflow or underflow.

At this point, the addition/subtraction micro-subroutine returns to the common microcode. The common microcode checks if there was an overflow or underflow, indicating the value doesn't fit in a float. In this case, the subroutine NONNORMAL_RESULT is called to handle the value, which can involve triggering an interrupt, returning infinity, or returning zero. (For details, see my previous article.)

The result is pushed on the stack by writing it to the appropriate stack register. If the original instruction specified a stack pop at the end, the top of stack is marked empty, and the stack pointer is updated. Finally, the Run Next Instruction micro-instruction indicates the end of the microcode for the current instruction. The floating-point instruction has finally completed.

Unsigned subtraction

I'll switch now to the unsigned subtraction path, starting at #0251. (Keep in mind that the instruction could be addition, for example, -2 + 3.) The microcode uses the 64-bit adder to perform an unsigned subtraction: tmpA-tmpB; the second argument is negated to perform subtraction. The result can be either positive or negative, depending on which value is larger. The rest of the path is the same as addition: setting the sign, adjusting the precision, and computing the final exponent.

If the subtraction result is zero, #0275 tests the three rounding bits. If a rounding bit is set, then the low bit of the result is set, and the exponent adjustment is decreased by 1 to counteract this. (For a denorm, the result is cleared since there's no "extra" room to promote the rounding bit.) There's a special path #0261 if the result is really zero, because the microcode needs to determine if the result is +0 or -0. Subtracting 0-0 joins into this code path to handle the various possibilities for adding or subtracting +0 and/or -0. Generally, positive and negative zeros work as you'd expect from a zero that "leans" one way. For instance, ⁺0 + ⁺0 is ⁺0 and ⁻0 - ⁺0 = ⁻0. But what if the zeros cancel? E.g. ⁺0 + ⁻0 or ⁻0 - ⁻0? In these cases, rounding down yields ⁻0 while the other rounding modes yield ⁺0.

The leading zero circuit counts the number of leading zeros to determine how much to shift. To keep the circuitry manageable, the leading zero shift is done in two steps. First, the result is shifted left by the number of leading zero bytes. Next, the leading zero circuitry counts the number of remaining leading zero bits, which will be 0 to 7 at this point. The result is shifted left by that many bits. The total shift amount is stored in tmpB's exponent.

The unsigned subtraction path merges at #0289 with the unsigned addition path described earlier, adjusting the precision, computing the exponent, and storing the result. The micro-subroutine then returns to the common code that also handles multiplication and division.

Special-case handling in the common microcode

The 8087 handles many special cases for infinities, zeros, Not-a-Number, denormals, and other special values. The designers of the 8087 carefully thought about these special cases and attempted to handle them in mathematically reasonable ways.6 The table below is just part of the special cases that the 8087 handles.

Part of the special-case handling of infinities as described in the User's Manual.

Part of the special-case handling of infinities as described in the User's Manual.

While these special cases make the 8087 more accurate mathematically, they make the microcode much more complicated. The microcode below is common to addition, subtraction, multiplication, and division. It loads arguments and stores the result as described above, but for the most part, it handles special cases. This microcode is "spaghetti code", with 18 conditional branches in a row to handle numerous special cases. I'll describe it at a high level here; the flowchart in the footnotes7 provides details.

#0001 call MEM_OP if mem op maybe get args from memory
#0002 jmp #0004 if mem op
#0003 st(i) -> tmpB        get from stack
#0004 jmp #0018 if DE (denormalized) interrupt quit if denormalized interrupt
#0005 st(0) -> tmpA        top of stack to tmpA
#0006 jmp #0008 if not reverse bit no jump if FSUBR, FMUL, FDIVR?
#0007 xchg tmp             reverse arguments
#0008 jmp #0019 if tmp anomalous handle anomalous values
#0009 call INSTR_SWITCH    switch on instruction type: J1(mul), J2(add/sub), J3(div)
#0010 call NONNORMAL_RESULT if not exp normal Back, finish up instruction
#0011 jmp #0014 if dst st(i) test d destination bit
#0012 tmpA -> st(0)        destination st(0)
#0013 RNI
#0014 tmpA -> st(i)        exit: destination st(i)
#0015 jmp #0018 if not pop at end RNI if not pop
#0016 empty -> SP(0) tag   mark top of stack empty
#0017 stackPtr++           pop
#0018 RNI
#0019 call SPECIAL_TMPS    handle special values
#0020 jmp #0023 if not flag
#0021 jmp #0011 if expConv[0] jump to finish
#0022 jmp #0009            switch on instruction type
#0023 cond3b -> sign latch more conditions
#0024 jmp #0039 if expConv[0]
#0025 jmp #0032 if not tmpB:tag ZERO
#0026 jmp #0035 if tmpA:tag ZERO
#0027 except:zero div
#0028 NaN -> tmpA          NaN, finish
#0029 high bit -> tmpA:frac
#0030 sign latch -> tmpA sign
#0031 jmp #0037            finish up
#0032 jmp #0035 if not tmpA:tag ZERO divide by denorm/0
#0033 tmpB:frac -> sumreg:frac divide by 0
#0034 jmp #0055 if not Sum register is zero
#0035 except:invalid
#0036 NaN -> tmpA
#0037 jmp #0018 if intr    jump to RNI
#0038 jmp #0011            finish
#0039 jmp #0051 if not tmpA:tag SPECIAL more conditions
#0040 jmp #0046 if not tmpB:tag SPECIAL
#0041 jmp #0028 if FMUL
#0042 jmp #0035 if FDIV FDIVR
#0043 jmp #0035 if not affine ∞ ∞×∞: test if affine
#0044 jmp #0035 if unsigned sub test if ∞ add or subtract
#0045 jmp #0038
#0046 jmp #0049 if not FMUL
#0047 jmp #0035 if tmpB:tag ZERO
#0048 jmp #0028
#0049 jmp #0028 if FDIV FDIVR
#0050 jmp #0038
#0051 jmp #0054 if not FMUL
#0052 jmp #0035 if tmpA:tag ZERO divide by 0?
#0053 jmp #0028
#0054 jmp #0057 if not FDIV FDIVR
#0055 zero -> tmpA         0÷denorm or n÷∞
#0056 jmp #0030            do something and finish up
#0057 xchg tmp
#0058 jmp #0061 if sign mismatch
#0059 jmp #0062 if unsigned sub test if adding or subtracting
#0060 jmp #0038            finish
#0061 jmp #0038 if unsigned sub finish
#0062 tmpA sign -> sign latch complement sign
#0063 !sign latch -> tmpA sign
#0064 jmp #0038            finish

Looking at #0008, the 8087 micro-architecture includes a conditional test that will check if either temporary register is empty or is tagged with a special value. If so, a subroutine that I call SPECAL_TMPS is called.8 It examines the two temporary registers and sets two flags to indicate what special handling needs to be done.

If both flags are set, one of the arguments was tagged empty, typically indicating a stack underflow. In this case, the microcode returns Not-a-Number (NaN). If the second flag is clear, then one of the arguments was a denormal number, a special value very close to zero. The arithmetic operation continues in that case.

The remaining code paths get complicated, for example, branching on the signs of the arguments, the specific arithmetic operation, or if an argument is zero or infinity. Eight code paths return Not-a-Number: n÷denorm, 0÷0, 0÷pseudo-zero, ∞×0, ∞÷∞, 0×∞, ∞ op ∞ proj, and ∞-∞ affine. Many of these are straightforward—0×∞ has no meaningful value, for instance—but the last two need a bit more explanation.

The 8087 has two different modes for infinity, selected by a bit in the control register. With "affine closure", infinity is signed, so +∞ and -∞ are two different values. The recommended mode is "projective closure", where infinity is unsigned. In affine mode, ∞+∞ is perfectly valid, yielding positive infinity. However, ∞-∞ is meaningless; an answer of 0 would be arbitrary, so NaN is returned. In projective mode, none of the operations on infinity make sense because infinity is both infinitely positive and infinitely negative.

The microcode has eight different paths to return infinity: n÷0, ∞×n, ∞×∞, n×∞, ∞÷x, x±∞, ∞±x, and ∞+∞ affine. (The first case assumes that the divide-by-zero exception has been masked.) For the first five cases, the microcode generates the sign for infinity by combining the signs of the arguments. However, the last three cases take the sign from the infinity argument and ignore the other sign. In other words, multiplication and division can flip the sign of an infinity, but addition and subtraction can't.

Two paths deal with special-case 0 results: 0÷denorm and n÷∞. The microcode generates 0 with the correct sign, based on the signs of the arguments.

The leading zeros circuitry

With subtraction, digits can cancel out, leaving leading zeros that need to be removed by shifting the value. The 8087's shifter can shift a 64-bit value by an arbitrary number of bits. The job of the leading-zero circuitry is to count the leading zeros to determine how much to shift. That is, it counts how many zeros are to the left of the first 1 bit and turns this into a binary value. This is basically the same as a priority encoder that encodes the position of the first 1 bit.

Leading-zero circuits are somewhat complicated because each binary output bit depends on all the input bits; a 64-bit detector has 64 bits coming in. One approach is to take the truth table and optimize it, ending up with a pile of logic. Another approach is to use a hierarchical approach, a tree with log(N) stages. The 8087 takes a simpler path: one pass to eliminate leading zeros a byte at a time, and a second pass to eliminate the remaining 0 to 7 leading zero bits. Each pass requires a separate 8-input leading zero detector circuit. This approach is slower, but the circuitry is much simpler: two 8-bit leading zero detectors instead of a 64-bit leading zero detector.

The schematic below shows the circuit that converts 0 to 7 leading zeros into a 3-digit binary value. To simplify the schematic, I've replaced the first layer of logic with a bitmask that represents the 8-bit input. For instance, x01xxxxx indicates that the signal is high if the second bit is 0, the third bit is 1, and the remaining bits are arbitrary. I've added text descriptions; due to optimizations, the descriptions have some exceptions. For instance, x01xxxxx matches anything with two leading zeros. It also matches some patterns with no leading zeros, but those don't change the result. The important thing is that it matches everything with 2 leading zeros and nothing with 1 or 3 leading zeros.

The circuitry to detect 0 to 7 leading zero bits. The same approach is used to detect leading zero bytes.

The circuitry to detect 0 to 7 leading zero bits. The same approach is used to detect leading zero bytes.

The output from the circuit is a 3-bit binary value representing the number of leading zeros. The top NOR gate generates the low bit, set for 1, 3, 5, or 7 leading zeros. The high bit is generated by the bottom NOR gate: set for 4, 5, 6, or 7. The middle bit is trickier, with an additional layer of logic to determine if there are 4 or 5 leading zeros (or maybe 0 or 1). The two 1 cases block four zeros, while the 00 pair means that four leading zeros would turn into at least 6. (This is a hand-waving explanation, but one can enumerate the 256 cases and verify that they all produce the correct answer.)

To count the number of bytes with leading zeros, similar logic is used. However, each group of 8 bits goes through an OR gate to detect if any bits are set in the byte. Thus, the logic determines how many bytes of leading zeros are present.

On the die, the leading zero logic is immediately to the left of the sum register, examining each bit of the sum register.

Conclusions

Most people don't give much thought to computer operations such as addition or subtraction. But there are interesting algorithms and special cases behind the scenes, and these features are embodied in clever silicon circuits. The intricate rules to handle positive and negative zeros, positive and negative infinities, and Not-a-Number are part of modern computers, since the 8087 led to the IEEE-754 floating-point standard used today. The 8087 went a bit overboard with special cases, however. Some 8087 features, such as projective infinity, unnormals, and pseudo-zero were dropped from the standard becauses they weren't worth the effort.

Notes and references

  1. Intel's documentation provides a performance comparison of the 8087 versus floating-point operations emulated on the 8086. The speedup varies depending on the instruction, but is typically almost a factor of 100. This speedup made the 8087 chip highly desirable for numerical applications such as CAD and spreadsheets. ↩

  2. Internally, the 8087 uses 80 bits to hold floating-point values: one bit for the sign, 15 bits for the exponent, and 64 bits for the significand. However, the 8087 uses three extra low-order bits for rounding, called Guard, Round, and Sticky. These bits ensure that a value is always rounded in the right direction. Some parts of the datapath have additional bits for sign or overflow: the shifter is 68 bits wide, and the adder is 69 bits wide. For the most part, I'll ignore these extra bits and refer to the datapath as 64 bits wide. ↩

  3. While floating-point numbers solve some problems, they introduce problems of their own. For instance, 0.01 can't be expressed exactly in floating point (it has an infinite repeating fraction in binary, just like 1/3 can't be expressed exactly as a decimal number). This can cause havoc if you're using floating-point numbers to represent money and you're dealing with cents. For more on problems with floating-point, see this Julia Evans comic or What Every Computer Scientist Should Know About Floating-Point Arithmetic. ↩

  4. One difference between the 8087's temporary real format and the external formats is that in the temporary real, the leading 1 digit is explicitly stored in the number. In the external formats, the leading 1 is implicit and not stored in the number, providing one additional bit of accuracy, but making arithmetic more complicated. ↩

  5. The flowchart below shows the control flow for the addition/subtraction microcode. (Click it for a larger image.)

    Flowchart of the add/sub microcode.

    Flowchart of the add/sub microcode.

 ↩

  1. William Kahan is the floating-point expert behind the 8087. He wrote about the motivations for various design decisions here, if you want the details of, for example, why NaN != NaN. (One interesting comment discusses the value of 00, commonly debated online. Kahan states, "A consensus is growing that x**0 = 1 for every x , including 0 , ∞ and NaN.") ↩

  2. The flowchart below shows the microcode that is shared for basic arithmetic instructions. This flowchart calls the above flowchart as a subroutine. The numerous special case paths are numbered.

    Flowchart of the common microcode for basic arithmetic operations. (Click for a larger image.)

    Flowchart of the common microcode for basic arithmetic operations. (Click for a larger image.)

 ↩

  1. The actions of SPECIAL_TMPS are summarized below. It returns status through the flag flip-flop and the exponent converter register (expConv). Its actions are:

    InputResultflagexpConv emptyNaN, exception11 NaN(larger) NaN, exception11 infinityinfinity01 denormunnorm10 divide-by-zero(ish)no change00

    The line I call "divide-by-zero(ish)" indicates that a division instruction is attempting to divide by zero or an unnormal number (which is close to zero). I'll give a bit of background on how the 8087 represents 0 and values near 0. A normal floating-point value has a mantissa with the first bit set. Unfortunately, normal numbers have a large gap between the smallest normal number and zero. Denormals break this "rule", allowing the top bits to be zero, so there are many more numbers near 0. (For a base-10 analogy, suppose you count down 1.003, 1.002, 1.001, 1.000. If the top digit must remain set, the next possible number is 0, a huge jump from 1.000. Denormals let you keep going in small steps: 0.999, 0.998, ...., 0.001, 0.)

    For a denormal, the exponent has the smallest possible value. Unnormals are similar to denormals, except the exponent has a larger value. The purpose of unnormals is that if a denormalized exception is masked, the denormal number is converted to an unnormal and execution continues.

    For true zero values, the 8087 uses a signed zero, so you can have either +0 or -0. A true zero is stored with the smallest possible exponent. But the 8087 also supports a "pseudo-zero", a zero value that has a larger exponent. The pseudo-zero can arise from multiplying two very small unnormal values. (With the 80387 floating-point chip, Intel got rid of unnormals and pseudo-zeros.)

    I discussed the microcode for the SPECIAL_TMPS subroutine in detail earlier, so I won't discuss it more here. ↩

The Daily Front Page 18 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Language Machinery
article

Parser Combinators

by schindlabua·▲ 229 points·81 comments·t3.at ↗
regex gets messy on complex tasks, and tree-sitter often is overkill

Regex queries are not equipped to break down HTML into its meaningful parts

Parser Combinators

Parsing is the act of taking less structured input like text, and turning it into more structured data, like objects.

Many of you will be familiar with using regex to parse text, and some of you might know about tree-sitter, a heavy-duty parsing library which powers the syntax highlighting in your code editor.

But regex gets messy on complex tasks, and tree-sitter often is overkill — for this middle ground, parser combinators are perfect. Not many people know about them, so allow me to show you!

The partial parser

The smallest unit of parsing we’ll be looking at is the partial parser. It gets to decide where to cut the input string, and then it returns a tuple consisting of whatever and the rest of the string.

It can be any old function, as long as it returns such a tuple! It can even use regex inside.

▸Code definition·pInteger

const pInteger: Parser<number> = (input: string) => {
  const match = input.match(/^\d+/);
  if (match == null) throw new Error();

  const digits = match[0];
  return [Number(digits), input.substring(digits.length)];
};

Chaining

A single parser function won’t do much on its own; but by applying multiple parsers in sequence, we can consume the entire input step by step.

▸Code definition·pHello

const pHello: Parser<string> = (input: string) => {
  if (!input.startsWith("Hello")) throw new Error();

  return ["Hello", input.substring(5)];
};

▸Code definition·pIgnoreWhitespace

const pIgnoreWhitespace: Parser<null> = (input: string) => {
  const match = input.match(/^\s+/);
  if (match == null) throw new Error();

  const spaces = match[0];
  return [null, input.substring(spaces.length)];
};

▸Code definition·pInteger

const pInteger: Parser<number> = (input: string) => {
  const match = input.match(/^\d+/);
  if (match == null) throw new Error();

  const digits = match[0];
  return [Number(digits), input.substring(digits.length)];
};
const [token1, input2] = pHello("Hello 100");
const [token2, input3] = pIgnoreWhitespace(input2);
const [token3, input4] = pInteger(input3);

console.log(token1, token2, token3); // "Hello", null, 100
console.log(input4); // empty!

Chaining

Or, and this is where the real power of partial parsers comes in: we wrap the chain up as a new parser of its own.

▸Code definition·pHello100

const pHello100: Parser<[string, null, number]> = (input: string) => {
  const [hello, rest1] = pHello(input);
  const [space, rest2] = pIgnoreWhitespace(rest1);
  const [number, rest3] = pInteger(rest2);

  return [[hello, space, number], rest3];
};

pSeq

Or we generalize even further and provide a function that does the chaining! “Feeding the rest of the string into the next parser” is super generic after all, and doesn’t really depend on what any single parser does.

Getting the types right is tricky, but TypeScript is perfectly capable of expressing these complex variadic types.

▸Code definition·pSeq

type Parsers<T extends unknown[]> = { [K in keyof T]: Parser<T[K]> };

const pSeq = <T extends unknown[]>(...parsers: Parsers<T>): Parser<T> =>
  (input) => {
    const results = [] as unknown as T;
    let rest = input;
    for (const p of parsers) {
      const [val, next] = (p as Parser<unknown>)(rest);
      results.push(val);
      rest = next;
    }
    return [results, rest];
  };

Combinators

Since pSeq combines many parsers into a new parser, we call it a parser combinator.

Take a moment to appreciate the functional madness going on: pSeq is a function that takes parsers, which are functions, and it returns another parser, which is also a function.

And only then do we actually start the parsing, by calling the resulting function with data.

It’s like we are building up this construct of nested functions to create a complex program. Kinda cool!

By the way

If splitting a string into many tokens feels somehow related to .reduce then you have good instincts. What we are doing here is actually the dual, which is called an unfold in functional circles (reduce is referred to as a fold).

While a fold uses intermediate state — the accumulator — to combine a list of things into one, an unfold uses intermediate state to split one thing into many.

Yay, maths!

Tuples are unwieldy

If the point of parsing is to get structured, often human-readable data out of raw strings, then a tuple of values like ["Hello", null, 100] can hardly be the end goal.

We could of course map over the result to transform it into a more convenient shape.

const pHello100 = pSeq(...);
const [result, rest] = pHello100("Hello 100");

console.log(result); // ["Hello", null, 100]

const parsed = {
  greeting: result[0],
  who: result[2],
};

pMap

But this is not in the spirit of parser combinators! Like before, we can also wrap the mapping into a new parser combinator itself.

pMap takes a parser and a function; the function will be applied to the eventual result after parsing.

▸Code definition·pMap

const pMap = <T, R>(parser: Parser<T>, fn: (value: T) => R): Parser<R> =>
  (input: string) => {
    const [value, rest] = parser(input);
    return [fn(value), rest];
  };
const pGreeting = pMap(
  pHello100,
  ([greeting, _, who]) => ({ greeting, who }),
);

const [parsed, rest] = pGreeting("Hello 100");

console.log(parsed); // { greeting: "Hello", who: 100 }

pRepeat

Before we hop into a practical example, let me show the third fundamental parser combinator: pRepeat — it takes a given parser and applies it over and over again until it can’t.

It’s the * of regex, as a combinator!

▸Code definition·pRepeat

const pRepeat = <T>(parser: Parser<T>): Parser<T[]> =>
  (input: string) => {
    const values: T[] = [];
    let rest = input;
    while (true) {
      try {
        const [value, next] = parser(rest);
        values.push(value);
        rest = next;
      } catch {
        return [values, rest];
      }
    }
  };

▸Code definition·pNumber

const pNumber: Parser<number> = (input: string) => {
  const match = input.match(/^\d+/);
  if (match == null) throw new Error();

  const digits = match[0];
  return [Number(digits), input.substring(digits.length)];
};

▸Code definition·pSemicolon

const pSemicolon: Parser<string> = (input: string) => {
  if (!input.startsWith(";")) throw new Error();

  return [";", input.substring(1)];
};
const pNumberCsv = pRepeat(pSeq(pNumber, pSemicolon));

pNumberCsv("10;20;30;");
// [[[10, ";"], [20, ";"], [30, ";"]], ""]

Let’s build a parser!

We have enough tools now to start parsing actual, real-world data!

Above is a sample output of me pinging Cloudflare. There’s tons of useful info in there, so let’s parse it into structured data — how about this:

type PingResult = {
  header: PingHeader;
  packets: IcmpPacket[];
  statistics: PingStatistics;
};

type IcmpPacket = {
  byteCount: number; from: string;
  seq: number; ttl: number; time: number;
};

type PingHeader = {
  targetIp: string;        // 1.1.1.1
  resolvedIp: string;      // 1.1.1.1 but in parentheses
  icmpPayloadSize: number; // 56
  totalPacketSize: number; // 84
};

type PingStatistics = {
  packetsTransmitted: number; packetsReceived: number;
  packetLoss: number; time: number;
  rtt: { min: number; avg: number; max: number; mdev: number };
};

Bits and Bobs

We have some recurring things in this output like decimal numbers or IP addresses. So let’s set those up first.

▸Code definition·pString

// Exact text, like "PING"
const pString = (text: string): Parser<string> => (input: string) => {
  if (!input.startsWith(text)) throw new Error();

  return [text, input.substring(text.length)];
};

▸Code definition·pInteger

// Whole numbers, like 64
const pInteger: Parser<number> = (input: string) => {
  const match = input.match(/^\d+/);
  if (match == null) throw new Error();

  const digits = match[0];
  return [Number(digits), input.substring(digits.length)];
};

▸Code definition·pDecimal

// Numbers with an optional fraction, like 68.7
const pDecimal: Parser<number> = (input: string) => {
  const match = input.match(/^\d+(\.\d+)?/);
  if (match == null) throw new Error();

  const digits = match[0];
  return [Number(digits), input.substring(digits.length)];
};

▸Code definition·pIpV4Address

// Four bytes and three dots, like 1.1.1.1
const pByte = pMap(pInteger, (n) => {
  if (n > 255) throw new Error();
  return n;
});

const pDot = pString(".");

const pIpV4Address = pMap(
  pSeq(pByte, pDot, pByte, pDot, pByte, pDot, pByte),
  ([a, _1, b, _2, c, _3, d]) => `${a}.${b}.${c}.${d}`,
);

▸Code definition·pWhitespace

// At least one space
const pWhitespace: Parser<null> = (input: string) => {
  const match = input.match(/^\s+/);
  if (match == null) throw new Error();

  return [null, input.substring(match[0].length)];
};

The header

The first line should be easy, it’s just some pSeq of parsers and then a pMap to finagle it into PingHeader shape.

▸Code definition·pPingHeaderParts

const pPingHeaderParts = pSeq(
  pString("PING"), pWhitespace, pIpV4Address, pWhitespace,
  pString("("), pIpV4Address, pString(")"), pWhitespace,
  pInteger, pString("("), pInteger, pString(")"),
  pString(" bytes of data."),
);

▸Code definition·pPingHeader

const pPingHeader = pMap(
  pPingHeaderParts,
  ([a, b, c, d, e, f, g, h, i, j, k, l, m]) => ({
    targetIp: c,
    resolvedIp: f,
    icmpPayloadSize: i,
    totalPacketSize: k,
  }),
);

A packet

Actually the packets are also a pSeq of parsers, followed by a pMap. This parsing stuff is really easy, hey!

▸Code definition·pIcmpPacketParts

const pIcmpPacketParts = pSeq(
  pInteger, pString(" bytes from "), pIpV4Address,
  pString(": icmp_seq="), pInteger,
  pString(" ttl="), pInteger,
  pString(" time="), pDecimal, pString(" ms"),
);

▸Code definition·pIcmpPacket

const pIcmpPacket = pMap(
  pIcmpPacketParts,
  ([a, b, c, d, e, f, g, h, i, j]) => ({
    byteCount: a, from: c, seq: e, ttl: g, time: i,
  }),
);

The statistics

Could you imagine doing this in regex by the way?

▸Code definition·pUselessLine

const pUselessLine = pSeq(
  pString("--- "), pIpV4Address, pString(" ping statistics ---"),
);

▸Code definition·pStatsLine1

const pStatsLine1 = pSeq(
  pInteger, pString(" packets transmitted, "),
  pInteger, pString(" received, "),
  pDecimal, pString("% packet loss, time "),
  pInteger, pString("ms"),
);

▸Code definition·pStatsLine2

const pStatsLine2 = pSeq(
  pString("rtt min/avg/max/mdev = "),
  pDecimal, pString("/"), pDecimal, pString("/"),
  pDecimal, pString("/"), pDecimal,
  pString(" ms"),
);

▸Code definition·pPingStatistics

const pPingStatistics = pMap(
  pSeq(pUselessLine, pWhitespace, pStatsLine1, pWhitespace, pStatsLine2),
  ([_1, _2, [a, b, c, d, e, f, g, h], _3, [i, j, k, l, m, n, o, p, q]]) => ({
    packetsTransmitted: a, packetsReceived: c,
    packetLoss: e, time: g,
    rtt: { min: j, avg: l, max: n, mdev: p },
  }),
);

Ping packets, parsed!

And boom, that’s pretty much it! Just one more pSeq and pMap to wrap all the parts together, and we have built a complete parser for the ping command.

That was super easy, right?

▸Code definition·pPingSummary

const pPingSummary: Parser<PingResult> = pMap(
  pSeq(
    pPingHeader,
    pRepeat(pMap(pSeq(pWhitespace, pIcmpPacket), ([_, packet]) => packet)),
    pWhitespace,
    pPingStatistics,
  ),
  ([header, packets, _, statistics]) => ({ header, packets, statistics }),
);

Go give it a try

In a single post we built a fairly complicated parser from literally zero, and a hand-rolled parser combinator library along the way!

It’s much easier to create correct and maintainable parsers this way than with a regex; once you start nesting pSeq calls, the equivalent regex would become an unreadable mess, while the combinator approach gives you something squeaky clean.

In case you are missing fancier features like backtracking or lookahead, rest assured that parser combinators can handle those scenarios as well, since at the end of the day it’s all just functions composed together.

Go give them a try next time you have to parse something — parser combinators are a really elegant solution to the parser problem, and many more people should use them!

The Daily Front Page 19 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — The Java Desk
article

Java sealed classes and exhaustive pattern matching

by hnisjafx40·▲ 153 points·106 comments·neilmadden.blog ↗
allow you to explicitly list the allowed sub-types

Java sealed classes and exhaustive pattern matching

Java 17 introduced sealed classes, which allow you to explicitly list the allowed sub-types of an interface or base class. For example, here’s a toy example using a sealed interface and records (inner classes are implicitly added to the permitted sub-types if an explicit list is not given):

public sealed interface SealedType {
    record TypeA() implements SealedType {}
    record TypeB() implements SealedType {}

    static SealedType of(String type) {
        return switch (type) {
            case “A” -> new TypeA();
            case “B” -> new TypeB();
            default -> throw new IllegalArgumentException();
        };
    }
}

If you are familiar with functional programming languages with algebraic datatypes, you can view this as similar to a datatype declaration in Haskell or ML:

data SealedType = TypeA | TypeB

We can then use this in a simple Main class:

void main(String[] args) {
    var val = SealedType.of(args[0]);
    System.out.println(switch (val) {
        case SealedType.TypeA() -> “A”;
        case SealedType.TypeB() -> “B”;
    });
}

OK, not so exciting. But one thing to note here is that we didn’t have to add a default clause to the switch expression in our main method. This is because sealed classes (and enums) enable exhaustiveness checking: the compiler knows exactly what the possible cases are, and so can check if you have covered them all. If you have, then you don’t need a default clause. If you forget one (and don’t have a default clause), then you get a compile-time error.

This is great when you want to ensure that all uses of some type do cover all of the cases, but it does introduce a new type of breaking change: adding a new sub-type to a sealed class/interface may break consumers of that code. For example, adding a new TypeC case to our example will cause the main method to fail to compile due to the missing case. So if you export a sealed type in your API then adding a new subtype is a breaking change that would require a major version bump (if you’re following SemVer).

Compile-time or runtime error?

Although Java will produce a compile-time error for a non-exhaustive switch when you compile the consumer (main in this case), it cannot do so if the consumer is not recompiled when the sealed type changes. For example, suppose that we extend our SealedType with another case:

public sealed interface SealedType {
    record TypeA() implements SealedType {}
    record TypeB() implements SealedType {}
    record TypeC() implements SealedType {}

    static SealedType of(String type) {
        return switch (type) {
            case “A” -> new TypeA();
            case “B” -> new TypeB();
            case “C” -> new TypeC();
            default -> throw new IllegalArgumentException();
        };
    }
}

If we just recompiled SealedType.java and don’t recompile Main, then we end up with a runtime exception if we trigger the new case:

% java Main C          
Exception in thread "main" java.lang.MatchException
	at Main.main(Main.java:3)

Here we have the new MatchException being thrown. The Javadoc notes this potential issue with separate compilation, and also some corner-cases with nulls in patterns. So even if you were hoping that using sealed classes would statically ensure that you update all consumers when a new case is added, this is not the case unless you recompile everything.

Conclusions

I think for me the conclusion is that sealed types are probably most useful within the implementation of a component, and are less useful when exposed in the public API that a component offers to other components (eg a library). For internal use, where you typically are going to recompile everything together, you get the nice properties of exhaustiveness checking and higher compile-time safety guarantees. But when used across module boundaries, you may just be introducing new ways to break code, often only detectable at runtime.

(I discovered these subtleties when reviewing the preview support for PEM-encoded cryptographic objects, which makes exactly this mistake of baking a sealed interface into a public API and recommend clients to pattern match against that type. A predict a very high chance of breakage if they ever want to add a new case).

The Daily Front Page 20 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Pascal, Unpacked
article

Free Pascal compiler now supports dynamic packages

by sysrpl·▲ 132 points·28 comments·getlazarus.org ↗
Dynamic packages allow users to create and install components, controls, and Lazarus extensions in seconds

I am pleased to announce the first release of full dynamic package support for the Free Pascal Compiler and the Lazarus IDE. This feature has been a long time coming for the ecosystem, but a complete implementation is now available for download from this website.

Dynamic packages allow users to create and install components, controls, and Lazarus extensions in seconds without rebuilding the entire IDE. They can also be used in your own programs to develop and deploy plugins that expose native Pascal classes and types through dynamic package libraries. To support this functionality, I have made numerous improvements to the compiler, its runtime, and the Lazarus IDE. I have also created additional IDE extensions to improve the experience of working with Lazarus packages.

All installers include dynamic package support

Dynamic packages are implemented as standard shared library files for Linux, Windows, and macOS. They contain additional metadata generated by the compiler that can be inspected and queried using new RTL units. The runtime also includes mechanisms for safely preserving thread variables and managing dynamic types, such as strings and dynamic arrays, between programs and packages or between multiple packages.

Video: Dynamic Packages Example

When deploying your program, you can still bundle everything into a single executable. Alternatively, you can divide it into multiple dynamic packages that can be replaced while your program is running, providing a plugin system.

Restrictions

Dynamic packages come with a few restrictions. First, a unit contained in a package cannot have the same name as the package itself. I have enhanced the default package system so that the generated Pascal source file automatically appends the word Package to the package name. For example, if you create a package called

ElectroTools.lpk

, the source file listing all the units contained in the package will be named

ElectroToolsPackage.pas

instead of

ElectroTools.pas

.

Another restriction is that unit names must be unique across packages. If someone else has written a unit named Widgets, you cannot install another package containing a unit with the same name. You must either choose which package to install or rename one of the conflicting units.

Dynamic packages are also larger than ordinary shared libraries because they contain a map of everything inside them. Stripping a dynamic package removes the metadata required for it to function as a dynamic package.

RTL Enhancements

type
  TPackageType = record
    { The unit that declares the type }
    UnitName: string;
    { The name of the type }
    Name: string;
    { The kind of the type }
    Kind: TTypeKind;
    { The RTTI of the type }
    Info: PTypeInfo;
    { The class if Kind is tkClass, otherwise nil }
    ClassType: TClass;
  end;

The runtime library has been enhanced to support dynamic packages, including the metadata required to inspect their contents and the mechanisms needed to safely manage dynamic types and thread variables across package boundaries.

A new unit

DynPkgTypes.pas

has been added to the RTL to help you with reading information from dynamic packages. The same tried and true RTTI information can be gather from a package to work with its contents. There are enough functions in the RTL to work with dynamic packages to do everything you need, including loading, enumerating, searching, and unloading packages at runtime.

Lazarus Enhancements

I have made several enhancements to the Lazarus IDE to take better advantage of dynamic packages.

The first thing you will notice when you open Lazarus is a new progress window that can appear outside the IDE. When you modify source code belonging to a package registered with the IDE, the system detects the changes and automatically rebuilds the package before Lazarus starts. While this is happening, a progress window notifies you that changes have been detected and the package is being rebuilt.

The same window appears when you choose to rebuild the entire IDE. It remains visible and displays information about the current operation, including the estimated time remaining before the IDE restarts. The progress window also appears when adding or removing packages if the operation takes more than five seconds. This can happen when installing multiple packages at once, which is another new feature.

Another enhancement is a new Packages window, docked on the right by default. It displays the packages you have recently opened, and the list persists between Lazarus sessions. You can browse the files within a package and double click an item to open it.

When you open an installed package and click Compile in its package window, any associated controls, components, or extensions are updated within a second or two. This significantly speeds up development because changes that previously required rebuilding the entire IDE can now be applied almost immediately.

The package menu, which lists available packages, has also been improved. Adding or removing packages now updates the IDE without requiring a rebuild.

Package options have been extended as well. Under IDE Integrations, you can now restrict a package to a specific platform or widgetset. If a package does not meet the current platform or widgetset requirements, it will not appear in the package list. The IDE will also ignore the package when it detects changes or would otherwise attempt to open it.

For example, suppose you develop a TWinControl implementation for the Windows IShellView COM interface. You can restrict the package so that it is available only when Lazarus is running on Windows.

Another enhancement I created to demonstrate the capabilities of dynamic packages is a new form or frame conversion feature for Lazarus extensions. It converts any form or frame into an installable control that is automatically added to the component palette. All controls, events, methods, and properties are copied to the new control.

This makes it possible to visually design and lay out new controls or easily reuse existing forms and frames in other projects.

Note: If you attempt to build a package that is currently being used by an open form, the IDE will ask you to save or close the form before building the package.

These features and more are available for download now at the location linked below. The complete changes to FPC and Lazarus have been committed to GitLab in my forked branch named dynamic packages.

FPC dynamic package branch Lazarus dynamic package branch

If you encounter any problems, please report them through the GitLab issue tracker associated with the branches linked above. If you would like to discuss dynamic packages or ask questions, you can use the forum linked below. Please note that a moderator must approve your account before you can create new posts.

Helping Out

If you would like to help with this project, the site needs moderators. You can send me (sysrpl) a private message if you are interested in contributing.

I am also having difficulty working on macOS and producing the necessary builds. If anyone has an M1 Macintosh they would be willing to donate, please send me a private message. I would really like to work on the compiler code needed to support dynamic packages on the M1 architecture.

The Daily Front Page 21 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Checks Before Commit
show hn

Show HN: Sphinx – A hook that quizzes you on your AI's code before shipping

by critiquebrowser·▲ 242 points·85 comments·sphinx-six-theta.vercel.app ↗

Sphinx is a Git hook for agent-assisted development. Before your agent's code ships, it asks you a question about what that code actually does.

$ npm install -g sphinx-understand

Built to run on minimal tokens, from your existing coding agent, OpenRouter, or any OpenAI-compatible endpoint.

$ git push origin main

sphinx · understanding check for main

11 files changed · +5,012 −3,147

Sphinx

Your webhook handler now saves the event ID *before* calling `charge()`. Stripe times out and sends the same event again. What happens on the retry?

You

It runs twice, so the customer is charged twice.

Sphinx

Not quite. The retry finds the saved ID and returns 200 without charging. But that ID is stored before the charge succeeds. If `charge()` fails, what does the next retry do?

You

It skips the charge, so the customer is never billed.

✓ Understood. Pushing to origin/main.

An illustrative exchange. Real questions come from your diff.

  1. 01

    You push.

    Or your agent does. Git pauses on the branches you protect.

  2. 02

    Sphinx asks.

    A reviewer that never saw your chat reads the diff and asks what the change does when things go wrong.

  3. 03

    You answer.

    Get it wrong and you learn why, then try a new scenario. Get it right and the push continues.

A git push waits while the Sphinx questionnaire asks what the change does, the answer passes, and the push continues.

The real questionnaire: a push waits, you answer, Git continues.

Works with Codex, Claude Code, Cursor, OpenCode, and Pi, or plain Git. Your answers never reach the coding agent, and .env files and keys are never opened. In a hurry? sphinx yolo lets pushes through, and every skip is logged.

Start in a minute.

# Node 22.19+ · macOS, Linux, or WSL
npm install -g sphinx-understand
sphinx install

# then push as usual
git push

sphinx install connects Git and your coding agents and asks which model should review. Read the docs for everything else.

The Daily Front Page 22 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Checks Before Commit
article

Hybrid Reasoning Agents: LLM agents that think in latent space, act through text

by allinonai·▲ 287 points·157 comments·arxiv.org ↗

Abstract

How can we build an agent that thinks beyond human language, yet still acts through it in the external environment? Modern LLM agents still reason and interact through text, while latent reasoning offers an efficient internal medium but lacks native tool access and reasoning transparency. We bridge these two directions with Hybrid Reasoning Agents (HybridAgents), which dynamically navigate between latent reasoning and text-based interaction throughout a unified generation process. Architecturally, a lightweight HybridLink enables seamless transitions between text and latent modes, while the agent's continuous working memory preserves lossless hybrid context across multiple turns. These designs preserve tool-integrated agentic capabilities while making latent thoughts directly inspectable. Building on this architecture, we further develop dedicated post-training algorithms for hybrid reasoning: HybridSFT stabilizes tool-integrated hybrid generation by teaching the backbone to coordinate with HybridLink, then HybridRL scales reasoning by learning when to think in latent space and when to act through text. We evaluate HybridAgent at 3 model scales across 11 benchmarks covering mathematics, science, medicine, search, and agentic reasoning. Compared with frontier LLM Agents and agentic frameworks spanning both text-based and latent methods, HybridAgent consistently improves performance by 10.4%, while delivering 35.5%-54.7% token reduction, 1.8x-2.6x faster inference, and 2.7x-3.7x cost savings. Code and data are available at this https URL.

The Daily Front Page 23 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — A Timeline of Hyrule
show hn

Show HN: The Zelda timeline to catch up before the Ocarina of Time remake

by jsomau·▲ 172 points·105 comments·legendofhyrule.com ↗
After Ocarina of Time it branches into the child, adult and fallen-hero eras.

Hyrule's History

Nintendo's official timeline. After Ocarina of Time it branches into the child, adult and fallen-hero eras.

Long before the Kingdom of Hyrule, people live on Skyloft, an island the goddess Hylia raised above the clouds. When a dark storm pulls Zelda down to the Surface below, her friend Link takes up the Goddess Sword to find her.

At Hyrule's Picori Festival, Vaati breaks the sacred Picori Blade, frees the monsters it kept locked away and turns Princess Zelda to stone. Link sets out with Ezlo, a talking cap, to find the tiny Picori who can reforge the blade.

Generations after a boy sealed the wind sorcerer Vaati inside the Four Sword, the seal fails and Vaati carries off Princess Zelda to be his bride. Link draws the Four Sword and is split into four.

Ganondorf, king of the Gerudo, wants the Triforce hidden in the Sacred Realm. Princess Zelda and Link, a boy raised in Kokiri Forest, try to reach it first, a quest that carries Link seven years into the future and back.

Long after the Imprisoning War sealed Ganon away, the wizard Agahnim takes power at Hyrule Castle and sends the descendants of the Seven Sages away to break the seal. A telepathic plea from Princess Zelda wakes Link.

The Triforce sends Link from Hyrule Castle to two distant lands. In Holodrum, General Onox has taken Din, the Oracle of Seasons. In Labrynna, the sorceress Veran has possessed Nayru, the Oracle of Ages.

Sailing home to Hyrule after a journey of training, Link is wrecked in a storm and washes up on Koholint Island. An owl tells him that to leave he must wake the Wind Fish, asleep in an egg on the island's mountain.

Centuries after A Link to the Past, a sorcerer named Yuga is turning the descendants of the Seven Sages into paintings. Link, a blacksmith's apprentice, follows him into Lorule, a dark counterpart of Hyrule with its own princess, Hilda.

Several years after A Link Between Worlds, Link reaches Hytopia, a kingdom devoted to fashion, where the witch Lady Maud has cursed Princess Styla into a jumpsuit she cannot take off. King Tuft calls for heroes to enter the Drablands.

Hyrule has shrunk to a small kingdom when Ganon's army invades and steals the Triforce of Power. Princess Zelda splits the Triforce of Wisdom into eight pieces and hides them. A young traveler named Link sets out to find them.

A few years after Ganon's defeat, a crest appears on Link's hand. Impa tells him of a Princess Zelda of long ago, put into an endless sleep, while Ganon's followers hunt Link, believing his blood can bring their master back.

Months after Ocarina of Time, Link is searching for a lost friend when a Skull Kid wearing a strange mask leads him into the land of Termina. Above its Clock Town a moon is falling. It will strike in three days.

Long after Ocarina of Time, Link works on a ranch in Ordon Village when monsters take the village's children and twilight spreads over Hyrule. Inside it Link becomes a wolf and meets Midna, an imp from the Twilight Realm.

Dark clouds gather over Hyrule. As Princess Zelda and six maidens check the seal on Vaati, a dark double of Link carries the maidens off. Link draws the Four Sword to stop him, splits into four and sets Vaati free.

Centuries after the Hero of Time, Hyrule lies under a great sea and its hero is a legend. When a giant bird carries off his little sister, Link of Outset Island sets sail with the pirate Tetra and her crew to find her.

Soon after The Wind Waker, Link and Tetra's pirates go looking for a ghost ship said to take sailors. When Tetra vanishes aboard it, Link washes up in the World of the Ocean King and sets out to find the ship and her.

A century after Tetra founded New Hyrule, the Spirit Tracks that keep an ancient demon sealed begin to vanish. Princess Zelda's body is taken. Her spirit joins Link, a new royal engineer, to restore the tracks.

Link wakes from a hundred-year sleep to find Hyrule in ruins. Calamity Ganon, which destroyed the kingdom a century ago, is coiled around Hyrule Castle, held there by Princess Zelda, whose voice guides Link.

Some time after Breath of the Wild, Link and Zelda follow a sickening Gloom into the caverns beneath Hyrule Castle and find an ancient body held down by a glowing arm. The seal breaks, the castle rises into the sky and Zelda vanishes.

Rifts are swallowing Hyrule. After Link frees Princess Zelda from Ganon and vanishes into one, a false king blames her for the rifts. With the fairy Tri and the Tri Rod, which makes echoes of things she has seen, she sets out to close them.

The three Golden Goddesses create the world. Where they leave it the Triforce remains.

The Golden Goddesses leave the Triforce in the care of the goddess Hylia. It grants the wish of whoever holds it, so she keeps it from those who would misuse it.

The Demon King Demise and his armies make war on the land to take the Triforce. The goddess Hylia gathers the people who survive.

Hylia sends the survivors and the Triforce into the sky on land above a sea of clouds. Then she seals Demise away. In time Skyloft forgets the Surface.

A people skilled in magic try to take the Triforce from the Sacred Realm. Hyrule's histories call them the Interlopers. They are banished to the Twilight Realm.

To keep the Sacred Realm safe, the sage Rauru builds the Temple of Time over its entrance. Its Door of Time opens only with the three Spiritual Stones and an ocarina.

Zelda's descendants found the Kingdom of Hyrule on the land below the clouds. Its royal family keeps the old stories of the goddess and the Triforce.

Civil war spreads across Hyrule. A dying mother leaves her baby son with the Kokiri, forest children who never grow up. The King of Hyrule ends the war.

With the hero fallen, Ganon takes the whole Triforce. The Seven Sages seal him and his monsters in the Sacred Realm, now the Dark World, in the Imprisoning War.

Kings rule with the united Triforce. Then a magician puts Princess Zelda into an endless sleep when she won't say where the Triforce of Courage is. Hyrule declines.

Years after Link warns the king about Ganondorf, the Sages try to execute him. He survives by the Triforce of Power, so they banish him to the Twilight Realm.

Ganon breaks free and no hero comes. The gods answer Hyrule's prayers with a flood that seals the kingdom under the sea. The people they chose live on the peaks.

Link and Tetra's crew find a new land crossed by rails called the Spirit Tracks. Tetra names it New Hyrule. The kingdom grows for a century.

In the age of the gods the Zonai, a people said to descend from them, found Hyrule. A Ganondorf of this age becomes the Demon King and is sealed away.

Some 10,000 years ago Calamity Ganon is sealed with Sheikah machines. About 100 years before Link wakes it returns, seizes them and ruins Hyrule.

Beneath Hyrule Castle the sealed Demon King wakes. The castle rises into the sky. Floating islands, chasms and Gloom, a sickening poison, appear across Hyrule.

The Hero is Defeated: Link falls in battle. Ganon claims the Triforce. Child Era: Sent back in time, Link warns Zelda. Adult Era: The hero vanishes. The gods flood Hyrule.

Long after the legends

The old stories have become legend. This Hyrule was founded by the Zonai, in an age of gods.

The legend will be told again.

The Daily Front Page 24 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Cyberspace, Claimed
article

William Gibson and the trademarking of cyberspace

by Eric_Gullichsen·▲ 109 points·22 comments·colo.to ↗
From the first days of the web, people have repeated the story

Photograph at Park Güell in Barcelona

Park Güell, Barcelona, 1990

Michael Girard, Deborah Gibson, Timothy Leary, Eric Gullichsen, William Gibson.
Susan Amkraut obscured behind Deborah

The Cyberspace Rumor

From the first days of the web, people have repeated the story that Autodesk trademarked "cyberspace" and Gibson retaliated by trademarking "Eric Gullichsen".

Autodesk Cyberspace

In 1989, I was working at the Autodesk Research Lab on early virtual reality, a project started after we visited Scott Fisher at NASA Ames. Our nascent system was a 386 with a pair of Matrox graphics cards on the ISA bus, a VPL EyePhone, a Polhemus tracker, and a data glove. It ran at six to ten frames per second on models with a few hundred polygons. Sluggish, but marginally enough to get us Through the Looking Glass.

Our motto was “Reality Isn’t Enough Any More”.

Timothy Leary

I was also spending a lot of time hanging out with Timothy Leary, whose suggestion was responsible for my quitting my job at MCC and moving to California. I’d met him at the Hackers 2.0 conference in 1986 and gave him a ride to the San Jose airport. We became fast friends, and I did quite a lot of writing with him, most of which remains unpublished. But that’s a story for later. Timothy, who appears in a samizdat Autodesk virtual reality video, nicknamed our VR lab “Cyberia”.

Timothy was a tremendous fan of Gibson, and considered his seminal 1984 novel Neuromancer extremely prescient about the impending digital revolution.

As our VR developments crept slowly towards becoming a product, we at Autodesk applied to register a trademark “cyberspace”. Timothy informed me Gibson was plenty miffed about this, so I wrote him what I felt was a conciliatory letter,1 though ending snarkily by quoting his own words, “The street finds its own use for things.”

In reply, Gibson had his lawyers send Autodesk a letter2. Which I recall we ignored.

Timothy - ever the incorrigible prankster - circulated the rumor that Gibson was attempting to trademark “Eric Gullichsen” in retaliation. Then Barlow, for reasons of his own, embellished that rumor. Later amplified by Rudy Rucker.

Art Futura 1990

About a year later - after I'd already left Autodesk for my VR startup, Sense8 Corporation - we were invited to the inaugural Art Futura 1990 in Barcelona. And there, in the lobby of some swank hotel, I met Gibson. He opined in a laconic drawl that although the street finds its own use for things “Autodesk is not the street”.

There was plenty of cava consumed in the small hours before the time Barcelonans sit down to eat endless rounds of tapas. As I recall, after all the many Art Futura parties we'd put the matter behind us, or close enough.

And there was a memorable visit to Gaudi’s Park Güell, whose giant lizard of crazy-quilt ceramic appears in Count Zero.

So: Autodesk did apply to register Cyberspace, and Gibson really did object. But Gibson trying to trademark Eric Gullichsen was Timothy Leary's prank, propagated until it became accepted history.

Notes

  1. Letter to William Gibson. ↩
  2. Lawyer letter. ↩
The Daily Front Page 25 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Palm Pilot After Hours
repository

PalmOS Lemmings

by memalign·▲ 106 points·24 comments·github.com ↗
★ 126⑂ 17 forks C

PalmOS - clone - Lemmings (Lemmings)


SOURCE CODE PROVIDED AS-IS FOR EDUCATIONAL PURPOSES


lemmings info

screen shots

lemmings screenshots

The Daily Front Page 26 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Also on the Front Page
The Daily Front Page 27 of 28
Sunday, October 18, 2026 The Daily Front No. #261018 — Colophon

That's the Front for Today

Issue No. #261018 — Sunday, October 18, 2026 — went to press 2026-10-19 at 05:02 UTC.

About This Magazine

The Daily Front is a daily digital magazine assembled from the stories that reached the front page of Hacker News on Sunday, October 18, 2026. Headlines, points, and comment counts are recorded as they stood at press time. All articles remain the property of their original authors — every piece links back to its source and its discussion thread.

How It Was Made

Fetched, cleaned, and typeset by an automated pipeline. An editor model laid out the pages and chose the highlights; a second read a handful of the day's stories and briefed the cover illustrator — 30 model calls and 281k tokens in total. Set in Jacquard 12, Playfair Display, Source Serif 4, and IBM Plex Mono, all served via Google Fonts under the SIL Open Font License.

The Cover

The cover illustration was commissioned with this prompt:

At a narrow checkpoint built across a dark, glassy web, a small bot reaches through a slot with a page clutched in its hand, while a gatekeeper pulls the page back behind a locked grille. Beyond the barrier, a Palm handheld lies open on a workbench, its tiny green figures marching toward a gap in the circuitry. A game cartridge rests beside it, wired to a little offline server still humming as its plugs are pulled from the larger network.

Render as premium science-fiction key art through a 40mm virtual lens: monumental depth recedes along the narrow checkpoint and dark glass-web, rain-polished planes catching spectral electric-cyan and ultraviolet reflections in luminous fog. Keep the bot’s page caught in the gatekeeper’s pull across the locked grille; beyond it, the open Palm’s tiny acid-mint figures advance toward the circuitry gap, while the cartridge and humming offline server sit apart from the larger network as its plugs come free. Reserve a pinpoint signal-amber accent for the severed connection.

Absolutely no text, letters, numbers, readable symbols, or logos anywhere in the image. Keep the main image subject primarily below the upper 10% of the composition, where a title may be overlaid; the scene may extend naturally underneath that title area.

Production Ledger

StageModelCallsTokens InTokens Out
extractgpt-5.6-luna 26 184,405 72,399
layoutgpt-5.6-terra 1 18,296 2,403
covergpt-6-luna 2 1,385 308
covergpt-image-2.5-flare 1 263 1,372

The Publisher

Published by Johnny.

Support the Press

If The Daily Front brightens your morning, consider supporting its publisher.

Credits & Contact

All content — articles, posts, comments, and the images within them — belongs to its original authors and is reproduced here to point readers back to the source. Full credit goes to those creators; every item links to its original and its Hacker News discussion.

If you are an author and would like your content removed from an issue, write to hi@johnnys.page and it will be taken down.

Feedback is always welcome at the same address: hi@johnnys.page.

Credit where credit is due.

Every page of this issue began as someone else's work — these are the original sources, linked in full.

  1. DeepSeek search and fetch – $0.75 per 1000 successful requests by fagnerbrack — api-docs.deepseek.com·HN discussion ↗
  2. British Airways: Filming Crew W Meta Glasses Could Get Your Tickets Cancelled by bookofjoe — liveandletsfly.com·HN discussion ↗
  3. Websites are closing their doors to AI agents by evolve2k — theverge.com·HN discussion ↗
  4. NY announces game ownership bill requiring ownership rather than licensing by guiambros — tomshardware.com·HN discussion ↗
  5. Someone behind the software by tosh — karrisaarinen.com·HN discussion ↗
  6. Anthropic's proposed AI safety bill only kicks in if 50 deaths or $1B in damages by f-serif — tomshardware.com·HN discussion ↗
  7. How employment is changing at Anthropic by theanonymousone — anthropic.com·HN discussion ↗
  8. Will it be a golden age or a dark age for mathematics (and science)? by smilelamp — terrytao.wordpress.com·HN discussion ↗
  9. The Elizabeth Holmes documentary “You Can See Everything” is deceiving by MaysonL — readtheprofile.com·HN discussion ↗
  10. Tesla 'Cannot Guarantee' Roadster Reservation Holders Will Ever Get a Car by healsdata — thedrive.com·HN discussion ↗
  11. Florida's HOAs and condo associations are making the housing crisis worse by lovewins — hoaspy.com·HN discussion ↗
  12. A Mole Infiltrated the Highest Ranks of American Militias (2025) by georgecmu — propublica.org·HN discussion ↗
  13. Dogs seem to agree with humans that 'bouba' is round and 'kiki' is spiky by gmays — sciencealert.com·HN discussion ↗
  14. RepRapMicron by RobotToaster — github.com·HN discussion ↗
  15. Open MicroManipulator – A sub-micrometer 3D motion control plattform by _Microft — github.com·HN discussion ↗
  16. The Intel 8087 chip: floating-point addition and subtraction by pwg — righto.com·HN discussion ↗
  17. Parser Combinators by schindlabua — t3.at·HN discussion ↗
  18. Java sealed classes and exhaustive pattern matching by hnisjafx40 — neilmadden.blog·HN discussion ↗
  19. Free Pascal compiler now supports dynamic packages by sysrpl — getlazarus.org·HN discussion ↗
  20. Show HN: Sphinx – A hook that quizzes you on your AI's code before shipping by critiquebrowser — sphinx-six-theta.vercel.app·HN discussion ↗
  21. Hybrid Reasoning Agents: LLM agents that think in latent space, act through text by allinonai — arxiv.org·HN discussion ↗
  22. Show HN: The Zelda timeline to catch up before the Ocarina of Time remake by jsomau — legendofhyrule.com·HN discussion ↗
  23. William Gibson and the trademarking of cyberspace by Eric_Gullichsen — colo.to·HN discussion ↗
  24. PalmOS Lemmings by memalign — github.com·HN discussion ↗
  25. Zuckerberg's Meta Takes Down No Kings Instagram During Protest Day by DeepLogin — meidasnews.com·HN discussion ↗
  26. Legal experts warn Meta's new terms still grant broad scraping permissions by DeepLogin — niemanlab.org·HN discussion ↗
  27. Theranos-Style Fraud Has Become the Norm by fortran77 — theatlantic.com·HN discussion ↗
  28. macOS 15.8.2 Breaks OpenGL by Audiophilip — developer.apple.com·HN discussion ↗
  29. Matthew Prince on why Cloudflare offers a free version and always will (2016) by thatslast — webmasters.stackexchange.com·HN discussion ↗
  30. Namecheap just seized and disabled all my domains by sashk — reddit.com·HN discussion ↗

Browse all issues in the archive →