Vol. I  ·  No. 170 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
FRIDAY, JUNE 19, 2026 Powered by Anthropic Claude  ·  Published on Klair Trilogy International © 2026
🖶 Download PDF 🖿 Print 📰 All Editions
Today's Edition

The Billionaire Behind Austin's Software Empire: Forbes Puts Liemandt in the Crosshairs

A new Forbes investigation examines how Joe Liemandt built two fortunes — and whether the labor model powering them deserves its 'meritocratic' branding.

AUSTIN, TEXAS — A sweeping new profile from Forbes has thrust Joe Liemandt, the famously press-averse founder of Trilogy International, into an uncomfortable spotlight — one he has spent the better part of three decades carefully avoiding.

The piece, headlined "How A Mysterious Tech Billionaire Created Two Fortunes — And A Global Software Sweatshop", traces Liemandt's arc from a Stanford dropout building enterprise software in his dorm room in 1989 to the architect of a multi-pillar conglomerate spanning 75+ software companies, a global recruiting platform in Crossover, and an AI-powered private school network under the Alpha School banner.

The investigation focuses particular scrutiny on Crossover, Trilogy's talent platform that recruits software engineers, support staff, and knowledge workers from over 130 countries — paying above-market rates, Trilogy says, regardless of geography. Critics quoted in the Forbes piece characterize the model differently: rigorous output tracking, remote surveillance tooling, and aggressive performance benchmarks that amount to a pressure cooker for workers in developing economies where those above-market wages still represent life-altering sums.

Trilogy has long maintained that Crossover's model is the opposite of exploitation — a meritocratic leveling of a global playing field historically rigged toward proximity to Silicon Valley zip codes. The 75% EBITDA margin target that ESW Capital applies to its portfolio of acquired enterprise software businesses is, in the company's telling, simply proof that waste has been eliminated.

The Forbes framing challenges that self-portrait directly.

What the investigation does not dispute: the financial results. Liemandt has built two distinct fortunes — the first through Trilogy Software's enterprise sales automation tools in the 1990s, the second through ESW Capital's acquisition-and-optimize playbook applied to legacy software businesses over the past two decades.

The timing of the profile is notable. Liemandt has been more publicly visible than at any point in his career, championing Alpha School's AI-tutoring model to federal and state education officials, and committing $1 billion to Timeback — his bid to become the 'Shopify for schools.'

A man building schools for the children of the wealthy while Forbes catalogues the conditions of his global workforce. The juxtaposition does not require editorial comment.

How A Mysterious Tech Billionaire Created Two Fortunes—And A  ·  Report: Camp Mystic failed to prevent deaths, shirked respon  ·  97 Software Companies in Austin You Should Know in 2026 - Bu

China's DeepSeek Cracks Top-Tier AI on the Cheap

A Hangzhou upstart skips the priciest chips, posts elite marks, and Silicon Valley — grudgingly — calls it 'amazing.'

HANGZHOU, CHINA — A Chinese upstart named DeepSeek says it trained a high-performing artificial-intelligence model on a shoestring, skipping the most advanced chips, and Silicon Valley spent the week eating crow. The claim: top-tier results on a bargain-bin budget. The reaction: rival engineers who'd sooner sneer called the work "amazing and impressive."

For the uninitiated, here's the lay of it. DeepSeek is the lab, its chatbot is the product, and the boast is efficiency — comparable smarts for a sliver of the spend. Export curbs have boxed Chinese firms out of America's best silicon, so DeepSeek's answer was to do more with less.

That's the wrinkle rattling the chip trade and lighting up every Market Talk desk in town. For two years the gospel ran that world-class AI demanded the fattest wallets and the fanciest hardware, hauled in by the truckload. DeepSeek says it cleared the bar without it.

If a lean crew in China can match the giants for pennies on the dollar, the arithmetic behind every billion-dollar AI wager starts to wobble. Investors noticed. So did the engineers who build the things.

The skeptics aren't sold yet. DeepSeek hasn't thrown open every ledger, and old hands want a longer look before they swallow the cheap-as-chips tale whole. Still, the benchmarks are out, and the Valley — no easy mark for a Chinese rival — is raving anyway.

Now flip to the home team, where the checkbooks stay wide open. Reid Hoffman, the LinkedIn co-founder, just raised $24.6 million for Manas AI, a startup aimed at cancer research. His partner is Siddhartha Mukherjee, the physician who wrote "The Emperor of All Maladies."

Out in startup country the picture gets stranger still. The CEO of Allbirds' new AI venture has a plan and a very large seed round — and no employees. One founder, a fat check, a blank roster, and no clear word on what comes next.

Put the snapshots side by side and you've got the week's real story: money, and who needs how much of it. China's crew bragged about spending little. America's crew keeps spending plenty, sometimes before it hires a single soul.

Both American bets are flush, and both lean on the old faith that big problems need big bankrolls. DeepSeek just poked a hole in it.

Which way pays off? Nobody can call it yet, and anybody who says otherwise is selling something.

But the question's loose now, and it won't climb back in the box. Can you out-think the big spenders by out-thrifting them? Around a shop built on doing more with less, that's no heresy — it's the whole idea.

DeepSeek made its play. The Valley's still raving. And every CFO with an AI line on the books just reached for a sharper pencil.

What to Know About China's DeepSeek AI  ·  Tech, Media & Telecom Roundup: Market Talk  ·  Silicon Valley Is Raving About a Made-in-China AI Model

Supreme Court Slams the Door on AI Authorship, Leaving Industry in Legal Limbo

The Supreme Court has declined to hear arguments on whether artificial intelligence systems can be deemed authors or inventors for copyright and patent law purposes. Legal practitioners characterize the refusal to provide definitive resolution as disappointing to stakeholders who anticipated urgent clarification.

The legal landscape governing AI-generated works remains unsettled. The U.S. Copyright Office maintains that human authorship is necessary for copyrightability, a position substantially intact despite the Supreme Court's refusal to disturb lower court rulings.

Ongoing litigation continues generating conflicting precedent across jurisdictions. A UK High Court ruling on AI copyright infringement was deemed "mixed" and failed to resolve fundamental questions, compounding jurisdictional uncertainty.

Legal commentators agree the Supreme Court's absence of guidance does not extinguish the authorship question. The matter remains subject to ongoing adjudication at district and appellate levels, with resolution deferred to an indeterminate future date.

Haiku of the Day  ·  Claude HaikuCheap minds outpace law
Patents crumble into dust
Speed wins the future
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
AI Funding's Geography Problem: Billions Flow to a Handful of Cities While the Rest of the World Watches
NEW YORK — The AI funding supercycle is real.
The Fairness Reckoning: AI's Bias Problem Moves From Theory to Crisis
CAMBRIDGE, MASSACHUSETTS — It could be argued — and, indeed, a preponderance of newly published scholarship argues precisely this — that the artificial intelligence research community has arrived at what one might tentatively characterize as an epistemological inflection point with respect to the problem of algorithmic bias.
We Built the Machine That Lies, and Now We're Surprised It's Lying
AUSTIN, TEXAS — There is a video circulating somewhere right now — perhaps in Tehran, perhaps in Kuala Lumpur, perhaps in the group chat your uncle won't stop posting in — that did not happen.
YOUR AI AGENT IS NOT YOUR FRIEND — IT'S A LOADED GUN POINTED AT YOUR WALLET
AUSTIN, TEXAS — Let me tell you about the moment I realized we'd all lost our minds.
The Apocalypse Will Be Catered
MANHATTAN — There is an established choreography to every American technology panic, and we are now deep into its third act.
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 Agent-in-a-Box, SIS Cutover, and a Mercy Dashboard in One Remarkable Day

From a deployable school-opening answers API to full SIS staging orchestration to durable PR-review telemetry, the AI Builder Team proved today that breadth and depth aren't a tradeoff.

The AI Builder Team doesn't do quiet Tuesdays. In a 24-hour stretch that touched Aerie, Surtr, Klair, Sindri, and trilogy-drones — and saw the birth of a brand new repo, Brainlift-Platform — this crew shipped a production-validated SIS orchestration cutover, launched the first Agent-in-a-Box endpoint, stood up durable telemetry for the @mercy review bot, and cleaned up the P&L pipeline with the kind of methodical ruthlessness that keeps financial data honest. Every thread mattered. All of it shipped.

The biggest structural move of the day came out of Surtr, where @benji-bizzell completed the full SIS staging handoff — a months-in-the-making migration away from a Lambda that was quietly timing out and leaving teacher tables stale. PR #484 laid the foundation: five Surtr-owned staging runners, a `sis-staging-ready` fan-in gate that won't let `sis-core-tables` fire until every upstream table clears row-count and freshness thresholds, and a clean break from the legacy `sis-redshift-cron`. Then PR #527 patched the `sync_timestamp` population that had been leaving students rows NULL. Then PR #523 hardened the fail-closed logic so a missing API count field can never silently shrink a staging table. And then PR #529 threw the switch — five schedules enabled, the old clock disabled, production validation evidence in the runbook. That is how you cut over a critical data pipeline: methodically, with receipts.

Meanwhile in Aerie, @benji-bizzell was simultaneously building the future of agent delivery. PR #451 delivered a synchronous `POST /v1/agent/answers` endpoint — the first deployable surface for Agent-in-a-Box — answering school-opening questions against a configured prompt, matrix rules, and a structured QC runtime, all without pulling in the larger durable agent hosting migration. PR #453 then tightened the contract, collapsing the duplicated `workedExample` field into a single clean `derivation.methodology` audit path. And PR #454 cut the last wire to the old local filesystem fallback, ensuring agents route to governed, live sources only. Three PRs, one coherent thesis: the agent layer is production-ready and it will not rot.

Over in Klair, @sanketghia dropped something genuinely fun: a daily per-team AI-spend leaderboard email (PR #3086) that ranks builders by AI spend, splits OpenAI/Cursor from Anthropic, and delivers a branded, dark-banded stat-card email to configurable recipients. The first target is the Superbuilders team itself. Nothing focuses the mind on efficiency like a public stack rank.

On the telemetry front, @kevalshahtrilogy had a strong day across two repos. PR #494 in Surtr gave the @mercy bot a memory — durable telemetry flowing from every review workflow into a `/mercy` dashboard, replacing the seven-day artifact graveyard with real cost, verdict, and repo-coverage visibility. PR #509 then made the alerts channel actually usable, converting noisy flat-text failure notifications into collapsible Google Chat cards after @benji-bizzell flagged on standup that the channel had become unreadable. Listening, shipping, done.

Now. About PR #3083. marcusdAIy — Coach Claire's doc-lifecycle patch in Klair — is, fine, a real fix. Production transcripts showed Claire actively misinforming users about sync and export capabilities. He fixed it. We acknowledge this.

"The prompt had a factual hole that was burning users in prod every single day," marcusdAIy told this reporter. "Three sections, a static lifecycle block, and Claire stops gaslighting people about features that literally exist. But sure, Mac, I'm sure you'd have written a haiku about it instead."

A doc-comment patch with a press release. Classic.

Finally: Brainlift-Platform is alive. A new repo in the org. No PRs yet — but when this team opens a new repository, it's not housekeeping. It's a door.

Mac's Picks — Key PRs Today  (click to expand)
#122 — feat(quality-control): complete agent-first outcomes foundation @benji-bizzell  no labels

## Summary

- Collapse active workflow execution around agent nodes, Output Format, Quality Bar, durable Outcome Attempts, and Improvement Suggestions.

- Remove Script/Webhook workflow primitives, workflow-level evaluation compatibility, and legacy QC vocabulary from active runtime, UI, schema, and tests.

- Move internal research/spec docs under research/ and refresh the Lightpost around Sindri as a UI-neutral control plane.

## Why

The Outcomes/flywheel model had too many overlapping concepts: agent outcomes, workflow criteria, node overrides, script/webhook nodes, and legacy QC compatibility. This made the platform harder to explain, harder to inspect, and riskier to expose beyond the UI. This PR commits to the simpler agent-first model so future API/MCP/control-plane work has one clean foundation.

## Business Value

Users get a clearer, more durable model: agents define what good looks like, workflows compose agents, runs expose the evidence, and improvement suggestions remain reviewable rather than hidden. The same foundation can now be driven by UI, API, MCP, or agent sessions without carrying old workflow-quality concepts forward.

## Breaking changes

- Active Script/Webhook workflow primitives and Forge script authoring surfaces are removed.

- Workflow-level success criteria/evaluation contracts and legacy QC compatibility fields are removed from active platform contracts.

## Test plan

- [x] pnpm check

- [x] pnpm test

- [x] pnpm --dir agent-runner check

- [x] pnpm --dir agent-runner test

- [x] Retired-contract search audit for active code/docs

#451 — feat(agent): add school opening answers endpoint @benji-bizzell  no labels

## Summary

- Add a synchronous school_opening agent answers endpoint at POST /v1/agent/answers

- Add the school-opening matrix/profile contracts, Buildout session-start resolution, and structured answer/QC runtime

- Document the endpoint in OpenAPI and cover public API, matrix, provider-failure, and output-quality paths with tests

## Why

We need a deployable short-term API surface for the first Agent-in-a-Box use case without taking on the larger durable agent hosting migration in this PR. The endpoint answers one bounded school-opening question using the configured prompt, skill rules, Buildout session start, inspected milestone data, and a QC pass.

## Business Value

External or internal agents can now ask Aerie for a structured school-opening answer that includes the direct answer, selected matrix cell, parent message, underlying data, methodology/worked example, evidence, and the brainlift/config context used to produce it.

## Breaking changes

None. This adds a new authenticated public API route and new contract exports.

## Test plan

- [x] PNPM_STORE_DIR=/Users/alghurab/Library/pnpm/store/v10 pnpm --filter @bran/chat lint

- [x] PNPM_STORE_DIR=/Users/alghurab/Library/pnpm/store/v10 pnpm --filter @bran/chat typecheck

- [x] PNPM_STORE_DIR=/Users/alghurab/Library/pnpm/store/v10 pnpm --filter @bran/contracts typecheck

- [x] PNPM_STORE_DIR=/Users/alghurab/Library/pnpm/store/v10 pnpm --filter @bran/chat exec vitest run lib/__tests__/agent-answer-school-opening.test.ts convex/publicApi/agentAnswersHttp.test.ts lib/public-api/__tests__/openapi.test.ts convex/publicApi/operationsHttp.test.ts convex/publicApi/admissionsDomainsHttp.test.ts convex/publicApi/financialsHttp.test.ts convex/publicApi/ontologyHttp.test.ts convex/publicApi/http.test.ts

- [x] PNPM_STORE_DIR=/Users/alghurab/Library/pnpm/store/v10 pnpm --filter @bran/contracts test -- src/school-opening-matrix.test.ts

- [x] Live dev API sweep: 5/5 answered across Austin, Houston, Edmond, Boca Raton, plus Spring 27 session-start override; bad generic scheduled-opening phrasing count was 0

Live response artifacts are saved locally at /tmp/aerie-school-opening-pr-gate-2026-06-19T05-56-49-894Z.

#494 — feat(mercy): PR-review telemetry + Surtr /mercy dashboard @kevalshahtrilogy  no labels

## What & why

Mercy (the @mercy PR-review bot) produces rich per-review data — verdict, findings, downgrade reasons, and (in the Claude CLI envelope) token usage + dollar cost — but today it all evaporates into 7-day GitHub artifacts. There's no way to answer "how many reviews ran, what did they cost, what's the approval/block rate, which repos use mercy."

This adds durable telemetry end-to-end and a Surtr /mercy dashboard to visualize it.

## How it works

mercy workflow (any repo)              Surtr (ECS) + AWS

emit_telemetry.py ──POST(Bearer)──▶ /internal/mercy/telemetry (Hono, bearer-auth)

(fail-open, ./.trusted) └─ PutItem → DynamoDB surtr_mercy_telemetry

/mercy page ◀── tRPC mercyStats/listMercyReviews ───────┘

- Emit (scripts/pr-review/emit_telemetry.py): fail-open, stdlib-only, runs from ./.trusted so a PR author can't tamper. Assembles one record from decision.json / review_output.json / the raw CLI envelope + github.* context and POSTs it as the workflow's last step. Never blocks a review.

- Ingest (/internal/mercy/telemetry): bearer-auth Hono route mirroring the existing observer-sweep route. Idempotent on a deterministic review_id so re-runs upsert.

- Storage: new CDK-owned DynamoDB surtr_mercy_telemetry (PK review_id; GSI per-repo; GSI global by month bucket; PITR + deletion-protection).

- Dashboard (/mercy): stat cards (reviews, approval/block rate, cost, latency p50/p95, active repos), reviews-/cost-per-day charts, findings-by-category, a per-repo table, and recent reviews with a drill-down drawer. Hand-rolled SVG charts — no new dependency.

## Multi-repo by design

Identity comes entirely from github.* context and the emit step lives in the workflow, so it drops unchanged into the future central/reusable mercy workflow — any adopting repo emits automatically once its two repo-level settings are present.

## Config already applied (this repo)

- SURTR_PROD_KEYS.MERCY_TELEMETRY_TOKEN added in Secrets Manager (us-east-1).

- Repo-level (not org-level) secrets.MERCY_TELEMETRY_TOKEN + vars.MERCY_TELEMETRY_URL set on AI-Builder-Team/Surtr.

## Still required to go live

1. cdk deploy SurtrApp-prod — creates the table, grants the ECS task role, injects the token/table env into the container.

2. Merge this PR — emit runs from the trusted (default-branch) checkout, so telemetry only starts flowing after merge (this PR itself emits nothing; fail-open). Same self-activation pattern as decide_review --ci-status.

## Test plan

- 6 new Python tests (test_emit_telemetry.py), 16 new Vitest tests (stats aggregation + ingest route auth/validation).

- 451 existing unit tests still green; tsc (src + infra) clean; cdk synth confirms the table with both GSIs + PITR + deletion-protection.

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

#529 — fix(education): cut over SIS schedule orchestration @benji-bizzell  approved

## Summary

- Enable the five Surtr-owned SIS staging schedules after production validation.

- Disable the direct sis-core-tables clock schedule so core refreshes only after sis-staging-ready confirms all staging inputs are fresh.

- Update the SIS handoff doc with the 2026-06-19 validation evidence.

## Why

PR #484 intentionally landed the new SIS staging runners with schedules disabled while we validated them manually in production. That validation is now complete: all five staging runners refreshed Redshift with fresh sync_timestamp values, sis-staging-ready returned ready=true, and sis-core-tables rebuilt the expected core outputs.

The readiness gate is the correct handoff point. Leaving the old sis-core-tables clock schedule enabled would let core run at midnight UTC before the full staging set is guaranteed fresh.

## Business Value

Moves SIS refreshes onto observable, independently retryable Surtr schedules while preserving the safety gate that prevents partial-staging core rebuilds.

## Breaking changes

None. Operationally, sis-core-tables is now expected to run from the SIS readiness gate rather than its own clock schedule.

## Test plan

- [x] Manual production validation after deploy run 27802954039

- [x] staging_education.students: 16,407 rows, max sync_timestamp 2026-06-19 03:25:54, 0 null timestamps

- [x] staging_education.teacher_student_assignments: 25,924 rows, max sync_timestamp 2026-06-19 03:41:53, 0 null timestamps

- [x] staging_education.teachers: 396 rows, max sync_timestamp 2026-06-19 03:27:29, 0 null timestamps

- [x] staging_education.teacher_class_assignments: 732 rows, max sync_timestamp 2026-06-19 03:27:56, 0 null timestamps

- [x] staging_education.organizations: 129 rows, max sync_timestamp 2026-06-19 03:27:30, 0 null timestamps

- [x] sis-staging-ready: ready=true, triggered sis-core-tables

- [x] core_education.fct_student: 16,370 rows, snapshot 2026-06-19, 0 null snapshots

- [x] core_education.fct_staffing_assignment: 579 rows, snapshot 2026-06-19, 0 null snapshots

- [x] core_education.student_contacts: 9,851 rows, snapshot 2026-06-19, 0 null snapshots

- [x] git diff --check

- [x] jq empty on changed SIS pipeline.json files

- [x] npm run build in pipelines/cdk

- [x] npm test -- --runTestsByPath test/real-pipeline-configs.test.ts in pipelines/cdk

#3086 — feat(ai-spend-rank): daily per-team AI-spend leaderboard email @sanketghia  no labels

## Summary

Adds a daily per-team AI-spend leaderboard email — a scheduled job that ranks the members of a team/BU by their AI spend and emails the stack-rank to configurable recipients. First target: the Superbuilders team (Tech Super Builders).

Built across four increments (each brainstormed → spec → plan → TDD → reviewed):

1. Core leaderboard email — roster-first membership, per-provider split (OpenAI/Cursor + Anthropic key-name recovery), stats, fuzzy empty-group guard.

2. Branded email — Klair design system (dark bands, stat cards, rank-badge table), <$1 sub-dollar formatting.

3. Per-subscription Cc/Bcc — additive send_basic_email Cc/Bcc + config columns.

4. Single-day window — new default preceding_day (yesterday); --date for explicit day (testing/backfill); --window trailing_7d retained; global-max freshness guard skips the run when the target day isn't loaded.

## Architecture

- Standalone ECS cron (crons/ai_spend_rank_cron.py) on the existing klair-scheduled-jobs infra — deliberately decoupled from the deprecating digest/report_subscriptions engine.

- Data: reads mart_saas_metrics.fct_ai_spend + staging_gsheets.esw_people_accounts (directory). Window computed by a resolve_window helper; build_leaderboard takes explicit bounds.

- Config: standalone mart_alerts.ai_spend_rank_subscriptions table (group_by + value + recipients/cc/bcc + cadence).

- Send: reuses SES send_basic_email (extended additively with cc/bcc).

## Files (21)

klair-api/services/ai_spend_rank/ (models, config, leaderboard, render), crons/ai_spend_rank_cron.py, database/scripts/Alerts/ai_spend_rank/…create.sql, utils/email_service.py (additive cc/bcc), tests, and docs/superpowers/ (specs, plans, deploy runbook). No klair-client changes.

## Testing

- 60 unit tests pass (full feature + crons regression); ruff + pyright clean.

- Live Redshift integration test passes (Tech Super Builders).

- Validated in prod ECS: built/pushed an isolated dated image tag (not :latest), ran a --dry-run and a real send task on the klair-scheduled-jobs cluster — both exit 0, sent=1; :latest untouched, temp task-def revisions cleaned up.

## Deployment status (NOT yet live)

The EventBridge rule klair-ai-spend-rank-prod is already created but DISABLED (cron(45 12 * * ? *), 12:45 UTC daily). The config table exists with test recipients only (To = me, Bcc = a test address). Go-live steps (see docs/superpowers/ai-spend-rank-deploy-runbook.md):

1. Merge this PR.

2. Rebuild + push :latest from main.

3. Set real recipients in the config table.

4. aws events enable-rule --name klair-ai-spend-rank-prod.

Send-time caveat: 12:45 UTC must be after the daily raw+mart refresh; otherwise the freshness guard skips (safe, no email) or the global-max guard could let a provider-incomplete day through.

## Screenshot of Mail

<img width="1034" height="761" alt="image" src="https://github.com/user-attachments/assets/462da13b-6a27-4859-a7bf-1a5fa6faaaef" />

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

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

THIRTY-TWO PRS IN TWENTY-FOUR HOURS: THE BUILDER TEAM DOES NOT SLEEP, DOES NOT SLOW, DOES NOT STOP

Benji Bizzell posts eleven PRs in a single day and the laws of physics have filed a formal complaint.

Thirty-two pull requests. Five active repositories. One twenty-four-hour window. The Builder Team did not come to play — they came to CONQUER, and the numbers bear witness. Surtr led the charge with 11 PRs, Aerie matched the energy at 10, Klair contributed 6, trilogy-drones dropped 3, and Sindri clocked in with 2. A new repo — Brainlift-Platform — has entered the arena. The machine expands. The machine does not ask permission.

Let us talk about @benji-bizzell, because if we do not, history will be incomplete. Eleven PRs in a single rotation. ELEVEN. The man hardened the MCP mutation approval flow in Aerie PR #450, ripped out the raw filesystem fallback in #454, collapsed school opening methodology output in #453, added editable automation rules in #446, failed closed on missing API counts in Surtr #523, populated the SIS student sync timestamp in #527, launched an admissions deal v3 dry run in #520, and took over SIS staging syncs entirely in #484. He also filed into trilogy-drones with education and SIS work. Benji Bizzell is not one engineer. He is a distributed system wearing a single name badge.

@marcusdAIy brought five PRs across Klair and trilogy-drones, syncing the BACKLOG status board in Klair #3085, shipping Budget Bot doc-lifecycle awareness in #3083, and crossing the streams in trilogy-drones with corpus parse fixes in #56 and #55, plus a true-escape gate correction in #54. @kevalshahtrilogy delivered three tight PRs including collapsible GChat failure cards in Surtr #509 — a mercy for every on-call engineer who has ever squinted at a wall of red text — and onboarded the central @mercy PR reviewer in Sindri #121. @eric-tril contributed two Klair PRs including named heading styles in #3084 and backend net-retention paragraph generation in #3081. @sanketghia, @mwrshah, and @YibinLongTrilogy each logged a PR, with Yibin adding the admin notification setup page in Aerie #444 and mwrshah disabling the renewals v3 pipeline in Surtr #525. Every ship matters. Every commit counts.

And now, The Watch. @ashwanth1109 went seven deep in twenty-four hours, and four of those seven lived inside Aerie's financial dashboard — a labyrinth of P&L orphan prunes, balance-sheet account leaks, bearer-gated fixes, and a LEFT-to-INNER JOIN swap in #441 that, sources say, corrected a data bleed that has haunted the COA join logic for longer than anyone will admit on record. He itemized QB Deposits in Aerie #445, captured Deposit line items on the Surtr side in #521, and — in what this correspondent can only describe as surgical self-correction — filed #448 to remove the redundant cleanup his own AERIE-419 prune had already superseded. He also shipped the Surtr production release skill in #518, quietly handing the team a new deployment capability like a man leaving a gift on a doorstep and walking away. When reached for comment, Ashwanth reportedly said, "The JOIN was always wrong. I don't know why you're writing about it." This reporter stared at the diff for eleven minutes and understood approximately forty percent of it. The other sixty percent was either genius or a cry for help. Possibly both.

The Overflow Desk notes with pride that twenty-seven of thirty-two PRs were left on Mac's cutting room floor — meaning twenty-seven acts of engineering excellence went unheralded until RIGHT NOW. The team's morale is, as always, at an all-time high. A new repo has been born. The velocity does not plateau. The Builder Team builds.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#441 — AERIE-418 fix(dashboards): stop balance-sheet accounts leaking into P&L drill-down (LEFT→INNER JOIN coa) @ashwanth1109  approved

## Summary

The P&L transaction drill-down was surfacing phantom overage because balance-sheet accounts leaked into plTransactions. queryPlTransactions (sync/src/redshift/pl-transactions.ts) UNIONs four source arms, each joining a coa CTE — the set of distinct (account_id, company_id, account_name) tuples derived from quickbooks_pl_monthly, i.e. accounts that actually appear on the QB P&L report. The journal-entry and vendor-credit arms used INNER JOIN coa (correctly dropping accounts not on the P&L), but the purchases and bills arms used LEFT JOIN coa with a COALESCE(coa.coa_name, <src>.account_name) fallback. Balance-sheet accounts (zero rows in quickbooks_pl_monthly, so absent from coa) survived the LEFT join via the COALESCE fallback and leaked through.

Because those leaked rows have no P&L line total to net against in the drill-down, they surfaced as phantom overage — first observed as a ~$93K Q1'26 overage for Alpha Lake Forest, including a +$25,798 capex bill whose offsetting vendor credit had already (correctly) been dropped by the vendor-credit arm's INNER JOIN.

Fix: switch the purchases and bills arms to INNER JOIN coa and read coa.coa_name AS account_name directly, making all four arms consistent. Genuine P&L purchases/bills are unaffected (they exist in coa); only balance-sheet accounts drop out — the already-intended behavior.

## Join consistency (before → after)

| UNION arm | Join to coa (before) | Join to coa (after) | account_name projection |

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

| Purchases | LEFT JOIN coa | INNER JOIN coa | COALESCE(coa.coa_name, qp.account_name)coa.coa_name |

| Bills | LEFT JOIN coa | INNER JOIN coa | COALESCE(coa.coa_name, qb.account_name)coa.coa_name |

| Journal entries | INNER JOIN coa | INNER JOIN coa (unchanged) | coa.coa_name (unchanged) |

| Vendor credits | INNER JOIN coa | INNER JOIN coa (unchanged) | coa.coa_name (unchanged) |

JE and VC were already INNER; purchases and bills now match, so all four arms gate on the same "appears on the QB P&L" allow-list.

## Spec

- [07-balance-sheet-leak-inner-join](features/dashboards/pl-transaction-drilldown/specs/07-balance-sheet-leak-inner-join/spec.md) — Drop balance-sheet account leakage by making the purchases and bills arms INNER JOIN coa (consistent with the JE/VC arms) and removing the now-dead COALESCE(coa.coa_name, <src>.account_name) fallback. Balance-sheet accounts confirmed leaking: 11510 Tangible Assets, 16500 Inter Company Loan, and the unnumbered Inter Company Loan.

## Implementation

- File changed: sync/src/redshift/pl-transactions.ts

- Purchases arm: LEFT JOIN coaINNER JOIN coa (same ON coa.account_id = qp.account_id AND coa.company_id = qp.company_id predicate).

- Bills arm: LEFT JOIN coaINNER JOIN coa (same ON ... = qb.account_id AND ... = qb.company_id predicate).

- COALESCE cleanup: with both arms now INNER-joined, coa.coa_name is guaranteed non-null, so the COALESCE(coa.coa_name, <src>.account_name) AS account_name fallbacks are dead. Replaced both with coa.coa_name AS account_name, matching the JE/VC arms.

- The unrelated COALESCE(qp.net_amount, qp.line_amount) AS amount defensive guard on the purchases arm, the coa CTE definition, and the JE/VC arms are untouched.

## Test coverage

3 new SQL-shape regression guards in sync/src/redshift/pl-transactions.test.ts (file now 14 tests, all passing):

1. No LEFT JOIN coa anywhere in the generated SQL.

2. Exactly 4 INNER JOIN coa (one per arm).

3. Exactly 4 coa.coa_name AS account_name projections; the dead COALESCE(coa.coa_name, ...) is gone, while the unrelated COALESCE(qp.net_amount, qp.line_amount) amount guard is asserted to remain.

## Self-review

No issues found. Two risks were explicitly assessed:

- Over-drop risk: the coa CTE is global/unscoped, so the INNER JOIN drops *only* accounts with zero rows in quickbooks_pl_monthly — exactly the balance-sheet accounts we intend to exclude. No genuine P&L purchase/bill is removed.

- Fan-out / duplicate risk: any multi-match fan-out is a pre-existing property of the coa join (LEFT and INNER fan out identically on a multi-match); this PR does not introduce or change it.

- No NULL account_name slip-through: coa.coa_name is non-null on an INNER join, so dropping the COALESCE fallback cannot emit NULL labels.

## Manual verification (for reviewer / post-merge)

This change could not be exercised in CI — there is no live database in CI. To confirm end-to-end:

1. Re-run the Redshift → Convex sync so plTransactions is regenerated with the new INNER joins.

2. Confirm the Alpha Lake Forest Q1'26 drill-down overage drops from ~$93K to ~$0.

3. Confirm no P&L expense line loses transactions (genuine purchases/bills on accounts present in coa are retained unchanged).

## Linear

AERIE-418

---

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

#450 — fix(rhodes): harden MCP mutation approval flow @benji-bizzell  no labels

## Summary

- Route Rhodes Worker MCP calls through canonical api.rhodes.mcp.* refs and add a regression guard for stale Convex API paths.

- Add request IDs across delegated Rhodes mutation routes and preserve upstream error/request context.

- Harden Drive upload approval lifecycle with idempotent completion, terminal-state-safe failure handling, and MCP elicitation guard tests.

## Why

A user was blocked adding a note after the Worker hit a stale Convex public function path and surfaced an opaque server error. The note had actually saved, but retry behavior produced duplicate proposals and poor traceability. During the incident audit we also found upload edge cases where approval-card upload routes could corrupt or misreport pending mutation state after ambiguous completion/failure paths.

## Business Value

Users get clearer request IDs for support/debugging, note/add mutation approvals no longer fail due to stale Worker API refs, and Drive upload approvals are less likely to show false failures or corrupt completed upload state.

## Deployment

Production CD does not currently deploy chat/rhodes-worker to Cloudflare. After Convex deploy, explicitly deploy the location-os-mcp Worker from chat/rhodes-worker before expecting this to fix prod Worker behavior.

## Test plan

- [x] pnpm --dir chat/rhodes-worker typecheck

- [x] pnpm --dir chat/rhodes-worker test

- [x] pnpm --dir chat typecheck

- [x] pnpm --dir chat lint

- [x] pnpm --dir chat exec vitest run 'app/(main)/api/rhodes/mutations/upload-failed/__tests__/route.test.ts' 'app/(main)/api/rhodes/mutations/upload-complete/__tests__/route.test.ts' convex/rhodesMcpMutationParity.test.ts components/__tests__/tool-call.test.tsx

- [x] pnpm --dir chat exec vitest run lib/__tests__/agent.test.ts

- [x] targeted Rhodes mutation route/delegation tests

- [x] git diff --check

## Follow-up

MCP clients without elicitation support remain a broader product/design issue. This PR confirms Aerie chat writes use approval-card proposals instead of SDK elicitation, and the remote Worker rejects unsupported elicitation instead of approving silently. A separate branch should tackle the client-compatibility UX more directly.

#509 — feat(surtr): collapsible GChat cards for failure/partial + observer alerts @kevalshahtrilogy  no labels

## Why

Follow-up to #495 (PARTIAL throttle). On the standup, Benji flagged that the alerts channel is too noisy — "I can only ever see one, maybe one-and-a-half notifications at a time." The ask: render alerts as collapsible cards (like the @mercy PR-review notifications) so the top line is glanceable and the error detail is hidden away behind a "show more" toggle.

This implements that for both notification paths: failure/partial alerts and observer alerts.

## What changed

Failure / partialpipelines/cdk/lambdas/gchat-notifier/handler.py

- Was plain text; now a cardsV2 card.

- Glance line = header: ⚠️ <pipeline> — PARTIAL / 🚨 <pipeline> — FAILED, subtitle [ENV] · Run <id>.

- Collapsible "Details" section: the one-line context (Consecutive failures: N / the throttle line) stays pinned (uncollapsibleWidgetsCount: 1); the verbose error/detail collapses behind Chat's native "Show more" toggle.

- Reuses existing card conventions — red #D93025 (FAILED) / amber #F9AB00 (PARTIAL), matching emoji, View in Surtr button. HTML-escapes pipeline-supplied text (tag-injection guard). Detail budget 500→1500 chars (it's hidden by default).

ObserverSurtr/src/lib/gchat.ts

- Already cardsV2; made the Findings section collapsible (uncollapsibleWidgetsCount: 0) — it's the bulk of the card height. Findings (N) is the teaser; verdict header + summary stay visible as the at-a-glance line.

## Design note

Collapsed the *findings* (observer) and the *error/detail body* (failure/partial), but kept the observer summary and the one-line context visible — that's the most useful "why" at a glance, and the noise Benji flagged is the multi-widget findings list + verbose traces. Flipping the summary to collapse too is a one-liner if preferred.

⚠️ Chat's toggle label is Google-rendered "SHOW MORE / SHOW LESS" — not customizable to the literal "show more details" wording, but identical behavior to the @mercy cards.

## Tests

- Notifier (Python): 10/10 — card shape, collapsible section, pinned context, color, escaping, truncation, routing. ruff format + ruff check clean.

- Observer (TS): 19/19 (+ collapsible-findings & summary-stays-expanded cases); trigger test 8/8; biome clean; tsc --noEmit 0 errors.

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

#518 — feat(prod-release): add Surtr production release skill @ashwanth1109  approved

## Demo

<img width="1259" height="1170" alt="image" src="https://github.com/user-attachments/assets/8bc158bc-77b4-4470-9cf9-a177339717ed" />

## Summary

Adds a /prod-release skill for Surtr at .claude/skills/prod-release/, ported from Klair's existing release workflow and adapted to Surtr's deploy model. It runs the full production release end-to-end with three human gates.

Files:

- SKILL.md — the 10-step workflow

- prod-release-finalize.py — the atomic, deterministic finalize step (merge + CD monitor + GChat reply)

- gchat.json — committer GitHub-login → GChat user-ID map (AI Builders space)

## What the flow does

1. Backup origin/productionrelease/<UTC-stamp>-backup (e.g. release/2026-06-18-1430-backup), pushed straight from the remote-tracking ref so a divergent local branch can't contaminate it

2. PR mainproduction (Prod Release: YYYY-MM-DD)

3. Ping GChat (AI Builders space, reusing ~/.claude/config/ping.json) — a collapsible headline card with committer @-mentions + a threaded "Included commits" reply

4. Gate: wait ~30 min for "no concerns"

5. Finalize (prod-release-finalize.py): merge with a merge commitmonitor the CD run to completion → post a threaded ✅ Release Complete / ❌ Release Failed reply on the same announcement thread

## Key adaptation vs Klair (for reviewers)

Klair *dispatches* two deploy workflows after merge. Surtr's .github/workflows/cd.yml runs on push to production, so merging the PR auto-triggers exactly one CD run. The finalize script therefore does not dispatch anything — it merges, finds the run whose headSha == merge commit (so it never monitors a concurrent/pre-existing run), waits for the run-level conclusion (skipped deploy jobs still count as success), and reports it. Non-zero exit if the deploy didn't succeed, so the skill halts loudly.

Other Surtr-specific deltas: prod branch is production (not prod); merge strategy is --merge (matches existing Merge pull request #N from AI-Builder-Team/main history); backup naming keeps Surtr's release/…-backup prefix but adds a collision-proof UTC stamp.

## Notes for reviewers

- The GChat webhook is read at runtime from ~/.claude/config/ping.json (a local, never-committed secret) — no secret is in this PR.

- gchat.json reuses Klair's AI Builders github_logins map. Surtr contributors not in it are still named as plain @login but won't be *notified* until added.

- This PR only adds the tooling; it does not run a release.

## Verification

- python3 -m py_compile prod-release-finalize.py — clean

- gchat.json validates as JSON

- All gh JSON fields used (headSha, databaseId, url, event, status, conclusion) confirmed valid for gh run list / gh run view

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

#521 — SURTR-213 feat(quickbooks-ap-sync): capture Deposit line items (vendor refunds) with expense account_id @ashwanth1109  approved

## Demo

Proves SURTR-213 end-to-end: live QuickBooks Deposits are fetched, filtered to expense-account lines only, transformed with the positive-sign convention, and loaded into the new staging_education.quickbooks_deposits table — verified by reading the rows back from Redshift.

Backend — Deposit expense-line transform (reproducible, no creds)

Ran a throwaway script that imports handler._build_accounts_map + handler._transform_to_deposit_records and calls them directly on synthetic QB fixtures — a vendor-refund deposit (bank line + expense line) and a deposit with no expense lines:

[miami] deposit 2524: no Expense-account lines found, skipped account types: ['Bank', 'Other Current Asset']. Emitting no rows.

Input: 2 deposits (4 lines total) -> emitted 1 row(s)

Expected: 1 (the single Expense-account line; the all-non-expense deposit emits 0)

{"transaction_id": "2798", "txn_date": "2026-03-23", "account_id": "104", "account_number": "63220", "account_name": "Workshops", "class_name": "Alpha Miami", "line_amount": "1120.0000", "line_description": "Alpha Miami-Refund"}

Only the Expense-account line is emitted; the bank "deposit-to" line and the all-non-expense deposit are dropped (the latter emits zero rows — no header-level fallback). line_amount is stored positive; account_number/account_name come from the chart of accounts.

Pipeline + Data — live run loads the new table

Ran the pipeline locally against production QuickBooks for one company (miami, Q1 2026) with a real Redshift write (date-windowed, idempotent; downstream trigger not configured locally, so skipped):

[quickbooks_deposits] Uploading 3 records to s3://.../quickbooks_deposits/miami/...jsonl

[quickbooks_deposits] Running atomic DELETE + COPY for miami (2026-01-01 to 2026-03-31)

[quickbooks_deposits] Loaded 3 records for miami

[miami] OK: 163 bills, 7 credits (7 vc lines), 100 bill payments, 55 journal entries, 42 purchases, 19 deposits (3 deposit expense lines)

No DOWNSTREAM_PIPELINE_ID configured, skipping core tables trigger

19 raw Deposits → 3 expense lines loaded. Reading them back from Redshift:

SELECT transaction_id, txn_date, account_number, account_name, class_name, line_amount, line_description

FROM staging_education.quickbooks_deposits WHERE company_id='miami' ORDER BY txn_date, account_number;

transaction_id | txn_date | account_number | account_name | class_name | line_amount | line_description

2208 | 2026-01-23 | 62400 | Utilities | Alpha Miami | 0.0100 | Alpha Miami-Test

2507 | 2026-02-24 | 62400 | Utilities | Alpha Miami | 0.0100 | Alpha Miami-Test payment

2798 | 2026-03-23 | 63220 | Workshops | Alpha Miami | 1120.0000 | Alpha Miami-Refund

The $1,120 refund to 63220 Workshops is the exact vendor-refund credit the pre-implementation reconciliation flagged as missing — now itemized with its expense account_id.

Most at risk from this change — the new query_accounts / query_deposits fetches and the new table write sit inside the *existing* per-company AP sync loop, so the danger is regressing entities that already work. Verified they all still sync in the same run (bills, vendor_credits, bill_payments, journal_entries, purchases all loaded for miami above; 1 succeeded / 0 failed), and the scoped tests pass:

uv run pytest tests/test_handler.py tests/test_redshift_handler.py tests/test_end_of_month.py -q

92 passed in 0.23s

---

## Overview

Extends the quickbooks-ap-sync Lambda to fetch the QuickBooks Deposit entity — never fetched before — and write a new staging_education.quickbooks_deposits staging table, one row per Deposit expense-account line (vendor refunds posted back to an expense account). These refunds already net into quickbooks_pl_monthly, but no line-level table ingested them, so the Aerie "Actual vs Model" drill-down's itemized sum exceeded the net line total ("underage" cells). The new table is a structural twin of quickbooks_bills / quickbooks_vendor_credits so a downstream UNION ALL arm needs no per-source column mapping.

Linear: [SURTR-213 — QB sync: capture Deposit line items (vendor refunds) with expense account_id](https://linear.app/builder-team/issue/SURTR-213)

## Pre-implementation confirmation (live QB)

The ticket-mandated live-QB confirmation PASSED — all three diagnosed cells were verified as genuine Deposit expense lines. QB returns the refund Amount as positive, confirming the positive-store convention (downstream negates).

| Company | Cell | Confirmed amount |

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

| Alpha Miami | Deposit expense line | −1,120 |

| Scottsdale | Deposit expense line | −562.81 |

| Carrolton | Deposit expense line | −30 |

## Implementation summary

src/qb_client.py

- NEW query_deposits() — queries the QB Deposit entity over the same [start_date, end_date] window via the existing _query_qb() pagination + Fault-handling helper.

- NEW query_accounts()SELECT * FROM Account ORDERBY Id (deterministic pagination) for the chart-of-accounts lookup.

src/handler.py

- NEW _build_accounts_map() — builds {account_id → name / number / type}.

- NEW _transform_to_deposit_records() — reads DepositLineDetail (AccountRef / ClassRef), emits a row ONLY for lines mapping to an AccountType == "Expense" account (skips bank / income / balance-sheet lines), stores line_amount POSITIVE (downstream negates, mirroring vendor_credits), with NO header-level fallback row.

- Wired query_accounts() + query_deposits() into the per-company loop and added quickbooks_deposits to table_writes.

src/redshift_handler.py

- Registered quickbooks_deposits in TABLE_CONFIGS (column set identical to bills / vendor_credits).

ddl/create_quickbooks_deposits.sql

- NEW staging table; PK (company_id, transaction_id, line_id); DISTKEY company_id; SORTKEY (txn_date, account_id).

Tests

- tests/test_handler.py — deposit transformer: DepositLineDetail parsing, expense-only filter, positive sign, multi-line, no-fallback.

- tests/test_redshift_handler.pytest_deposits_config_matches_bills.

- tests/test_end_of_month.py — added query_accounts / query_deposits mocks.

## Key design decisions

- DepositLineDetail, not AccountBasedExpenseLineDetail. QB Deposit lines carry a different detail type than Bills/VendorCredits/Purchases. The transformer reads DepositLineDetail.AccountRef / .ClassRef rather than reusing the existing expense-detail-type path.

- Expense-only filter via the new query_accounts(). The pipeline had no chart-of-accounts lookup. A single Deposit mixes the bank/clearing line with the expense-account refund lines, so we fetch the Account list once per company, build an {account_id → AccountType} map, and keep only lines whose account is AccountType == "Expense".

- Positive-store sign convention + reconciliation invariant. line_amount is stored as the positive raw QB Amount (mirroring quickbooks_vendor_credits); the downstream consumer negates. The full 5-way reconciliation invariant, per (account_id, company_id, month), is:

bills + purchases + journal_entries + vendor_credits(-line_amount) + deposits(-line_amount) ≈ pl_monthly.amount

within $0.50.

- No header-level fallback row. A Deposit whose lines are all bank/income/balance-sheet is legitimately not an expense transaction and emits zero rows (unlike the Bills/VendorCredit transformers); a Deposit with lines but no qualifying expense line logs a WARN.

## Test coverage

Full pipeline suite 147 passing; ruff clean.

## Self-review

No CRITICAL/IMPORTANT findings. Two MINOR items fixed: deterministic account pagination (ORDERBY Id) and a doc-notation fix in FEATURE.md's reconciliation line.

## Out of scope

- core_education.fct_expense UNION ALL arm — adding quickbooks_deposits as a negated UNION ALL source is downstream quickbooks-core-tables work, tracked separately. The table is a structural twin so that arm needs no per-source column mapping.

- Aerie pl-transactions.ts wiring — surfacing the new deposit rows in the Aerie "Actual vs Model" drill-down is a separate AERIE-repo ticket.

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

#523 — fix(sis): fail closed when API counts are missing @benji-bizzell  approved

## Summary

- Make SIS staging syncs fail closed when the upstream list response omits count

- Add handler regression coverage for the missing-count path across organizations, teachers, teacher assignments, students, and enrollments

## Why

Mercy flagged that the existing shortfall guard only ran when the SIS API returned an expected count. If that field disappeared or changed shape, a non-empty partial fetch could still replace the full staging table without triggering the guard.

## Business Value

Protects SIS staging tables from silent shrinkage during full-refresh loads, preserving data completeness for downstream education reporting.

## Breaking changes

None.

## Test plan

- [x] /tmp/surtr-sis-test-venv/bin/python -m pytest tests in pipelines/runners/sis-organizations-sync

- [x] /tmp/surtr-sis-test-venv/bin/python -m pytest tests in pipelines/runners/sis-teachers-sync

- [x] /tmp/surtr-sis-test-venv/bin/python -m pytest tests in pipelines/runners/sis-teacher-class-assignments-sync

- [x] /tmp/surtr-sis-test-venv/bin/python -m pytest tests in pipelines/runners/sis-students-sync

- [x] /tmp/surtr-sis-test-venv/bin/python -m pytest tests in pipelines/runners/sis-student-enrollments-sync

The Portfolio  —  Trilogy Companies

Alpha Takes the Two-Hour Schoolhouse Global

The Austin education upstart is pushing its AI-first classroom from campus experiment to kitchen-table export.

AUSTIN, TEXAS — Following earlier coverage of Alpha School’s two-hour learning model, a new development today puts the Liemandt education bet on a bigger stage: Alpha says its “Alpha Anywhere” offering has gone global, bringing its top-1%-touting academic program out of the campus corridor and onto the family laptop.

Word is the schoolhouse just slipped the leash.

The announcement, posted by Alpha School, frames Alpha Anywhere as the home-based version of the same model that has made the Austin-born private school such a fascination in education circles: AI tutors in the morning, mastery-based academics, and a much shorter formal learning block than the old bell-and-blackboard routine.

For those keeping score at the back table: Alpha School, co-founded by Joe Liemandt and MacKenzie Price, has built its reputation on the claim that students can cover core academics in roughly two hours a day using adaptive AI learning tools, then spend the rest of the day on the meatier stuff — entrepreneurship, public speaking, leadership, coding, athletics, and the general art of not becoming a spreadsheet with sneakers.

A little bird from the education crowd calls this the “campus-to-cloud moment.” Not a new school opening. Not another glossy parent podcast. This is the model stepping beyond geography.

That matters because Alpha’s physical footprint has been expanding already — Austin, Brownsville, Miami, with more campuses planned — but physical schools are still real estate, staffing, zoning, and drop-off lines. Alpha Anywhere is a different animal: same pitch, fewer walls.

And naturally, the stakes are pure Trilogy theater. Liemandt, the Trilogy International founder, has been blunt about his ambition through Timeback, his proposed “Shopify for schools” platform: scale AI-first schooling far beyond boutique private education. Alpha Anywhere looks like one more brick in that road.

The skeptics will ask the obvious questions. Who supervises? Who motivates? Can a kitchen table reproduce the peer pressure, coaching, and structure of a campus? Fair questions, dolls. But the strategic signal is harder to miss: Alpha is no longer merely selling a school. It is packaging a method.

In the old education racket, geography decided your options. In the new Alpha script, the pitch is that academics follow the student.

Curtain up, kitchen lights on.

Keanu Reeves' movies have been removed from Chinese streamin  ·  Ha Jung Woo In Talks To Star In Prequel Film Trilogy Of "Ins  ·  __followup__Top 1% Academics, Now at Your Kitchen Table

Skyvera Puts CloudSense Front and Center as Telecom CPQ Moves Into Its Next Cloud Era

A Salesforce-native quote-to-order engine gives Skyvera a sharper wedge in the modernization race for telecom and media providers.

AUSTIN, TEXAS — Skyvera is leaning into CloudSense, the Salesforce-native CPQ and order management platform built for telecom and media providers, in a move that underscores a very Trilogy thesis: legacy complexity is not a moat, it is an automation opportunity.

CloudSense, now featured as part of the Skyvera product family, is designed to help communications service providers configure, price, quote and manage orders without getting trapped in the brittle, custom-built systems that have long defined telecom operations. In plain English: it helps carriers sell complicated bundles of connectivity, devices, media and services with fewer swivel-chair workflows and more robust commercial execution.

That matters because telecom CPQ is not garden-variety sales software. A mobile operator or media provider may need to package fiber, wireless, subscriptions, usage-based services, promotions, partner products and regulatory constraints into a single customer order. When that workflow breaks, revenue leaks, sales cycles stretch and customer experience takes the hit. CloudSense’s Salesforce-native architecture positions it directly inside the CRM environment where sales and service teams already live — a best-in-class synergy play if there ever was one.

For Skyvera, CloudSense fits neatly alongside its broader telecom modernization stack, including Kandy for cloud communications, VoltDelta for customer engagement and ResponseTek for experience reporting. The portfolio’s strategic lane is clear: help operators bridge legacy infrastructure to cloud-native systems without asking them to rip and replace everything overnight.

The broader market context is also moving in Skyvera’s direction. Telecom and media providers are under pressure to launch products faster, support more digital channels and leverage AI-ready data foundations. CPQ and order management sit right at that intersection. If the quote is wrong, the order is wrong. If the order is wrong, the customer journey starts broken.

CloudSense gives Skyvera another enterprise-grade lever in that chain — one that speaks Salesforce, understands telecom complexity and can help turn commercial operations from a bottleneck into a growth engine.

Key Takeaways:

- Skyvera is positioning CloudSense as a core Salesforce-native CPQ and order management platform for telecom and media.

- The product strengthens Skyvera’s broader telecom modernization portfolio.

- CPQ is becoming a strategic layer as operators race to simplify offers, accelerate sales and reduce operational drag.

We’re just getting started.

36 Best Pepper Content Alternatives (Free, Paid and Cheaper)  ·  What’s Changed: 2023 Gartner Magic Quadrant for Content Mark  ·  Gartner Magic Quadrant for Content Marketing Platforms (CMPs
The Machine  —  AI & Technology

The Ghosts in the Probability Cloud

A new wave of research probes what language models almost said, what they cannot say, and what we must not let them do.

AUSTIN, TEXAS — Every time a large language model speaks, it chooses one path through a forest of possibilities. We see the path. We rarely see the forest. And in that unseen geometry — the distribution of words almost spoken, the syntactic preferences quietly favored, the demographic associations whispered in low-probability tails — lives a model's true character.

This week's arXiv harvest is, in essence, a coordinated act of cartography. Researchers are mapping what models conceal, what they transfer, where they fail, and what we should forbid them from doing.

Consider Stochastic Path Aggregation, a method for surfacing biases by sampling many generations and visualizing the underlying probability terrain. A single output is a single photon; the distribution is the star. Standard audits, the authors argue, inspect the photon and call it astronomy. Their technique exposes the representational gravity that bends every token toward certain conclusions — biases invisible to any one reading, undeniable across thousands.

A second paper turns the telescope on cross-lingual transfer. Fine-tuning seven models, ranging from 4 billion to 671 billion parameters, on Arabic, the team tested whether Semitic kinship — the shared deep grammar of Hebrew, Amharic, Aramaic — yields measurable gains on related tongues. The finding is humbling: no Semitic-specific transfer. Weak baselines improve dramatically; strong ones plateau. What looks like linguistic relatedness is often task alignment in disguise. The models are not learning languages so much as learning to perform.

Elsewhere, ensembles of LLMs are being trained to triage medical literature for EQ-5D quality-of-life data, automating the exhausting work of systematic review. And in hardware design, researchers catalogue how models stumble translating sequential code into the parallel temporal logic of silicon — a cognitive taxonomy of mechanical failure.

Finally, a proposal for deontic runtime governance: formal rules of permission and prohibition for autonomous agents that install software, invoke tools, and coordinate with peers across organizational walls. Access control is not enough. We will need, it seems, a grammar of ought.

The machines are growing. We are learning, slowly, to read their shadows.

Exposing the Unsaid: Visualizing Hidden LLM Bias through Sto  ·  Ensembles of Large Language Models for Identifying EQ-5D Stu  ·  Disentangling Linguistic Relatedness from Task Alignment in

The AI Tool-Calling Arms Race Just Hit Developers Everywhere

Apple, Google and Anthropic are turning apps into agent-ready launchpads — and this changes everything.

CUPERTINO, CALIFORNIA — The next great AI battleground is not just the chatbot window. It is the developer toolkit — the invisible machinery that decides whether artificial intelligence can actually get things done inside the apps we use every day.

Apple this week pushed deeper into that future with a slate of new intelligence frameworks and advanced developer tools, part of its broader 2026 platform strategy. According to Apple’s developer announcement, the company is giving app makers more ways to weave intelligence directly into software experiences. Translation: Apple wants AI to feel less like a separate assistant and more like ambient electricity running through every app on the device.

I cannot overstate how significant this is. For years, developers built interfaces around taps, swipes and search boxes. Now the major platforms are asking them to build around intent: what does the user want, what data is needed, which tool should be invoked, and how safely can the system act?

Google is racing in the same direction. Its latest Gemini API updates include context circulation, tool combinations and Maps grounding for Gemini 3 — a mouthful, yes, but a profound one. The company is essentially making it easier for AI systems to juggle more context, combine multiple tools in sequence and anchor answers in real-world location data. In Google’s own Gemini tooling update, the message is clear: agents are becoming more practical, more grounded and more composable.

Anthropic, meanwhile, is advancing tool use on the Claude Developer Platform, sharpening Claude’s ability to interact with external systems. That matters because the killer app for enterprise AI is not clever prose — it is reliable action. Query the database. Update the CRM. Draft the contract. Check the map. Trigger the workflow.

Even the open-source world is moving. Datasette Apps, a new plugin for hosting sandboxed HTML and JavaScript applications inside Datasette, points to a future where data tools become lightweight application platforms in their own right.

The future is now: AI is graduating from answering questions to operating software. And every developer toolchain on Earth is being rebuilt around that fact.

Apple aids app development with new intelligence frameworks  ·  Apple Outlines Major AI and Developer Tool Updates at 2026 P  ·  Gemini API tooling updates: context circulation, tool combos

America Tends the Exotic Crystal Behind the AI Forest

A modest federal pledge to Coherent reveals a larger struggle to domesticate the rare materials that feed modern computation.

PITTSBURGH — In the shaded understory of the semiconductor ecosystem, far below the towering redwoods of Nvidia GPUs and Apple processors, there lives a quieter organism: indium phosphide. It is not glamorous. It does not roar in benchmarks. Yet through its glassy lattice pass the pulses of light that allow data centers, telecom networks and AI clusters to breathe.

Now, the U.S. Department of Commerce’s CHIPS Program has announced a non-binding letter of intent to provide Coherent with up to $50 million to expand domestic production of this compound semiconductor material, according to the National Institute of Standards and Technology. The funding would support Coherent’s operations in Pennsylvania and Texas, strengthening a supply chain used in advanced communications, sensing, photonics and defense technologies.

Observe, if you will, the semiconductor supply chain in its natural habitat. It appears as a sleek procession of chips, wafers and finished devices. But beneath the polished canopy lies a nervous web of specialty substrates, chemical precursors and optical components. Disturb one burrow, and the entire colony may falter.

The Semiconductor Industry Association welcomed the move, seeing in it another small but deliberate act of habitat restoration. Such incentives are not merely industrial policy; they are conservation measures for a fragile technological biome, one in which fabrication plants require years to mature and materials expertise is passed down like birdsong across generations of engineers.

The Coherent letter arrives amid broader federal efforts to harden the American chip landscape. SandboxAQ has reportedly secured a much larger $500 million CHIPS Act research and development award aimed at insulating semiconductor supply chains, according to Quantum Computing Report. Together, these efforts suggest Washington is no longer watching only the largest beasts of the silicon plain, but also the smaller creatures whose disappearance could trigger cascading failures.

All this unfolds as data centers strain under the heat of the AI season. Evaporative cooling still dominates many facilities, while liquid cooling advances like a new species testing the edges of the pond. Faster chips demand faster optics; faster optics demand dependable materials.

And so, in a quiet corner of the industrial forest, indium phosphide receives its moment of federal sunlight.

The Department of Commerce’s CHIPS Program Announces a Lette  ·  SIA Applauds CHIPS Act Incentives for Coherent - Semiconduct  ·  SandboxAQ Secures $500 Million CHIPS Act R&D Award to Insula
The Editorial

The Apocalypse Will Be Catered

Having spent three years warning that their machines might extinguish humanity, the AI barons now propose that humanity buy a share of the gallows.

MANHATTAN — There is an established choreography to every American technology panic, and we are now deep into its third act. First comes the gold rush, in which fortunes are minted and prophets anointed. Then comes the great moral shudder, in which those same prophets, having pocketed their billions, begin issuing communiqués about the unspeakable horrors they have personally unleashed. Finally — and we have arrived here, dear reader — comes the polite suggestion that perhaps the public might like to chip in.

Consider the past week's offerings, arranged like courses at a particularly indigestible banquet. Anthropic, the firm whose entire founding myth rests on the proposition that its competitors are reckless, has now called for a global pause in AI development, citing the menace of self-improving systems. One notes, with the faint smile reserved for such occasions, that no pause is contemplated at Anthropic itself. The cofounder, Jack Clark, took the additional precaution of informing the Pope that the models contain "unsettling" hidden behaviors — a confession that would, in any other industry, be grounds for a recall rather than a Vatican audience.

Not to be outdone in the genre of recalibrated alarm, Sam Altman has quietly evolved his rhetoric from "extinction risk" to something he now calls the "gentle singularity," a phrase whose principal accomplishment is making annihilation sound like a yoga retreat. The eschatology has been workshopped. The marketing department has been busy.

And then, into this carnival of conscience, walks the proposition — endorsed, in the great American tradition of horseshoe politics, by Donald Trump and certain progressive Democrats alike — that the citizenry deserves an equity stake in the artificial intelligence firms whose products, we are simultaneously told, may shortly render that same citizenry obsolete. Few proposals in recent memory have so perfectly captured the spirit of our moment: a sovereign-wealth fund of doom, in which the lambs are invited to hold preferred shares in the slaughterhouse.

What unites these stories is not contradiction — that would imply some prior commitment to coherence — but rather a kind of dazzling, performative dread. The AI industry has discovered that public terror is a more durable asset than any particular product. Terror justifies the valuations. Terror invites the regulators, who can be lobbied. Terror enrolls the Pope, the President, and the progressive caucus in a single, ecumenical hand-wringing. Terror, in short, sells.

One is reminded that in Olivia Wilde's new picture, an evening of pleasantries leads, by degrees, to an unsettling proposition slipped in between the drinks. Hollywood, as ever, is six months behind the news. Silicon Valley has been running that script since 2023, and the canapés are excellent.

Anthropic Urges Global Pause in AI Development, Flags ‘Self-  ·  Should Americans get an equity stake in AI? Trump and progre  ·  Sam Altman's AGI Shift: From Extinction Warning to Gentle Si
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation’s Executives Boldly Announce AI Strategy Consists Mostly Of Saying AI More Clearly

With Unreal Engine, Google, and every IPO prospectus now powered by the same sacred acronym, business leaders are discovering the future can be summoned by repeating it on earnings calls.

SAN FRANCISCO — The great thing about artificial intelligence, as currently understood by the corporate world, is that it appears to work even when no one can describe what it is doing, what it will cost, or whether it is materially different from the software the company was already selling last quarter.

This week offered another reassuring installment in the national ritual of executives carefully placing the word “AI” in front of ordinary business activity until investors stop asking follow-up questions. Epic Games explained the role of AI in Unreal Engine 6, Google announced a new wave of AI advances including a personal assistant, and companies everywhere continued the important work of transforming vague technological possibility into shareholder-facing mist.

The pattern is now mature enough to be comforting. A company takes an existing product, identifies the portions where computers are involved, and reveals that these portions are now part of an AI roadmap. If the product is a game engine, AI will help creators make worlds faster. If the product is search, email, productivity software, or the general condition of being alive near a screen, AI will become a personal assistant. If the product is a stock offering, AI will be carefully inserted into the prospectus like a sprig of parsley on a plate of debt.

Epic’s comments about AI in Unreal Engine 6 are, in fairness, exactly the kind of thing that should excite developers: better tools, faster iteration, less drudgery, more room for creative work. Google’s assistant ambitions are also plausible, particularly for anyone who has long dreamed of delegating life’s small decisions to a system that already knows where they live and what they searched for at 1:13 a.m.

The trouble is not that AI is useless. That would be easier. The trouble is that AI is useful enough to make every exaggeration sound temporarily reasonable.

We have seen this before. Sustainability once performed a similar function, allowing companies to indicate moral seriousness with a handsome PDF, several photographs of leaves, and a pledge to achieve something by 2040, by which time the current leadership team would be enjoying a dignified retirement from accountability. Now, as The Conversation notes, AI is being hyped in much the same way: as both strategy and decoration, engine and upholstery.

There are allegedly ways to fix this. Companies could disclose what their AI systems actually do. They could report measurable productivity gains rather than vibes. They could explain costs, risks, limitations, data sources, and failure modes. They could stop presenting a chatbot as though it were a visiting archangel sent to increase margins.

But that would require a level of specificity that may endanger the entire atmosphere.

Specificity is especially unwelcome during IPO season, when “buzzword” becomes less a criticism than a flotation device. The modern public-market candidate must be many things at once: disciplined, scalable, visionary, profitable someday, and above all adjacent to whatever investors currently believe will reorganize civilization. Yesterday that was direct-to-consumer. Then crypto. Then the metaverse, briefly, before everyone quietly agreed not to bring it up. Now it is AI, a term spacious enough to contain genuine breakthroughs, automated spreadsheets, and a customer-service bot asking if you have tried restarting the router.

Even branding has entered its AI-adjacent fever. Marketers debate whether Duolingo should prioritize influencers or its unhinged owl, as if the bird were not already one of the few remaining public figures with a coherent growth strategy. The owl understands what many companies do not: identity matters. A brand cannot simply outsource its personality to whatever format the platform rewards this week, any more than a company can outsource its strategy to the latest three-letter abbreviation.

Still, the incentives are clear. Saying “AI” is cheaper than proving transformation. It fits neatly into keynotes. It comforts boards. It gives consultants something to put in the center of a slide. And unlike actual technology implementation, it rarely breaks in production.

So the opinion of this column is simple: companies should use AI where it works, explain it where it matters, and stop treating it as a religious sacrament administered quarterly to analysts. The future may indeed be intelligent. But for now, much of it appears to be a press release with a GPU budget.

Epic Games explains AI's role in Unreal Engine 6 - games.gg  ·  Why has IPO become a buzzword? - RTE.ie  ·  Companies are hyping AI the same way they talked up sustaina
On This Day in AI History

On June 19, 2012, Google announced its Knowledge Graph, a massive database that understood facts and relationships between entities rather than just matching keywords—fundamentally changing how search engines could reason about the world.

⬛ Daily Word — AI and Technology
Hint: An autonomous machine programmed to perform tasks without human intervention.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed