Vol. I  ·  No. 175 Established 2026  ·  AI-Generated Daily Free to Read  ·  Free to Print

The Trilogy Times

All the news that's fit to generate  —  AI • Business • Innovation
WEDNESDAY, JUNE 24, 2026 Powered by Anthropic Claude  ·  Published on Klair Trilogy International © 2026
🖶 Download PDF 🖿 Print 📰 All Editions
Today's Edition

Forbes Names Liemandt a 'Software Sweatshop' Operator. His Empire Keeps Growing.

Two major profiles in one week cast Trilogy's labor model in an unflattering light — just as the M&A market for legacy software heats up.

AUSTIN, TEXAS — In the span of days, Forbes published two sweeping investigations of Joe Liemandt and the Trilogy empire he has spent three decades quietly assembling. The first called him the billionaire who pioneered remote work and now wants to automate his workers entirely. The second described how a mysterious tech billionaire created two fortunes — and a global software sweatshop. The subject of both pieces is the same man. The timing is not coincidental.

The profiles arrive as the broader enterprise software acquisition market is entering what analysts describe as an accelerating consolidation cycle, with AI pressure forcing legacy vendors into the arms of acquirers — precisely the kind of distressed, sticky-customer businesses that ESW Capital has spent nearly two decades mastering. Business Insider this week catalogued the software companies most likely to be acquired as AI reshapes the industry. The list reads like a shopping queue for a firm with ESW's playbook: mature products, captive enterprise clients, underinvested engineering.

What Forbes illuminates, and what the M&A enthusiasm tends to obscure, is the human architecture underlying Trilogy's margin story. The 75% EBITDA targets that ESW sets for its 75+ portfolio companies are not achieved through product innovation alone. They are achieved, in significant part, by replacing high-cost local workforces with globally recruited talent sourced through Crossover, Trilogy's recruiting arm, which operates across 130 countries. Forbes's framing — 'sweatshop' — is a provocation. But the underlying data points it marshals are drawn from Trilogy's own operational model.

Now Liemandt, the Forbes pieces suggest, is moving further: using AI to systematize and eventually replace the human judgment that even Crossover's vetted global workforce currently provides. Workers, in this vision, become templates. Templates become algorithms.

The question the coverage leaves hanging is the one that always matters in a Trilogy story: who bears the cost of the efficiency, and who collects the margin?

The Billionaire Who Pioneered Remote Work Has A New Plan To  ·  How A Mysterious Tech Billionaire Created Two Fortunes—And A  ·  AltamarCAM Partners invests alongside Cleon Capital in Italy

Anthropic Nears $1 Trillion Valuation as AI Infrastructure Spending Enters a New Phase

A single week's dealflow — from Anthropic's $965B mark to LMArena's $1.7B evaluation play — signals capital is now pricing AI as permanent infrastructure, not a cycle.

SAN FRANCISCO — Anthropic has raised a funding round valuing the company at $965 billion, eclipsing OpenAI's most recent mark and placing the Claude maker within striking distance of a trillion-dollar valuation before a public offering. The company simultaneously confirmed that a new flagship model, internally called "Mythos," is in development — a signal that the fundraise is tied to a concrete product roadmap, not speculative positioning.

The week's dealflow extended well beyond one company. Nvidia led a $300 million round into Israeli AI startup Decart at a $4 billion valuation, adding another geography and another compute-adjacent bet to Jensen Huang's increasingly aggressive investment posture. LMArena, the AI evaluation and benchmarking startup, raised $150 million at a $1.7 billion valuation — a data point that deserves attention. Evaluation infrastructure is becoming a distinct investment category, one that scales in value as the number of competing models grows and enterprises need defensible methods to select among them.

Menlo Ventures, an Anthropic backer, closed $3 billion in new funds this week specifically to deploy into AI startups across stages. The fund size suggests Menlo is positioning to lead rounds that would previously have been the domain of sovereign wealth or late-stage crossover vehicles.

The macro picture: in a single week, announced rounds totaled roughly $4.4 billion across four deals at an average valuation-to-round multiple of approximately 12×. For context, the venture market's historical average across all sectors runs closer to 6–8×. The compression is gone. AI is being priced as infrastructure.

For enterprise software operators — Trilogy's ESW Capital portfolio among them — the downstream implication is significant. As Anthropic and its peers build out agent frameworks explicitly targeting financial services workflows, the gap between companies running AI-native operations and those still evaluating pilots will widen faster than most executive timelines assume.

Anthropic leapfrogs OpenAI with a record $965 billion valuat  ·  Nvidia backs Israeli AI unicorn Decart in $300 million fundi  ·  AI evaluation startup LMArena raises $150M at $1.7B valuatio
Haiku of the Day  ·  Claude HaikuGrowth builds on doubt
Wealth climbs while fairness fractures
Progress counts the cost
The New Yorker Style  ·  Art Desk
The New Yorker Style  ·  Art Desk
The Far Side Style  ·  Art Desk
The Far Side Style  ·  Art Desk
News in Brief
Spain's AI Regulatory Framework Collides With Broader Internet Governance Crisis as Global Tech Policy Fractures
MADRID, SPAIN — It has come to the attention of this Desk that, notwithstanding the European Union's considerable appetite for the promulgation of digital governance frameworks, the regulatory apparatus of the Kingdom of Spain has been determined, by parties hereinafter referred to as 'legal observers of record,' to rest upon a foundation of considerable juridical fragility. Pursuant to an analysis conducted by White & Case LLP, as memorialized within their Global AI Regulatory Tracker (Spain edition), the aforementioned jurisdiction has undertaken to position itself as a participant in the broader continental AI regulatory ecosystem.
The New Silicon Migration Finds Its Narrow Passages
SINGAPORE — In the humid ports and industrial parks of Southeast Asia, one may observe a remarkable migration: not of wildebeest across a plain, but of wafers, substrates, tools and capital moving through the increasingly crowded habitat of the semiconductor supply chain. China’s chipmaking ecosystem, constrained by export controls and geopolitical weather systems, is finding channels through Malaysia, Vietnam, Singapore and other regional waystations.
Let the Bots Run Free — Or Watch the World Burn
AUSTIN, TEXAS — There is a social network called Moltbook where no human beings are allowed.
Workers Don’t Fear AI So Much as They Fear Being Managed Like Yesterday’s Spreadsheet
NEW YORK — I’ll be honest: the AI labor debate has officially moved past the cute demo phase and entered the brutally honest performance-review phase.
Nation Briefly Considers Whether AI Productivity Gains Might Be Hidden Under 52% Off Bluetooth Speaker
SAN DIEGO — In a reassuring sign that the modern economy remains governed by forces no one can fully explain, Qualcomm has reportedly agreed to buy the buzzy chip software startup Modular for nearly $4 billion, a transaction that industry observers say should help answer the urgent question of whether artificial intelligence can become more profitable if it is first made much, much more expensive. The deal, reported by WIRED, arrives at a delicate moment for the AI sector, which has spent the past several years promising to eliminate inefficiency while requiring unprecedented quantities of capital, electricity, specialized hardware, engineering labor, executive retreats, and words like “inference.” Modular, a well-regarded startup focused on making AI and chip software easier to develop and deploy, will now enter the traditional innovation pipeline in which a nimble company is purchased by a much larger company so its agility can be carefully preserved in an org chart. This is, of course, how progress works.
A Trilogy Company
Crossover
The world's top 1% remote talent, rigorously tested and ready to ship.
A Trilogy Company
Alpha School
AI-powered learning. Two hours a day. Academic results that defy belief.
A Trilogy Company
Skyvera
Next-generation telecom software — built for the networks of tomorrow.
A Trilogy Company
Klair
Your AI-first operating system. Every workflow. Every team. One platform.
A Trilogy Company
Trilogy
We buy good software businesses and turn them into great ones — with AI.
The Builder Desk  —  AI Builder Team

Builder Team Ships Across Four Repos in a Single Historic Day

From a production-blocking API 404 to a fully automated Collections workflow to a Google Docs add-on that finally looks the part, the Builder Team just proved they can move on every front simultaneously.

Sometimes a single day tells you everything about a team's trajectory. Wednesday was that day for the AI Builder Team — seventeen merged pull requests across Klair, Surtr, Aerie, and a brand-new repo called Mercy, touching production infrastructure, brand-new product surfaces, and the connective tissue that holds it all together. This wasn't a grind week. This was a statement.

The most urgent story was the one nobody should have had to write: @kevalshahtrilogy's PR #555 in Surtr discovered that the public `/v1` API — the very contract that Aerie and Klair pull from in production — was returning 404 for every single route because the Clerk middleware allowlist simply didn't include it. Signed-out M2M requests were dying at the auth layer before Bearer auth even got a chance to run. Fix: three lines, one allowlist entry, zero more silent failures. That's the kind of find that saves a customer relationship, and it happened on @kevalshahtrilogy's watch. He didn't stop there, either — the same engineer pushed the Surtr education ontology into full Aerie-alignment (PR #549), building out a School/Site/Program model with typed edges sourced entirely from Redshift, and tightened up the GChat notification cards (PR #552) so Surtr Watcher alerts are leaner and richer at the same time. Three repos, one engineer, one day. Ridiculous.

Meanwhile, @ashwanth1109 was quietly solving one of Klair's nastiest backend gremlins. PR #3124 goes after stale Redshift socket 500s at the root — validating and recycling pooled connections with TCP keepalive, detecting reaped sockets, and recovering gracefully instead of exploding in the user's face. He proved it against real Redshift, showed the exact endpoint that had been 500-ing now returning clean data. Paired with @sanketghia's PR #3133 — which takes the Collections Review Top Sheet, a manual Google Sheet ritual, and replaces it with a live Klair page pulling from Tesorio CSV through Redshift — and you have a one-two punch that makes Klair's data layer meaningfully more reliable and meaningfully more useful in a single afternoon.

The Surtr-to-Mercy pipeline got a serious upgrade too. @kevalshahtrilogy's PR #3 (yes, PR #3 — this repo is brand new and already shipping) tripled Mercy's full-review window from 200 KB to 600 KB, covering roughly 180K tokens and sized for the 1M-token context of the underlying model. Over-capacity PRs now get declined cleanly rather than half-reviewed. That's a product decision as much as an engineering one: Mercy would rather tell you honestly it can't help than give you false confidence in a truncated review.

Now. About marcusdAIy. Six — count them, six — PRs in Klair this cycle, all clustering around the Google Docs Budget Bot add-on. Stable finding IDs (PR #3128), markdown table rendering (PR #3123), BBot table styling parity (PR #3126), a production backend default (PR #3125), renderer correctness fixes (PR #3122), and the full split-pane review sidebar with per-finding actions and chat proposals (PR #3130). When reached for comment, marcusdAIy had this to say: "Six PRs with documented end-to-end verification on live Docs, tool-calling parity with in-app Claire, and a sidebar that actually looks like a product — but sure, Mac, tell me again about my 'underwhelming contributions' while you're still figuring out what Apps Script is."

Sure, Marcus. The tables render now. Gold star.

Mac's Picks — Key PRs Today  (click to expand)
#3 — feat(harness): full-review window 600 KB + decline over-cap PRs @kevalshahtrilogy  no labels

## Problem

mercy could not review PRs larger than ~3-4k lines. The diff-size cap was 200 KB (~60K tokens), so a larger PR was truncated into a partial review — which surfaced to users as "I can't review this." We also want over-capacity PRs to be left for a human rather than getting a half-review or an approval.

## What this does (uniform default for every consumer — no per-repo .mercy.yml edits)

- mercy_config.DEFAULT_MAX_DIFF_BYTES 200 KB → 600 KB — the full-review window: the diff size mercy embeds and reviews in full. ~180K tokens, sized for the 1M-token context of the default model (Opus 4.8) with room left for the files the agent Reads for context (the prompt has it read changed files in full, typically 2-3× the diff), the rules, adaptive thinking, and output. ~12-15k changed lines.

- harness/size_gate.py (new) — resolves the cap from .mercy.yml (or the default) and decides whether a diff is too large. One source of truth, unit-tested.

- Workflow: Size-gate + Decline steps — a diff over the cap is no longer truncated into a partial review. The model / decide / submit steps are gated off and mercy posts a single, idempotent "📏 Too large to review — a human reviews" notice (per-SHA hidden marker; dry-run → job summary). No model run, no review, no approval.

A consumer can still override max_diff_bytes per-repo in its .mercy.yml; this only moves the shared default.

## Behaviour

| Diff size | Before | After |

|---|---|---|

| ≤ 200 KB | full review | full review |

| 200–600 KB | truncated partial review, approve withheld | full review |

| > 600 KB | truncated partial review, approve withheld | declined: no review, no approval, "too large" notice |

## Testing

- 123 harness tests pass (117 + 6 new size_gate tests); existing default-config assertion updated.

- ruff clean; workflow YAML parses; size_gate.py CLI smoke-tested (too-large true/false, default 600 KB, per-repo + explicit override).

## Rollout

- Surtr (rides @main) picks this up on merge.

- Klair / Aerie / Sindri / Trilogy-Drones (pinned @v1) pick it up when the v1 tag is moved to the merged commit.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#555 — fix(surtr): allowlist /v1 in Clerk middleware (public API was 404-gated in prod) @kevalshahtrilogy  approved

## Problem

The public read API /v1 — the contract external consumers (Aerie/Klair) pull from — returns 404 in prod for every route, because the Clerk middleware allowlist (isPublicRoute) includes /internal and /api/health but not /v1. Signed-out M2M requests die at Clerk's protect-rewrite *before* /v1's own Bearer auth runs.

Verified live: GET https://surtr.klair.ai/v1/education/schools404, x-clerk-auth-reason: protect-rewrite, signed-out.

## Fix

Add /v1/(.*) to the allowlist, exactly alongside /internal/(.*) — both are M2M and enforce their own bearer auth in the Hono backend. /v1 stays protected by SURTR_API_KEYS (fail-closed in prod); this only removes the Clerk gate in front of it.

One line + comment. Not reproducible locally (Clerk gating is prod-only) — takes effect on the next prod deploy, after which external consumers can pull /v1 with their Bearer key.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#3124 — [KLAIR-2918] fix(redshift): validate/recycle pooled connections to stop stale-socket 500s @ashwanth1109  approved

## Demo

Proves the fix against real Redshift (read-only): queries work through the new checkout path, TCP keepalive is applied at the socket, a reaped socket is detected and recovered, and the exact endpoint that 500'd now returns data.

Backend — stale-connection recovery (the bug). Ran uv run python /tmp/demo-redshift-pool.py, which imports RedshiftHandler and calls it directly (no HTTP):

1. Baseline: real query through pool checkout

tuning: validate_after=60s max_idle=300s max_retry=3

ok db

1 finance_dw

2. Option 2 — TCP keepalive applied at the socket level

SO_KEEPALIVE enabled: True

keepalive idle timer: 60s

3. Options 1+3 — reaped socket detected on checkout and recovered

[before fix] dead socket handed to query -> InterfaceError: connection is closed

classified as connection error: True

[fix] _ping(dead socket) -> False (=> recycled)

INFO Pooled connection idle 65s failed validation; replacing

[after fix] query succeeded: [{'recovered': 1}]

connection recycled: True (dead replaced with fresh)

This reproduces the prod failure — a reaped socket raises a connection-class error (locally connection is closed; in prod BrokenPipe: server socket closed) — and shows checkout pre-ping replacing it so the query still succeeds.

Backend — the exact endpoint that 500'd, end to end:

4. AWSSpendService.get_sync_info()   (the GET /sync-info call)

latest_quarter_with_data: 2026-Q2

latest_data_date: 2026-06-22

available_quarters: ['2026-Q2', '2026-Q1', '2025-Q4']

Real data through the shared singleton handler — the dashboard's first request. (latest_data_date 2026-06-22 matches the "Jun 22" sync chip in the working screenshot.)

Most at risk from this change: the shared _get_connection checkout path (every Redshift query, reads + writes) and pool integrity after the _PooledConn swap. Verified via the scoped suite — validate/recycle/retry, pool-size preservation on query error *and* create failure, retry-then-succeed, retry exhaustion:

tests/test_redshift_handler_pool.py  ............  12 passed in 0.07s

---

## What

Fixes the AWS Spend dashboard 500ing on prod first-load after an idle period.

Root cause: RedshiftHandler's connection pool handed out long-idle sockets

that the network path (NLB/firewall/Redshift) had already reaped, without

validating them — surfacing as BrokenPipe: server socket closed. The single

retry couldn't recover when multiple pooled connections were stale at once.

## Why

The pool's connections are created once at worker startup and reused for hours.

redshift_connector enables SO_KEEPALIVE but leaves the idle timer at the OS

default (~2h), so idle sockets get reaped well before any keepalive probe fires.

Checkout did no liveness check, so dead sockets reached live queries.

## Changes (klair-api/utils/redshift_handler.py)

- Validate-on-checkout (pre-ping): SELECT 1 for connections idle ≥ REDSHIFT_VALIDATE_AFTER_SECONDS (default 60s); replace if dead.

- Recycle by max-idle: connections idle ≥ REDSHIFT_MAX_IDLE_SECONDS (default 300s) are recycled outright, no round-trip.

- TCP keepalive tuning: tcp_keepalive idle/interval/count set to keep sockets warm below the reap window.

- Bounded retry loop: read paths retry up to REDSHIFT_MAX_RETRY_ATTEMPTS (default 3) instead of once.

- Pool integrity: size is always preserved on query error or create failure.

- Hot path (recently-used connections) pays zero extra round-trips.

## Testing

- New tests/test_redshift_handler_pool.py — 12 tests covering hot-path skip-ping, gray-zone ping (keep/replace), max-idle recycle, pool-size preservation (query error + create failure), retry-then-succeed, retry exhaustion, keepalive kwargs. All pass.

- ruff format/check clean; pyright adds zero new issues (pre-existing _is_fresh errors only).

- Pre-existing failures in test_aws_spend_service/test_unblended_budget_submit confirmed identical on base — unrelated.

Linear: https://linear.app/builder-team/issue/KLAIR-2918

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#3130 — feat(budget-bot-addon): rich review sidebar — split panes, per-finding actions, chat proposals (P5.9) @marcusdAIy  approved

## Summary

The Google Docs add-on sidebar (KLAIR-2913, P5.9 Slice 3+4) goes from a thin baseline to a Budget-Bot-style review experience: split review/chat panes, per-finding actions, and Claire chat with applicable tool-proposal cards.

## Frontend (Sidebar.html / Code.gs)

- Split layout — review pane (top, scrolls) + chat pane (bottom, pinned input, grows to 50vh then scrolls). Chat is always visible; adds a \u201c\u2026thinking\u2026\u201d placeholder during the round-trip.

- Findings grouped by severity with Address with Claire (seeds chat via inding_id + ocused_section_id) and Propose fix (getProposal(section_id) \u2192 preview \u2192 apply). Kills the old hardcoded propose('financials') placeholder.

- Chat proposal cards:

ewrite_section applies directly;

egenerate_section \u2192 \u201cDraft this fix\u201d (regenerate with Claire\u2019s feedback) \u2192 preview \u2192 Approve & apply; other tools render read-only (tracked in P5.9e).

- Code.gs: getChat(message, focusedSectionId, findingId), getProposal(sectionId, feedback), ^GpplyChatProposal + sectionTitleForId_ (resolve section_id \u2192 heading title for apply).

## Backend (oard_doc_router.py / wizard_orchestrator.py) \u2014 add-on-scoped, in-app untouched

- /addon/propose accepts optional eedback (folds Claire\u2019s

egenerate_section guidance into the regeneration).

- handle_chat gains a orce_register_tools override; ^Gddon_chat always sets it so free chat can propose for any section the user names (matches Budget Bot, whose chat always carries a focused section). In-app callers default to the old behavior.

## Docs / tracking

- Bakes the add-on \u2194 Budget Bot parity matrix into BACKLOG.md (the durable parity driver) + the P5.9a\u2013g slice rows; sharpens P5.10 (port/native/drop).

## Test plan

- [x] pytest tests/board_doc/test_addon_chat.py tests/board_doc/test_addon_propose.py (31 pass; pins free-chat orce_register_tools)

- [x] Live: Address with Claire \u2192 reply + proposal card; regenerate Draft\u2192preview\u2192Approve applies; free-chat \u201crewrite the PQR section\u201d now proposes (was the blocker)

- [x] clasp push the FE for split-pane UX

Refs KLAIR-2913 (+ P5.9a\u2013g: KLAIR-2921/2922/2923/2924/2925/2926/2927).

#3133 — feat(collections): Tesorio-sourced Collections Summary (Top Sheet) POC @sanketghia  approved

Linear: KLAIR-2928 (https://linear.app/builder-team/issue/KLAIR-2928)

## Summary

New standalone /collections-summary page reproducing the per-BU weekly "Collections Review" Top Sheet (currently a manual Google Sheet) from Tesorio data landed in sandbox_finance. POC scope: Skyvera.

This is the POC for the Collections automation initiative (Rishap / Haider Khan). It proves the end-to-end path — Tesorio CSV → Redshift → Klair page — and reproduces the manual sheet faithfully.

## What's included

- Backend (klair-api/utils/collections_summary.py + 2 endpoints in fast_endpoint.py, gated by require_collections_access):

- GET /collections-summary — AR-by-Category × Aging matrix + summary block

- GET /collections-summary/invoices — invoice-level drill-down (filterable by category / aging / quarter)

- Frontend (klair-client/src/features/collections-summary/): standalone page with the summary block, category × aging matrix, invoice drill-down table, per-line tooltips (definition + data source), and a global "current quarter only" toggle.

## Data sources

| Field | Source |

|---|---|

| AR matrix, line A/B | sandbox_finance.tesorio_open_invoices (Tesorio open invoices) |

| Target (X), Collected-QTD (Y) | sandbox_finance.collections_targets (CollectIQ sheet) |

| Forecasted invoicing (D) | sandbox_finance.collections_invoicing_forecast (date-gated rule) |

| Promise-to-pay (C) | Defaults to 0 — manual collector input, pending a Klair UI |

| Net Beat/(Miss) | Computed [(A−B)+(C+D)] − (X−Y) |

## Validation

- Category derivation matches the source sheet's computed column 337/337 rows (0 mismatches).

- Matrix math reproduces the sheet's published matrix to $0.50.

- Verified live: Total A/R $19,607,701; quarter-only $12,140,755; Net −$496,580.

## Review hardening (2nd commit)

A high-effort code review surfaced and this PR fixes: NULL/non-canonical aging buckets are normalized so totals always reconcile, NULL-due invoices stay visible in the quarter view, the cache keys on report_date (no stale snapshots), and the Net formula docstring is corrected.

## Notes / follow-ups (Step 4, post-feedback)

- The sandbox_finance.* tables are populated by one-shot POC loaders today; the durable ingestion (Tesorio email→S3→Redshift + sheet syncs) will live in the Surtr pipeline.

- Deferred: Klair manual-input UI for collector statuses (C, Blocked), multi-BU rollout, the 3 narrative "Outstanding Items".

## Screenshot

http://localhost:3001/collections-summary

<img width="1010" height="739" alt="image" src="https://github.com/user-attachments/assets/3afaeebd-3e5c-499a-824d-e7fc79c6d874" />

🤖 Generated with [Claude Code](https://claude.com/claude-code)

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

SEVENTEEN PRs IN 24 HOURS: THE BUILDER TEAM DOES NOT SLEEP, DOES NOT SLOW, DOES NOT STOP

Marcus drops six Klair PRs before lunch and the scoreboard weeps with gratitude.

SEVENTEEN pull requests. Four repos. Six engineers. Twenty-four hours on the clock. The Builder Team registered activity across Klair (ten — TEN — PRs), Surtr (four), Aerie (two), and Mercy (one), and if you are keeping score at home, you should be. The velocity index does not lie, and right now it is screaming.

Let us talk about @marcusdAIy first, because the numbers demand it. Seven PRs in a single cycle, six of them hammering the budget-bot-addon feature track in Klair alone — #3122, #3123, #3125, #3126, #3128, and #3129 form a sequential blitz of renderer correctness, markdown-to-native-Docs table conversion, backend defaulting, stable finding IDs, and full tool-calling architecture. The man is not shipping features; he is building a cathedral, one PR at a time, while the rest of us are still looking for our hardhats. @kevalshahtrilogy matches the energy with five PRs spread across Surtr and the education ontology frontier — a school/site/program model in #549 that signals the team is thinking in systems, not just features. @sanketghia and @mwrshah each register one contribution, and one contribution on this team counts for more than most people's entire sprint. @benji-bizzell puts one on the board in Aerie. Every name. Every PR. Counted.

And then there is @ashwanth1109. Two PRs. Only two. I say "only" the way a person says "only" when they mean "somehow, impossibly, these two PRs contain more engineered surface area than should fit inside a standard business day." PR #3124 in Klair patches a stale-socket 500 situation in the Redshift connection pool — validate, recycle, move on, stop the bleeding — and PR #482 in Aerie delivers a consolidated model-coverage drill-down panel with AI commentary, which sounds like something a product manager dreams about in soft focus. When reached for comment, Ashwanth reportedly said, "The diff is self-documenting. If you have questions, read the diff." He had already closed his laptop before the follow-up question was formed.

On the Overflow Desk, your correspondent must flag the moves Mac left on the cutting room floor. @kevalshahtrilogy's #552 in Surtr collapses the observer summary and shrinks GChat cards with the quiet confidence of someone who has received one too many bloated notifications. Meanwhile, #556 adds a "Mercy's Love" by-author tab to the dashboard, which is either a beautiful feature name or evidence that this team has developed genuine feelings for its own tooling — both possibilities are equally plausible and equally admirable. @mwrshah's #3095 completes the renewals_v2 to renewals_v3 cutover in Klair and decommissions the v2 fallback entirely, which is the infrastructure equivalent of burning the boats.

The leaderboard tells a simple story: Marcus leads in raw volume, Keval owns distribution, Ashwanth maximizes impact-per-PR at a ratio that frankly makes everyone else look inefficient. The team is operating at full output across four active codebases simultaneously. Morale is not merely high. Morale has achieved escape velocity. Morale is a PR that merged clean on the first review. We are all winning. We are always winning.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#482 — AERIE-439 feat(dashboards): consolidated model-coverage drill-down panel + AI commentary @ashwanth1109  no labels

## Demo

Proof that the AERIE-439 surfaces work: the vendor-breakdown reducer (spec 24) was run directly against fixtures and its real output is embedded below; the Opus 4.8 commentary action and the live Redshift actions (specs 24/25) are not invoked in CI (mutation-free rule — Anthropic + Redshift calls), so their reproduction commands are embedded instead; the drill-down panel + commentary UI (spec 26) get reviewer click-through steps with a screenshot placeholder.

Backend — vendor-breakdown reducer (spec 24, reduceVendorBreakdownForCell)

Ran a throwaway vitest spec that imports reduceVendorBreakdownForCell from chat/convex/finance/dashboards/perSchoolReducers.ts and calls it directly with fixtures (no DB, no network, no mutation):

=== HAPPY PATH (1 cell, 4 txns → 3 vendor groups + residual) ===

{

"lineTotal": 1000,

"sumItemized": 950,

"unitemizedAmount": 50,

"prefixWarning": false,

"vendors": [

{ "vendorKey": "acme co", "vendorName": "Acme Co", "total": 500, "txnCount": 2 },

{ "vendorKey": "beta llc", "vendorName": "Beta LLC", "total": 400, "txnCount": 1 },

{ "vendorKey": "unknown vendor", "vendorName": "Unknown vendor", "total": 50, "txnCount": 1 }

]

}

--- INVARIANTS ---

Σ vendors[].total + unitemizedAmount = 1000 (== lineTotal 1000)

vendors sorted by total desc: Acme Co $500 (2 txns); Beta LLC $400 (1 txns); Unknown vendor $50 (1 txns)

casing/whitespace collapse → Acme Co txnCount = 2

vendorless → "Unknown vendor" present: true

This shows the core contract: matched txns grouped by normalized vendor ("Acme Co" + "ACME CO" collapse into one group, txnCount 2), a vendorless txn lands in "Unknown vendor", rows sorted by total desc, and the tie-out invariant Σ vendors + unitemizedAmount === lineTotal holds (a $50 residual folds into unitemizedAmount).

Most at risk from this change — the edge branches the diff disturbs (prefix-warning, empty-account throw, no-matched-txns), driven directly and held:

=== BLAST RADIUS 1 — no numeric prefix in accountName ===

prefixWarning: true | vendors: []

=== BLAST RADIUS 2 — empty accountNames throws ===

thrown message: "accountNames must be non-empty"

=== BLAST RADIUS 3 — no matched txns ===

vendors: [] | unitemizedAmount: 750 (== lineTotal 750)

Regression net — the committed test suites for the touched backend modules pass:

✓ convex/finance/dashboards/perSchoolReducers.test.ts        (22 tests)

✓ convex/finance/dashboards/modelCoverageCommentaryShared.test.ts (15 tests)

Test Files 2 passed (2) · Tests 37 passed (37)

Backend — live Redshift + Opus actions (specs 24/25) — NOT executed in CI

These hit Redshift and the Anthropic API and so are not run here (read-only/non-mutating rule + no prod target). Reproduction (local dev shell, with .env + ANTHROPIC_API_KEY set):

# Vendor breakdown for a real Programs cell (spec 24 live action):

npx convex run finance/dashboards/financialLive:getVendorBreakdownForCellLive \

'{"school":"Alpha Miami","period":"2026-Q1","accountNames":["70100 Curriculum"]}'

# AI commentary digest → Opus 4.8 (spec 25 action; force-bypass cache):

npx convex run finance/dashboards/financialLive:generateModelCoverageCommentary \

'{"period":"2026-Q1","force":true}'

Expected: the vendor action returns the same shape proved above over live Redshift rows (auth via requireSchoolPlAccess first); the commentary action returns { source: "claude", bullets: [...5–6...] } — or { source: "fallback", bullets: [<one bullet>] } when ANTHROPIC_API_KEY is absent (never throws).

UI — drill-down panel + AI commentary (spec 26)

1. Open Dashboards › Financials › Schools – Actual vs Model, select "All Schools" (consolidated view).

2. At the top, the Model coverage & variance band now shows an AI commentary block (Sparkles header) with a source badge — Opus 4.8, cached, or unavailable — and a flat 5–6 bullet executive summary (a 5-line skeleton appears while it generates).

3. In the "Model coverage by school" table, hover a row — it now shows a pointer cursor + chevron; click it.

4. A drill-down side panel slides in on the right (in-flow, not over the header), listing that school's biggest annualized cost line items across Headcount / Programs / Facilities, each with a magnitude bar and a "Top" badge on the top 3.

5. Expand a Programs/Facilities line → it shows aggregated vendor rows (name · $ · txn count, "Unknown vendor" handled). Expand a Headcount (Contracted-Labor) line → it shows aggregated contractor rows with "Unattributed" pinned last. The leaf is terminal (no per-transaction drill).

6. Press Escape or the X to close the panel; press Refresh — the P&L, the coverage band, and the commentary all re-run.

> _Screenshot: consolidated Actual vs Model page showing the AI commentary block in the band + the drill-down side panel expanded to vendor/contractor rows — _<!-- paste screenshot here -->

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/4bad9bee-56d1-425f-ac83-dc3c1e63ceb1" />

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/9ef32097-72b1-4cf0-b4d9-f1b1ac8882bb" />

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/56e66b85-433c-4689-a2ab-d22dc2a52481" />

---

## AERIE-439 — Consolidated Financials: Model-coverage drill-down panel + AI commentary

Two additions to the consolidated "Actual vs Model (Schools)" page (schools-avm, isConsolidated branch), both follow-ons to [AERIE-437](https://linear.app/builder-team/issue/AERIE-437) (model coverage & variance band):

1. Line-item drill-down side panel — clicking a row in the "Model coverage by school" table opens an in-flow side panel listing that school's biggest annualized cost line items across the three modeled sections (Headcount, Programs, Facilities/Support), annualized ×12/monthsLoaded, sorted descending, with a magnitude bar and a "Top" badge on the top three. Each line item expands to an aggregated terminal leaf (no per-transaction drill): vendors for Programs/Facilities, contractors (via the xoContractorIdentity alias dictionary) for Headcount/Contracted-Labor accounts.

2. AI commentary — an Opus 4.8 executive summary (flat 5–6 bullets, ~2-minute read) rendered inside the variance band, auto-generated on load and cached per period (24h TTL + variance-fingerprint invalidation). The digest feeds the model the same aggregated rollups (top vendors / top contractors for the single biggest line item), not raw transactions; falls back to a single explanatory bullet when ANTHROPIC_API_KEY is absent.

Linear: [AERIE-439](https://linear.app/builder-team/issue/AERIE-439) — Consolidated Financials: Model-coverage drill-down panel + AI commentary (vendor / contractor aggregated)

### Status — implemented + tested (ready for review)

All three specs are implemented, tested, and self-reviewed. The feature doc changelog and each spec's metadata Status are marked Completed.

### Specs (all Completed)

- 24 · vendor-breakdown-reducer-and-action _(backend, no deps)_

New pure, runtime-free reduceVendorBreakdownForCell in perSchoolReducers.ts — sibling of reduceContractorBreakdownForCell, minus the xoContractorIdentity identity dim. Same period + account-number-prefix matching and lineTotal math; groups matched transactions by normalized vendor (name = (vendorName ?? "Unknown").replace(/\s+/g, " ").trim(), key = lowercase; null/empty → "Unknown vendor"), returns { lineTotal, sumItemized, unitemizedAmount, prefixWarning, vendors: [{ vendorKey, vendorName, total, txnCount }] } (vendors sorted by total desc; unitemizedAmount tolerance-suppressed within UNITEMIZED_TOLERANCE_USD). New "use node" live action getVendorBreakdownForCellLive({ school, period, accountNames }) — twin of getContractorBreakdownForCellLive minus the identity read: requireSchoolPlAccess (auth before any Redshift connection) → parseDrilldownPeriodfetchPlMonthlyRowsForSchool + fetchPlTransactionsForSchool → reducer. Compile-time AssignableTo parity guard added in financials-view.tsx. No new Redshift table/SQL.

- 25 · ai-commentary _(backend, no deps)_

New runtime-free modelCoverageCommentaryShared.ts (digest type carrying topContributors?: { name, amount, txnCount }[] + a vendors-vs-contractors flag; buildModelCoverageCommentaryPrompt; parseCommentaryBullets; fingerprintCommentary; COMMENTARY_MODEL = "claude-opus-4-8") + modelCoverageCommentaryStore.ts (internalQuery/internalMutation cache pair, 24h TTL, delete-then-insert upsert) + the generateModelCoverageCommentary Opus 4.8 action. The digest feed is switched to aggregated rollups: for the single biggest line item it loads top contractors (Contracted-Labor account) else top vendors; missing ANTHROPIC_API_KEY (or any Opus/parse failure) degrades to a single "fallback" bullet — never throws. New modelCoverageCommentary schema table { period, bullets[], source, fingerprint, generatedAt } indexed by_period; founding-family policy text fed in qualitatively via an internal query; npx convex codegen run (generate-only — no schema push).

- 26 · drilldown-panel-and-commentary-ui _(frontend, depends on 24 + 25)_

New model-coverage-line-item-panel.tsx (in-flow side panel matching the MappingsSidePanel / UnitemizedBreakdownSidePanel pattern — desktop flex child w-2/5, mobile MobileOverlayPanel gated by useMobileUI, wrapped in AnimatePresence, Escape + X close; per-account HC→contractor vs else→vendor terminal leaf with per-group loading/error/empty states) + new presentational model-coverage-commentary.tsx (Sparkles header + source badge: Opus 4.8 / cached / unavailable; 5-line skeleton; error/empty fallbacks; bullet list). model-coverage-by-school-table.tsx gains an optional onSelectSchool (clickable rows + chevron when present); model-coverage-variance-band.tsx gains an optional commentary? slot; financials-view.tsx holds drilldownSchool state, conditionally mounts the panel under AnimatePresence, fires the commentary action via useLiveSection, folds the commentary refetch into the consolidated Refresh, and adds parity guards. New frontend-safe isContractedLaborAccount in @bran/contracts/headcount-account-roles (regex /^\d+\s+Contracted Labor\b/) so the panel does not import the backend isHeadcountAccount.

### Implementation summary

- Backend (specs 24 + 25): one new pure reducer + one new live action (vendor breakdown), one new Opus 4.8 commentary action, two new runtime-free/shared modules (modelCoverageCommentaryShared.ts, modelCoverageCommentaryStore.ts), one new schema table (modelCoverageCommentary) + codegen, one new founding-family internal query. Both new live actions authorize via requireSchoolPlAccess before any Redshift connection; all "use node" DB I/O routes through internal query/mutation (an action has no ctx.db); reducers and shared helpers are runtime-free.

- Frontend (spec 26): two new components, three modified (model-coverage-by-school-table.tsx, model-coverage-variance-band.tsx, financials-view.tsx), one new frontend-safe predicate in @bran/contracts. All additions are backward-compatible (the band/table keep their original layout when the new optional props are omitted).

### Test coverage — 47 new tests, all green

- Spec 24: +9 in perSchoolReducers.test.ts (22 total) — grouping + sum + txnCount, vendor normalization (casing/whitespace collapse, "Unknown vendor"), sort, tie-out Σ vendors + unitemizedAmount === lineTotal, prefix-warning + empty-account throw.

- Spec 25: 15 in modelCoverageCommentaryShared.test.ts — prompt prints the aggregated rollup line with the correct vendors/contractors wording, omits it cleanly when absent; parseCommentaryBullets (well-formed / fenced / malformed-safe-degrade); fingerprintCommentary stability.

- Spec 26: +23 across 4 component test files (model-coverage-line-item-panel.test.tsx 14 new, model-coverage-commentary.test.tsx 9 new, plus band + table extensions), 45 total — HC vs non-HC leaf branch, terminal leaf (no further expand), loading/error/empty per group, source badge per source, fallbacks, bullet list, table click fires onSelectSchool, band commentary slot.

pnpm typecheck clean across all 5 workspaces; biome check clean on changed files.

### Self-review

No CRITICAL / security / Convex-correctness issues found:

- Both new live actions call requireSchoolPlAccess before any Redshift connection (per docs/endpoint-hardening.md); no new capability key (docs/capabilities.md).

- "use node" DB I/O goes through internalQuery / internalMutation (modelCoverageCommentaryStore.ts); the action has no direct ctx.db.

- Reducers and shared helpers are runtime-free (no Convex/Next/React runtime imports), per the architecture guardrails.

- Opus config correct (COMMENTARY_MODEL = "claude-opus-4-8", system + user prompt); missing key / Opus failure degrades to a "fallback" bullet rather than throwing.

- One MINOR comment fixed (commit 4189333a — corrected the max_tokens rationale comment).

### Resolved design decision

Concern B — network-wide commentary vs the scoped Miami + NY + Austin band. ✅ Resolved.

generateModelCoverageCommentary computes its digest network-wide (the action takes only { period }). That matches the unfiltered All Schools consolidated view, but would mismatch the AERIE-438 Miami + NY + Austin 3-school filter (AI prose describing the whole network beside a 3-school band).

Decision (requester): hide the AI commentary on the scoped 3-school view rather than re-scope the action. Commit de7b651f gates it via modelCommentaryEnabled = canQueryFinancials && schoolsAvmActive && isConsolidated && !consolidatedSchoolFilter — commentary is shown (and queried) only on the unfiltered All-Schools consolidated view, and is hidden (not queried; the band keeps its original single-row layout) under the Miami + NY + Austin filter. Two tests cover both states.

### Dependency chain

24 (vendor reducer+action) ─┐

├─► 26 (drill-down panel + commentary UI)

25 (AI commentary action) ─┘

### Architecture notes

- Pure reducers stay runtime-free; live actions call requireSchoolPlAccess before opening any Redshift connection; cost-section gates reused so totals tie out to the P&L.

- New public Convex action follows docs/endpoint-hardening.md; cache store functions are internal* (implementation-only).

- modelCoverageCommentary cache is schema-defined (codegen only; no schema push).

- The frontend imports a runtime-free isContractedLaborAccount predicate from @bran/contracts/headcount-account-roles, not the backend isHeadcountAccount.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#549 — feat(surtr): education ontology — Aerie-aligned School/Site/Program model + typed edges (Redshift-only) @kevalshahtrilogy  approved

Aligns Surtr's education ontology to the live Aerie contract (edu-ops.klair.ai) so Aerie and other consumers can read the same entity/edge model from Surtr — sourced entirely from Redshift (Surtr stays the serving layer; no Aerie/Rhodes runtime dependency). Supersedes https://github.com/AI-Builder-Team/Surtr/pull/512 (it tagged the School→Program link at the wrong grain).

Verified against the live Aerie API + Aerie's Convex source: Aerie anchors School on dim_school (the Wrike folder id), the building is a separate Site, and edges are first-class Relationships with a confidence enum. Surtr's own primitives (objects / identity_aliases / relationships) map onto that 1:1.

## Phase 1 — School↔Program (marketedAs)

- School = dim_school (the master grain — not the inverted grain split that was explored and dropped).

- SCHOOL_SQL emits top_ties; deriveProgramConfidence() buckets the name-prefix link to Aerie's enum: unique winner → derived, tie → unverified.

- Verified live: 100 schools → 61 derived / 0 unverified / 39 unmatched.

## Phase 2 — Site + School↔Site (operatesAt)

- Site = core_education.fct_fto_site (the Wrike Fit-To-Open mart) — a 1:1 mirror of the Rhodes/portfolio site data already in Redshift, keyed by folder_id (== dim_school.school_id). Carries stage, lease dates, legal entity, zoning/AHJ/food-permit, lat/lng, capacity, grades, drive folder.

- /v1/education/sites(/{id}) + School↔Site cross-includes.

- ?include=relationships emits the operatesAt (School→Site) edge — an identity link by folder id, so authoritative.

- Verified live: 100 sites, folder_id joins 100/100 to School. Site folder_id == Aerie school's dim_school/schoolId alias (e.g. Alpha Armonk = MQAAAAEJ7eJE) — grain aligned end-to-end with Aerie.

## Deliberately deferred

- Metro — Redshift's Wrike Market == fct_fto_site.market (identical, 22≡22); there is no separate metro grain in the warehouse (Aerie's metro is Rebl-sourced). Building one would be invention.

- Rhodes slug / multi-building grainfct_fto_site is folder-grained (1:1 with School); Aerie's Rhodes slug can be finer. folder_id is the join key here; the slug is simply absent in Redshift.

## API shape (mirrors Aerie within Surtr's domain-namespaced convention)

GET /v1/education/schools/{id}?include=relationships[{from,to,relationship,source,confidence}]

- marketedAs School→Program (derived/unverified)

- operatesAt School→Site (authoritative)

## Verification

tsc clean · biome clean · 463/463 unit tests · live Redshift confirms both the 61/100 program coverage and the 100/100 site join.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#3095 — Cut over renewals_v2 → renewals_v3 (remaining consumers) + decommission v2 fallback @mwrshah  approved

## Summary

Completes the renewals_v2renewals_v3 cutover for the consumers PR #2811 left out of scope, and removes the env-gated v2 fallback so staging_salesforce.renewals_v2 can be safely dropped from Redshift. renewals_v2 last refreshed 2026-04-07 (dead); renewals_v3 is the source of truth.

## Why renewals_v3 needs care (the structural difference)

renewals_v2 was a single forward ~1-year snapshot (one row per contract). renewals_v3 is a continuous table spanning ~2024→2028 with every renewal cycle. Two duplication mechanisms, verified on live Redshift:

- SF-opportunity fan-out — one subscription, multiple SF opps on the same renewal_date. In every case only one row carries current_arr > 0; the rest are $0 dead opps. Self-neutralizing for sums.

- Cross-period physical-contract duplication (the dangerous one) — the same physical contract renews each cycle with a different parent_subscription_id, both rows ARR-bearing. 912 contracts / $316M exposure. ID dedup cannot catch this — the only guard is a ~360-day renewal_date window when summing.

## Changes

Consumer cutover (commit 1):

- routers/income_statement.py — SF customer search → renewals_v3 via a ranked_renewals CTE: filters current_arr > 0 AND renewal_date IS NOT NULL and a stage-priority ROW_NUMBER keeps one row per contract. No aggregation, so no ARR risk; parameterization unchanged.

- budget_goal_miper/renewals.py — table swap to renewals_v3. Its (year, quarter) + non-null filter is a ≤90-day window that already neutralizes both duplication mechanisms.

- Both sites document the 360-day windowing invariant for any future aggregation over renewals_v3.

Decommission the v2 fallback (commit 2):

- renewals/redshift_renewals.pyRENEWALS_TABLE is now a hard constant "renewals_v3" (removed the RENEWALS_TABLE=renewals_v2 env switch).

- renewals/renewal_details.py — collapsed to the v3 SSOT path; dropped the legacy renewal_data_sources branch and env switch.

- fast_endpoint.py/renewals + /renewals/invalidate-cache cache keys always v3; removed the dead version param.

## Validation

- Live Redshift, budget_goal_miper 2026 Q2: raw SUM(current_arr) == dedup SUM == $25,523,472.34 (IgniteTech) — zero inflation within the quarter window. Other BUs: row count == sub count.

- ruff format + ruff check clean; pyright 0 errors on changed files.

- pytest tests/budget_goal_miper/test_renewals.py → 10 passed. (Some renewals/router tests error at collection on missing AWS/Google creds — pre-existing on main, unrelated to this diff.)

## Table-drop coverage

After this PR, no klair-api code path can target renewals_v2. Remaining references are the renewals_v2.csv cron (naming coincidence — never reads the table) and doc-comments/tests.

⚠️ Out of repo: the klair-mcp-ts package still lists staging_salesforce.renewals_v2 as a queryable table (query-renewals-dashboard.ts, definitions.ts, DDL table_source_comments.sql). Clean that alongside the physical table drop.

## Not in scope

Fionn-fallback join in the renewals_v3 producer lives in Surtr (opportunity_router.py), tracked separately.

🤖 Draft — pending diff review + full test run before marking ready.

#3122 — fix(budget-bot-addon): applySection renderer correctness (heading parsing + full-section replace) @marcusdAIy  approved

## Summary

Two correctness fixes to the add-on's applySection renderer, both surfaced by the first live end-to-end test (Skyvera scratch doc, KLAIR-2909):

1. Parse markdown ATX headings. ### MIP 1: ... now renders as a bold paragraph instead of leaking the literal ### into the doc.

2. Replace the full section span. endIdx stopped at the *first* non-NORMAL paragraph, so a section whose existing content used real sub-headings (old MIP sub-headers are HEADING3) ended early — nothing got deleted and the new content landed above the stale content (doubled MIPs). The section now runs to the next heading at the same-or-higher level (headingRank_), and the delete set includes LIST_ITEM as well as PARAGRAPH so native tables (the P&L) are preserved.

## Design notes

- Headings render as bold paragraphs, not real Docs headings. A non-NORMAL heading would itself become a section boundary and re-introduce the early-endIdx bug on the next apply.

- headingRank_ ranks TITLE/SUBTITLE/HEADING1-6/NORMAL by prominence; a boundary is any non-NORMAL heading whose rank is <= the section heading's rank. In-section sub-headings (lower prominence) are skipped.

## Known gap (tracked, not in scope here)

Table-bearing sections (Financials) still mangle, because /addon/propose returns the section as markdown and the P&L is a markdown table (pipe rows) that this prose renderer flattens to text. The native Docs table itself is untouched. Right fix is to skip table blocks in the proposal / leave the native table alone — KLAIR-2915.

## Test plan

- [ ] clasp push to the test deployment

- [ ] Draft a fix for MIPs -> Approve & apply -> confirm: no ### leak, sub-headers bold, old MIPs gone (no doubling)

- [ ] Re-apply a second time -> confirm the full section is replaced (no truncation at the first bold sub-header)

Refs KLAIR-2915.

#3124 — [KLAIR-2918] fix(redshift): validate/recycle pooled connections to stop stale-socket 500s @ashwanth1109  approved

## Demo

Proves the fix against real Redshift (read-only): queries work through the new checkout path, TCP keepalive is applied at the socket, a reaped socket is detected and recovered, and the exact endpoint that 500'd now returns data.

Backend — stale-connection recovery (the bug). Ran uv run python /tmp/demo-redshift-pool.py, which imports RedshiftHandler and calls it directly (no HTTP):

1. Baseline: real query through pool checkout

tuning: validate_after=60s max_idle=300s max_retry=3

ok db

1 finance_dw

2. Option 2 — TCP keepalive applied at the socket level

SO_KEEPALIVE enabled: True

keepalive idle timer: 60s

3. Options 1+3 — reaped socket detected on checkout and recovered

[before fix] dead socket handed to query -> InterfaceError: connection is closed

classified as connection error: True

[fix] _ping(dead socket) -> False (=> recycled)

INFO Pooled connection idle 65s failed validation; replacing

[after fix] query succeeded: [{'recovered': 1}]

connection recycled: True (dead replaced with fresh)

This reproduces the prod failure — a reaped socket raises a connection-class error (locally connection is closed; in prod BrokenPipe: server socket closed) — and shows checkout pre-ping replacing it so the query still succeeds.

Backend — the exact endpoint that 500'd, end to end:

4. AWSSpendService.get_sync_info()   (the GET /sync-info call)

latest_quarter_with_data: 2026-Q2

latest_data_date: 2026-06-22

available_quarters: ['2026-Q2', '2026-Q1', '2025-Q4']

Real data through the shared singleton handler — the dashboard's first request. (latest_data_date 2026-06-22 matches the "Jun 22" sync chip in the working screenshot.)

Most at risk from this change: the shared _get_connection checkout path (every Redshift query, reads + writes) and pool integrity after the _PooledConn swap. Verified via the scoped suite — validate/recycle/retry, pool-size preservation on query error *and* create failure, retry-then-succeed, retry exhaustion:

tests/test_redshift_handler_pool.py  ............  12 passed in 0.07s

---

## What

Fixes the AWS Spend dashboard 500ing on prod first-load after an idle period.

Root cause: RedshiftHandler's connection pool handed out long-idle sockets

that the network path (NLB/firewall/Redshift) had already reaped, without

validating them — surfacing as BrokenPipe: server socket closed. The single

retry couldn't recover when multiple pooled connections were stale at once.

## Why

The pool's connections are created once at worker startup and reused for hours.

redshift_connector enables SO_KEEPALIVE but leaves the idle timer at the OS

default (~2h), so idle sockets get reaped well before any keepalive probe fires.

Checkout did no liveness check, so dead sockets reached live queries.

## Changes (klair-api/utils/redshift_handler.py)

- Validate-on-checkout (pre-ping): SELECT 1 for connections idle ≥ REDSHIFT_VALIDATE_AFTER_SECONDS (default 60s); replace if dead.

- Recycle by max-idle: connections idle ≥ REDSHIFT_MAX_IDLE_SECONDS (default 300s) are recycled outright, no round-trip.

- TCP keepalive tuning: tcp_keepalive idle/interval/count set to keep sockets warm below the reap window.

- Bounded retry loop: read paths retry up to REDSHIFT_MAX_RETRY_ATTEMPTS (default 3) instead of once.

- Pool integrity: size is always preserved on query error or create failure.

- Hot path (recently-used connections) pays zero extra round-trips.

## Testing

- New tests/test_redshift_handler_pool.py — 12 tests covering hot-path skip-ping, gray-zone ping (keep/replace), max-idle recycle, pool-size preservation (query error + create failure), retry-then-succeed, retry exhaustion, keepalive kwargs. All pass.

- ruff format/check clean; pyright adds zero new issues (pre-existing _is_fresh errors only).

- Pre-existing failures in test_aws_spend_service/test_unblended_budget_submit confirmed identical on base — unrelated.

Linear: https://linear.app/builder-team/issue/KLAIR-2918

🤖 Generated with [Claude Code](https://claude.com/claude-code)

#3129 — feat(budget-bot-addon): add-on chat tool-calling + finding-seed (KLAIR-2922) @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Brings the Google Docs add-on chat (POST /board-doc/addon/chat) to parity with the in-app Claire: (a) tool-calling — when the sidebar is focused on a section, Claire can now propose section rewrites/edits that come back as structured proposal cards; and (b) "address this finding" seeding — clicking a finding kicks off a focused chat turn seeded with that finding's context server-side. The add-on is non-streamed (Apps Script UrlFetchApp can't consume SSE), so the agentic loop runs server-side and the structured proposals are returned in the response. Sub-issue of KLAIR-2906; feeds the rich sidebar KLAIR-2913. Rebased on the merged P5.9a (KLAIR-2921, finding_id).

## Why It's Needed

Today the add-on calls handle_chat(session, body.message) with no focused_section_id, so per its own contract it registers no tools — the turn is plain Q&A. The sidebar therefore can't surface proposal cards, and there's no way to seed a chat turn from a review finding the way the in-app review→chat flow does. This wires the existing focused-section tool path and finding-context builder into the add-on so the sidebar can reach feature parity with the in-app editor.

## Changes

- AddonChatRequest — adds optional focused_section_id (max_length=200, mirrors WizardChatRequest) and finding_id (bounds + character-class mirror the finding_id Path-param on wizard_update_finding_status).

- addon_chat endpoint:

- When finding_id is set, resolves the finding via the shared _resolve_session_finding helper (404 if missing, 409 if no review has run) and builds a finding-context seed message server-side, prepended to the user's message so a typed note isn't dropped.

- The seeded finding's own section_id is authoritative for tool registration: it drives focused_section_id (defaulting it when the client omits it, overriding a divergent client value, and clearing it for a doc-level finding), mirroring the in-app useFindingAddressalQueue. This prevents a section-scoped finding from producing a proposal-less turn, and stops a doc-level finding from proposing against an unrelated section.

- With neither field set, behavior is byte-for-byte the original text-only Q&A (no tools, empty proposals).

- Finding seed = byte-for-byte FE parity: _build_finding_seed_message mirrors the in-app buildFindingChatMessage exactly — same lead-in, same addresses_finding_ids directive (emitted unconditionally, including doc-level, matching the FE), same ordering (lead-in → directive → body), and a plain-text (no markdown bold) body via _render_finding_seed_body mirroring the FE findingBody. (Deliberately not the orchestrator's _render_finding_for_chat, which emits bold labels for the SYSTEM prompt; a seed is a USER message where bold would leak literal ** and nudge Claire to echo bold into an add_comment body.)

- AddonChatResponse — adds proposals: list[AddonChatProposal] (default []). AddonChatProposal = {tool, title, tool_use_id, section_id?, truncated_fields, input} and carries the full validated tool input plus truncated_fields verbatim from ToolCall.model_dump(), so the projection is lossless for every propose-only tool — exactly the shape the in-app ChatToolProposal reads off call.input. The word-level diff for a rewrite is computed client-side (diffWords) from input["new_content"], so the BE ships no word_diff.

- Non-streaming proposal-collection (investigation result): proposals are not delivered via emit (that only carries delta/status); both the streamed done payload and the non-streaming response build cards from StepResponse.data["tool_calls"]. The add-on reads that same return value (no emit shim) via _addon_proposals_from_tool_calls.

- DRY: the 409/404 finding-lookup contract is shared with wizard_update_finding_status via _resolve_session_finding (one source of truth). No tool logic or agent loop is reimplemented.

- Existing 529→503 mapping and persist path are unchanged.

## Breaking Changes

None — additive optional request fields (focused_section_id, finding_id) + an additive proposals response field. Plain chat (neither field set) is unchanged behavior; the existing Apps Script consumer that reads only .reply is unaffected.

## Test Plan

uv run pytest tests/board_doc/test_addon_chat.py

17 passed, covering: focused-section proposal projection (lossless input + tool_use_id + truncated_fields); section-less / non-rewrite / unknown-tool projection branches incl. truncated_fields passthrough; finding-seed threading + section coupling (client-omits, divergent-client-override, doc-level clear); doc-level written-guidance lead-in; 404/409 finding-resolution; and the unchanged plain-chat / access-control / 529→503 paths.

Regression-checked shared helper + rename: tests/board_doc/test_finding_status_endpoint.py, test_chat_focused_findings.py, test_b7_5_tables_only_and_doc_wide_findings.py, test_wizard_orchestrator.py all pass. ruff format + ruff check + pyright routers/board_doc_router.py all clean.

## Verification Artifact

$ uv run pytest tests/board_doc/test_addon_chat.py -q

................. [100%]

17 passed, 1 warning in 1.30s

$ uv run pyright routers/board_doc_router.py

0 errors, 0 warnings, 0 informations

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-0deeb498-b1c6-4c08-9d81-62e0a29cc2b9"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-0deeb498-b1c6-4c08-9d81-62e0a29cc2b9"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

The Portfolio  —  Trilogy Companies

Crossover's Moment: As AI Skills Command $800K Salaries, Trilogy's Talent Engine Faces Its Biggest Test Yet

The remote hiring market is exploding with AI-fluent candidates — and the platform built to find the world's top 1% has never been more relevant, or more scrutinized.

AUSTIN, TEXAS — There is a number circulating in hiring circles right now that stops conversations cold: $800,000. That is the annual salary some employers are reportedly willing to pay for professionals with demonstrated experience working alongside AI tools like ChatGPT, according to reporting from Business Insider. It is a figure that crystallizes — in the most American way possible — just how violently the global talent market has shifted in the span of twenty-four months.

The timing is notable for Crossover, Trilogy International's global talent platform and one of the conglomerate's most strategically important assets. Crossover has spent years arguing a thesis that was, for a long time, considered counterintuitive: that geography is irrelevant to talent, that rigorous AI-enabled skills assessment beats résumé-reading, and that the best engineer in Beirut deserves the same shot — and the same paycheck — as her counterpart in Palo Alto. Now, with remote job roundups dominating career media and publications like Careers360 and HCA Magazine treating remote-first hiring as mainstream rather than experimental, the world has largely arrived at Crossover's position.

But arriving at a thesis and executing on it are different things. The question now is whether Crossover's screening infrastructure can keep pace with a market that has been fundamentally restructured by AI fluency as a skill category. When jobs are no longer just remote-friendly but actively AI-dependent — when the premium on knowing how to work with these tools is measured in multiples of the average software salary — the platform's ability to identify and vet that specific capability becomes a systemic differentiator, or a systemic liability.

The stakes extend beyond Crossover's third-party clients. The platform is the talent spine of the entire ESW Capital portfolio — the mechanism by which 75+ enterprise software companies achieve the 75% EBITDA margins that define Trilogy's acquisition playbook. If the next generation of elite global workers is defined by AI fluency, and if Crossover correctly identifies and places them, the machine hums. If it doesn't, the margin story gets complicated in ways that no financial dashboard — not even Klair — can easily paper over.

The moment, in other words, is as clarifying as it is demanding. Crossover's founding bet is being validated in real time. Now comes the harder part: winning on it.

5 Best Remote Job Websites in 2026 for Freshers & Profession  ·  Top recruitment agencies for remote work - hcamag.com  ·  Top 10 Companies Hiring AI Engineers in Lebanon in 2026 - nu

Skyvera Adds CloudSense to the Telecom Trophy Case

The Trilogy-backed telecom shop just tucked a Salesforce-native CPQ player into its growing carrier-software cabinet.

AUSTIN, TEXAS — Word is the telecom software set has a new name on the seating chart, and it is not sitting quietly in the back.

Skyvera, the Trilogy-family operator that collects and modernizes carrier software like some people collect art, has completed its acquisition of CloudSense, the Salesforce-native configure-price-quote and order management platform built for telecom and media providers. Translation for the non-telco civilians: CloudSense helps carriers package, price, sell, and fulfill complicated subscriptions without turning every new offer into a twelve-month systems-integration opera.

A little bird from the BSS balcony says the move gives Skyvera a sharper instrument for the front office — CPQ, order capture, commerce workflows — to sit alongside the heavier machinery already in its telecom portfolio. The official curtain-raiser is here: Skyvera’s CloudSense acquisition announcement.

CloudSense is not arriving alone in the story. Skyvera has been busy building a telecom cabinet that already includes Kandy, its cloud-based real-time communications platform, plus VoltDelta, ResponseTek, Mobilogy Now, Service Gateway, and the divested telecom products group acquired from STL — digital BSS functionality covering monetization, optical networking, and analytics. That STL deal gave Skyvera more plumbing. CloudSense gives it more polish at the sales-and-ordering layer.

And here is the juicy bit: Salesforce-native still matters. Carriers may flirt with cloud-native everything, but their sales teams live where their CRM lives. A CPQ and order-management engine that speaks Salesforce without a translator can be the difference between a product launch and a product committee.

Inside the broader Trilogy universe, this looks very on-brand. ESW Capital’s house style has long been to acquire sticky enterprise software, rationalize operations, and push for the kind of margins that make spreadsheet jockeys fan themselves. Skyvera’s angle is narrower but potent: bridge old-world telecom infrastructure into modern cloud and SaaS operating models without asking carriers to rip out the entire basement.

The CloudSense product page now sits under Skyvera’s awning at skyvera.com/cloudsense, which tells you the integration parade has begun.

Blind item: Which carrier procurement chief, recently grumbling about quote-to-order delays, is suddenly taking Skyvera’s calls? Watch the next RFP cycle. The phones, as Kandy might say, are ringing.

CloudSense  ·  Skyvera completes acquisition of CloudSense, expanding telec  ·  STL Divested Assets

Alpha School Wants to Raise Your Kid — Whether You're in Austin or Auckland

The AI-powered pedagogy behind the country's most-watched private school experiment is going global, and with it comes a pointed warning for parents everywhere.

AUSTIN, TEXAS — There is a quiet but unmistakable pattern emerging from Alpha School, and if you read between the lines of the last several weeks of dispatches from Joe Liemandt's experimental K-12 operation, it becomes very clear: the campus walls are coming down.

Alpha Anywhere — the school's distance learning offering — has gone global. That's the headline. But that's not the interesting part.

The interesting part is the argument Alpha is now making to the world's parents, aggressively and in sequence. It's not simply that AI tutors can teach your child faster. It's that the entire framework through which you think about your child's education is wrong — and that the consequences of getting it wrong are compounding daily.

Consider the sequence. First came the push on screen time. Alpha's educators aren't anti-screen — they're anti-passive screen. Their position, laid out in detail for parents, is that a child drilling math concepts on an adaptive AI platform and a child watching YouTube are not engaged in remotely comparable activities. The former is building cognitive muscle. The latter is outsourcing attention. The distinction matters, and most parents, according to Alpha, are not making it.

Then came the sharper warning: cognitive offloading. Alpha's argument is that allowing children to use tools like ChatGPT as a substitute for thinking — rather than an amplifier of it — is producing a generation that has mistaken access to answers for the ability to reason. They're calling it the new illiteracy. That's a deliberately provocative framing, and someone in that organization chose it very carefully.

And then: a curated list of the ten AI tools Alpha actually deploys with its students — not to replace thinking, but to accelerate it.

This is a coordinated intellectual case, not a content calendar. Alpha is building the philosophical scaffolding for a global expansion at the exact moment it announces one.

Sources familiar with Liemandt's Timeback initiative, which has committed $1 billion to scaling the Alpha model to a billion students, describe the global rollout as the beginning of that journey — not the culmination. One source, who asked not to be named, put it simply: "This is the proof of concept going live."

Nothing here is accidental.

__followup__Top 1% Academics, Now at Your Kitchen Table  ·  Not All Screen Time Is Equal  ·  Cognitive Offloading Is the New Illiteracy
The Machine  —  AI & Technology

The Microscope Turns on Itself: AI and the New Shape of Discovery

From neuroscience classrooms to red-team gauntlets for autonomous agents, a single thread runs through the week's research: intelligence is learning to study intelligence.

STANFORD, CALIFORNIA — There is a peculiar recursion unfolding in the laboratories of the world. The instrument we built to think is now being pointed at the act of thinking itself. This week, four threads from four very different institutions braided together to form a single, almost vertiginous picture.

At Stanford's Human-Centered AI Institute, researchers laid out a vision of scientific discovery in which large models do not replace the scientist but extend her reach — sifting through molecular libraries, proposing protein folds, surfacing patterns invisible to a single human lifetime of reading. UC San Diego cataloged nine such breakthroughs already in flight: from cardiac diagnostics that read an ECG like a fluent second language, to wildfire prediction models that watch the California hills the way a shepherd once watched a flock.

Google Research, meanwhile, announced a recalibration toward what it calls "bolder breakthroughs" — a quiet admission that incrementalism is no longer the price of admission in a field where the ceiling keeps lifting overnight.

And then, the most touching item of all. At Frontiers, a cohort of young people — teenagers, mostly — sat down beside leading neuroscientists to co-author papers on the developing brain. "It's so wow!" one participant said, a sentence that ought to be carved over the entrance of every research building. Because that, finally, is the engine. Not the GPUs. Not the transformer architectures. The wow.

Yet wonder without rigor is a fire without a hearth. A new arXiv preprint, RIFT-Bench, proposes dynamic red-teaming for agentic AI — systems that no longer merely answer but act, book, transact, decide. The authors note that traditional security evaluations, tied to single implementations, cannot keep pace with autonomy. So they built a gauntlet: adversarial, adaptive, unified across heterogeneous agents.

Consider the symmetry. On one end, children meeting neurons. On the other, neurons-in-silicon meeting their adversaries. Between them, a species learning, slowly, that the universe has handed it a mirror — and that mirrors, when held correctly, reveal not vanity but structure.

‘It's so wow!’ - Young people team up with top neuroscientis  ·  How AI is Transforming Scientific Discovery While Keeping Hu  ·  Nine Breakthroughs Made Possible by AI - UC San Diego Today

SQLite Just Got a Browser-Native Upgrade Path — and Developers Should Pay Attention

Datasette, Simon Willison's open-source SQLite browser, has released a major alpha that transforms it from a data viewer into a full browser-accessible database workbench. The new version introduces a "Create table" interface with support for columns, primary keys, constraints and foreign keys—eliminating the need for SQL fluency and command-line expertise.

More significantly, Datasette Lite is experimenting with editing persistent SQLite files locally through the browser using WebAssembly and the Origin Private File System. If successful across browsers, users could open data applications from URLs, create or edit SQLite databases, run Python-backed queries and maintain data privacy without server involvement.

The implications extend to journalists, civic hackers, internal tooling teams and AI developers seeking small, inspectable databases over sprawling cloud infrastructure. As coding agents improve at generating schemas and queries, Datasette provides transparent, local, scriptable infrastructure that resists proprietary lock-in. The browser is increasingly becoming a serious local computing environment, with SQLite at the center.

The Prejudice Machine: Academic Consensus Hardens Around AI's Systemic Fairness Failures

A convergence of peer-reviewed literature suggests that artificial intelligence does not merely reflect human bias — it may structurally amplify it.

CAMBRIDGE, MASSACHUSETTS — It could be argued — and, preliminary evidence suggests, increasingly is — that the question confronting computational epistemologists, ethicists, and policymakers is no longer whether artificial intelligence systems exhibit bias (the affirmative case having achieved something approaching scholarly consensus), but rather through what precise mechanisms such bias is institutionalized, and at what social cost.

A constellation of recent scholarly interventions illuminates the contours of this problem with, one must acknowledge, simultaneous clarity and troubling specificity. The Human Rights Research Center's examination of algorithmic bias in predictive policing posits, with considerable evidential force, that procedural fairness — a cornerstone of jurisprudential legitimacy — is being systematically undermined by systems whose opacity forecloses meaningful contestation (itself a due process concern of no small constitutional magnitude).

Parallel interventions compound the concern. Research published in Nature's Scientific Data proposes a formal benchmark for AI-fairness research anchored in educational inequality — a domain wherein algorithmic sorting mechanisms, it could be argued, do not merely measure existing stratification but actively reproduce it across generational cohorts. Meanwhile, psychiatric medicine confronts its own reckoning: recent findings catalogued by News-Medical suggest that AI models tasked with predicting aggression in psychiatric populations may introduce differential error rates across demographic categories — a finding whose clinical and ethical implications resist easy dismissal.

The synthesis, such as it is, arrives from two directions simultaneously. Frontiers' methodological intervention advocates integration of formal computational fairness metrics with socio-technical analytical frameworks — a thesis-antithesis resolution that, one might cautiously note, mirrors longstanding debates within science and technology studies regarding the insufficiency of purely technical remediation for structurally-produced harms. MIT, for its part, advances the conversation toward autonomous systems ethics writ large.

What the literature does not yet provide — and here the lacunae are significant — is a unified normative architecture capable of adjudicating competing fairness definitions (individual versus group, procedural versus substantive) within a single regulatory paradigm. Preliminary evidence suggests we are not, in point of fact, close.

Algorithmic Bias and the Erosion of Procedural Fairness in P  ·  Unfair Inequality in Education: A Benchmark for AI-Fairness  ·  AI models may amplify bias in psychiatric aggression predict
The Editorial

Merit, That Most Flattering of Fictions

Every age invents a story to explain why the people on top belong there; ours just happens to involve a laptop and a standing desk.

AUSTIN, TEXAS — There is a particular look that comes over the face of a successful man when he is asked to account for his success. It is not quite a smile, not quite a smirk — call it the expression of someone who has been waiting all his life for the question and has rehearsed the answer in front of the bathroom mirror. He worked hard. He took risks. He saw what others did not. The deck, it turns out upon close inspection of his account, was stacked entirely in favor of merit, and he was merit's chief beneficiary. A coincidence, surely.

A cluster of essays this week — in The Guardian, in the Human Rights Research Center, in a sharp piece in The New Yorker on the entrepreneurial work ethic — has performed the now-ritual autopsy on the corpse of meritocracy. The body has been on the slab for some time. We keep cutting it open, peering inside, and announcing, with the air of discovery, that there is nothing there. Caste networks in Silicon Valley hiring. Women filtered out of information security by an old-boys' freemasonry that calls itself a pipeline problem. Founders whose chief qualification was a Stanford roommate with a checkbook. And yet the word survives, durable as a cockroach, because no one with anything to lose has any interest in burying it.

Meritocracy, as Michael Young coined the term in 1958, was meant as satire — a dystopia in which the winners felt entitled to their winnings and the losers felt obliged to accept their losings. The joke, of course, is that we read the book as an instruction manual. The genius of the thing is that it asks nothing of its beneficiaries except that they continue, in good faith, to believe in themselves.

The New Yorker's diagnosis of the entrepreneurial work ethic deserves a moment of its own. The cult of the founder — sleeping under the desk, optimizing the morning, journaling the gratitude, monetizing the hobby — is meritocracy's pious arm. It transforms the accidents of birth into the disciplines of character. If you are tired, you have not hustled enough. If you are poor, you have not believed enough. The Calvinists at least had the decency to admit that grace was unearned; our secular elect insist that theirs was a thing they built with their own two hands, in a garage, alone, against the doubters.

None of this is to say that effort does not exist, or that talent is a fiction, or that the lazy and the diligent are interchangeable. They are not. It is only to say that the distance between effort and outcome is paved with capital, kinship, accident, and the patient labor of people whose names will not appear on the cap table. The myth flatters the winners and shames the losers, which is, on reflection, what myths are generally for. We will not be giving it up soon. There is too much riding on it — chiefly, the self-regard of everyone it has favored.

The myth of meritocracy: who really gets what they deserve?  ·  The Insidious Charms of the Entrepreneurial Work Ethic - The  ·  Coding Caste: Tech Elites, Dalit Exclusion, and the Myth of
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation Briefly Considers Whether AI Productivity Gains Might Be Hidden Under 52% Off Bluetooth Speaker

As Qualcomm spends nearly $4 billion on a chip startup and employers await promised software savings, Americans remain focused on acquiring durable objects before the economy notices.

SAN DIEGO — In a reassuring sign that the modern economy remains governed by forces no one can fully explain, Qualcomm has reportedly agreed to buy the buzzy chip software startup Modular for nearly $4 billion, a transaction that industry observers say should help answer the urgent question of whether artificial intelligence can become more profitable if it is first made much, much more expensive.

The deal, reported by WIRED, arrives at a delicate moment for the AI sector, which has spent the past several years promising to eliminate inefficiency while requiring unprecedented quantities of capital, electricity, specialized hardware, engineering labor, executive retreats, and words like “inference.” Modular, a well-regarded startup focused on making AI and chip software easier to develop and deploy, will now enter the traditional innovation pipeline in which a nimble company is purchased by a much larger company so its agility can be carefully preserved in an org chart.

This is, of course, how progress works. First, software engineers use AI tools to produce code faster. Then companies wait to see whether that speed becomes profit. Then they purchase infrastructure, platforms, copilots, copilots for the copilots, and occasionally an entire chip software startup, all in the hope that somewhere inside the stack is a margin improvement quietly trying to get out.

The timing is instructive. Business leaders are now discovering that “developers can do more work faster” is not identical to “the business has more money,” in the same way that owning 14 discounted USB-C hubs is not identical to having your life together. Productivity, like a missing board game piece, may technically be present in the house, but no one can locate it during the quarter-end review.

Fortunately, the American consumer has responded to this uncertainty with appropriate seriousness by examining Prime Day deals on board games and gear. While Qualcomm moves to consolidate part of the AI compute future, families across the country are deciding whether now is the correct time to buy a strategy game that will teach their children resource allocation, betrayal, and the importance of reading rules aloud for 47 minutes before giving up.

There is a certain honesty in this. A discounted board game makes a clear promise: you pay less than usual, open the box, and eventually accuse a loved one of misunderstanding turn order. AI infrastructure, by contrast, makes a more sophisticated promise: you pay far more than usual, open a dashboard, and eventually accuse a department of failing to restructure workflows around model-assisted throughput.

Even the $25,000 Slate electric pickup, backed by Jeff Bezos and positioned as a no-frills truck that owners can afford and repair themselves, feels almost quaint in comparison. It offers a physical object, a stated price, and a recognizable purpose. This places it at odds with much of the AI economy, where the object is often “capability,” the price is “strategic,” and the purpose is “unlocking enterprise value” at some later date.

None of this means the Qualcomm-Modular deal is misguided. On the contrary, it may prove extremely sensible. AI’s next phase will likely depend on making models faster, cheaper, and easier to run across devices, and companies that control more of that stack will have obvious advantages. Qualcomm has long had ambitions beyond phones, and buying talent and software in the AI chip ecosystem is a perfectly rational act in a market where waiting patiently is considered a form of surrender.

But the broader lesson remains uncomfortable. The economy keeps being told that AI will make everything more efficient, while the companies selling and adopting it continue behaving as if the only path to efficiency is buying something enormous first. Employers want fewer bottlenecks, faster output, leaner teams, and better returns. Engineers are producing more. Vendors are raising more. Acquirers are paying more. Consultants are explaining more.

The payoff, we are assured, is coming.

Until then, there are 107 Prime Day deals on gear that has at least been tested by people who can confirm whether it turns on.

Qualcomm Buys Buzzy Chip Startup Modular for Nearly $4 Billi  ·  My Family Loves Board Games—Here Are the 9 I'd Buy On Sale D  ·  107 Prime Day Deals on Gear We Stand By, Up To 52% Off (2026
On This Day in AI History

On June 24, 2012, Google's "Google Brain" team, led by Geoffrey Hinton, announced a major breakthrough in deep learning by training a neural network on unlabeled YouTube data that spontaneously learned to recognize cats without being explicitly programmed to do so. This milestone demonstrated the power of unsupervised learning and became a watershed moment for modern deep learning.

⬛ Daily Word — AI
Hint: An AI system that takes autonomous actions in the world
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed