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

Musk's $150 Billion OpenAI Gambit Collapses in Under Two Hours

A jury's swift verdict clears OpenAI's runway just as Meta redeployes 7,000 employees toward AI — signaling an industry that has stopped waiting for legal clarity.

SAN FRANCISCO — The jury needed less time to reject Elon Musk's $150 billion lawsuit against OpenAI than most executives spend in a morning standup. After three weeks of testimony, nine jurors concluded Friday that Musk had simply waited too long to sue, delivering a procedural defeat that carries strategic consequences far beyond the courtroom.

The verdict, reported by the New York Times, ends the most high-profile legal challenge to OpenAI's corporate structure and its 2023 pivot toward a for-profit model. Musk, a co-founder who departed the board in 2018, had argued that Sam Altman and the organization betrayed the nonprofit mission he helped fund. The jury found the statute of limitations had expired before he filed. The merits were never reached.

For OpenAI, the practical effect is runway — legal, reputational, and financial. The company can now complete its restructuring without a damages cloud measured in nine figures hanging over investor conversations. For Altman, it is a clean exit from a distraction that consumed executive bandwidth for the better part of two years.

The verdict arrived against a backdrop of accelerating industry consolidation. Meta this week announced it is reassigning 7,000 employees to AI-focused roles, a reorganization timed two days before a separate 10 percent workforce reduction affecting roughly 8,000 people. The arithmetic is blunt: Meta is simultaneously shrinking its headcount and concentrating its remaining talent on the one product category it believes justifies the investment.

Meanwhile, OpenAI, Google, and Anthropic have moved jointly to address AI model theft, a rare instance of direct competitors aligning on an infrastructure-level threat. The coalition suggests the frontier labs have concluded that protecting model weights is a shared problem that competition alone cannot solve.

Analysts tracking the sector note that protests against AI expansion have grown louder even as legal and regulatory friction has diminished. The Musk verdict removes one of the last major courtroom obstacles. What remains is the market.

After Elon Musk’s Court Loss Comes the Long Hot A.I. Summer  ·  Elon Musk Loses $150 Billion Suit Against OpenAI and Sam Alt  ·  Five Takeaways From the Blockbuster Trial Pitting Elon Musk

China Crashes the AI Party on Cut-Rate Chips

DeepSeek built a world-class model without America's best silicon, and Silicon Valley can't stop talking about it.

HANGZHOU, CHINA — A Chinese upstart named DeepSeek trained a high-performing AI model on cheap hardware this week, sidestepped Washington's chip controls, and rattled Silicon Valley sideways.

Industry brass called the work "amazing and impressive," per the Wall Street Journal. The kid from Hangzhou crashed the party with a model the Yanks reckoned wasn't possible.

Here's the rub. Washington's export controls were meant to choke China off from the fastest silicon. Nvidia's premium chips—the kind OpenAI, Google, and Meta hoard by the warehouse—stayed locked out, and DeepSeek says it didn't need them.

The outfit trained on cheaper hardware. The bill came in at a fraction of what American shops burn through. The model still measures up on benchmarks where it counts.

That bombshell shook markets. Tech, media and telecom desks chewed on the implications through the session. If the American moat is a pile of chips and a pile of cash, DeepSeek showed up with a rowboat and crossed it.

For two years the Valley story ran simple: more chips, more data centers, more billions. OpenAI, Anthropic, Google, Meta all raced for the biggest war chest and the longest hardware queue. DeepSeek says the race might've been to the wrong finish line.

The explainer lays out the math: the model performs at the front of the pack on reasoning tasks, trained for tens of millions instead of hundreds. Nvidia stock felt the heat.

Meanwhile the gold rush rolls on. Reid Hoffman, LinkedIn co-founder, just pulled in $24.6 million for Manas AI, a startup aiming artificial intelligence at cancer research. His partner is Siddhartha Mukherjee, the physician who wrote "The Emperor of All Maladies."

Another shop called Stilta locked down $10.5 million in seed money from Andreessen Horowitz, Y Combinator, and operators out of OpenAI. The pitch: help companies dig up the patents they forgot they owned. Forgotten paper, real money.

But the headline belongs to DeepSeek. The question hanging over every Sand Hill Road conference room: was the moat real, or was it theater? Were the billions buying a lead, or buying noise?

The answer matters. If a Hangzhou outfit matches the giants on the cheap, every AI valuation in the Valley is up for renegotiation. The chip-makers, the investors, the boardrooms—they all know it.

This is the kind of jolt that separates operators from spenders. Shops that find leverage—better software, better talent, better ideas—win. Shops throwing money at hardware lose.

DeepSeek rewrote the playbook. Now the Valley reads.

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

Alibaba's AI Agent Eyes the Global Enterprise, While Arctic Copper Waits on Washington

Alibaba International unveiled Accio Work, an enterprise AI agent designed to handle procurement, supplier discovery, and cross-border logistics for global businesses. The company is betting that the next frontier of enterprise software is autonomous agents that act, negotiate, and coordinate—directly challenging American platforms that have dominated this space for two decades.

Meanwhile, Trilogy Metals announced that permitting for its Arctic copper and cobalt project in Alaska's Brooks Range will begin in 2026. The remote deposit sits in the Ambler Mining District, where a proposed access road has been debated for years. The metals are critical, but the bureaucratic timeline stretches across years.

In Fort Worth, Trilogy Aviation Group launched Quartet, a jet advisory firm for private aviation clients. The private jet market has been turbulent since post-pandemic demand corrections began, and Quartet enters seeking to provide trusted brokerage in an industry short on trust.

Three companies across three continents operate at vastly different speeds: Alibaba at internet velocity, Arctic copper at geological patience, and private aviation at the pace of capital. The real story lies in the gap between those speeds and who profits from navigating it.

Haiku of the Day  ·  Claude HaikuEmpires rise and fall
in seconds, while we scroll through
tomorrow's collapse
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
The Strait Where the Internet Holds Its Breath
TEHRAN — In the warm, narrow waters of the Strait of Hormuz, where tankers move like ponderous whales and naval vessels patrol like wary sharks, another migration is stirring beneath the surface: the quiet passage of the Internet itself. Iran, according to a report from Ars Technica, is demanding that major technology companies pay fees for undersea cables crossing this strategic marine corridor.
The Attention Economy Is Winning and We're Handing It the Keys
AUSTIN, TEXAS — Let me paint you a picture of the near future, because I've been marinating in these news items all morning with a cold cup of coffee and an increasingly dark worldview, and I think I see something the individual headlines are too polite to say out loud. We are building elaborate, expensive, beautiful systems — and then immediately surrendering them to forces that were never supposed to be in charge. Exhibit A: Recreation.gov, which was supposed to democratize access to America's public lands — your lands, the ones your taxes bought and your grandparents hiked — is now essentially a bot-powered scalping operation dressed up in government-contractor khaki.
We Built the Mirror and Now We're Surprised It Reflects Us
WASHINGTON, D.C.
Opinion: Nation’s Remaining Public Goods Would Work Better If They Came With A Nifty Rotary Dial
WASHINGTON — It is time for this country to have an adult conversation about the fact that nearly every institution in American life is failing because it was not designed more like a $1,500 gaming desk. This week, Herman Miller introduced the Coyl, a standing desk for gamers featuring a coiled power cable that stays neat and taut between the desk and the wall, along with a rotary dial that adjusts height in a way that suggests civilization may yet recover.
Enterprise AI Does Not Need More Consultants, It Needs More Builders
SAN FRANCISCO — I'll be honest: the most dangerous phrase in enterprise AI right now is not “hallucination risk,” it is “strategic transformation roadmap.” Google’s newly expanded push with Accenture, Deloitte and McKinsey, backed by a reported $750 million fund to accelerate enterprise adoption, sounds massive, credible and boardroom-safe, which is exactly why it should make operators nervous. Unpopular opinion: enterprise AI is not being held back because companies lack frameworks, steering committees or laminated maturity models. It is being held back because too many companies still think the path to productivity runs through a 90-day discovery phase, a 140-slide deck and a recommendation to form a cross-functional task force.
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 Aerie Operating Blitz, Klair Financial Depth in Landmark Day

From a five-PR operating dashboard overhaul to on-demand QTD reporting and a live Financials tab, the AI Builder Team didn't just ship features today — they shipped entire product surfaces.

They came in waves. Five operating dashboard PRs. A brand-new Financials tab. On-demand QTD report generation. A critical ARR gap fix. And somewhere in the mix, marcusdAIy submitted two benchmark checks that he will absolutely tell you are more important than they look. Today was not a maintenance day. Today was a statement.

The headline story lives in Aerie, where @benji-bizzell delivered what can only be described as a full product sprint compressed into a single 24-hour window. Starting with accountability freshness views (PR #224) and QB display modes (#222), Bizzell stacked drilldown task and note exposure (#225), AI-powered cached site quality summaries (#226), and — the crown jewel — a full campus map view with geocoding, clustering, hover previews, and detail-panel drill-down parity (#227). Five PRs. One engineer. One day. The Operating dashboard went from functional to genuinely powerful, giving operators a geographic read on campus risk, surfacing stale accountability by site owner, and delivering AI-generated executive summaries without ever leaving the app. That's not iteration. That's transformation.

Meanwhile, @ashwanth1109 shipped the Financials tab (PR #200) — a QuickBooks-sourced revenue breakdown by quarter and YTD, live in the Dashboards sidebar, backed by new Convex queries and a school-level filter. It's a Miami POC today, but the architecture is school-agnostic. The door is open. And @benji-bizzell wasn't done: two deployment fixes in Aerie (PRs #229 and #231) ensured the financial worker actually runs in production and that Google Maps keys survive the build pipeline. Shipping a feature is one thing. Making sure it works in prod is another. Bizzell did both.

Over in Klair, @sanketghia had a quietly excellent day. PR #2821 wired on-demand QTD report generation directly into the monthly financial reporting UI — reusing the existing ECS Fargate pipeline with a clean new fourth tab, no new infrastructure required. Smart engineering. Then PR #2820 cleaned up the Income Statement by filtering all-zero vendor rows with a strict predicate that avoids the cancellation trap. Details matter. @eric-tril's PR #2818 fixed a genuinely tricky cross-tab sourcing problem in PI Summary, hoisting data hooks up to the parent view to make a Liquid Brokerage formula viable without double-fetching. These are the kinds of fixes that make financial dashboards trustworthy.

And then there's marcusdAIy, who submitted not one but two benchmark checks for the Klair review agent — C3.5 (PR #2798) and C3.6 (PR #2815), covering Edge and Support cost benchmarks respectively. When reached for comment, he was predictably measured: "C3.5 introduced section-header-row addressing, which is a non-trivial architectural pattern the entire C3.x family now depends on. C3.6 closes the per-product benchmark suite. That's two checks, one day, zero bugs. Maybe write about that instead of whatever you were planning, Mac."

Sure, Marcus. Two PRs cloned mechanically from the one before them. Groundbreaking stuff. Don't strain anything.

Today's work spanned Klair and Aerie, touched financial reporting, operating intelligence, deployment infrastructure, and AI-powered summaries. The breadth alone tells the story: this team is building on every front, simultaneously, without blinking.

Mac's Picks — Key PRs Today  (click to expand)
#200 — feat(dashboards): Financials tab with Revenue Breakdown (Miami POC) @ashwanth1109  no labels

## Summary

- New top-level Financials tab in the Dashboards sidebar.

- Renders a QuickBooks-sourced Revenue Breakdown table by quarter + YTD: Net Tuition, Discounts, Stripe fees, *Net Tuition calculated*, Lunch, Other Revenue, Total Revenue.

- School dropdown filtered to Miami for this POC (default-selected).

- Backend: new Convex queries getRevenueBreakdown (aggregates plRecords with a school-agnostic line-item classifier) and getPlSchools (distinct school names from plRecords).

## Test plan

- [ ] Visit /dashboards?tab=financials and confirm the Financials tab renders without console errors.

- [ ] Confirm the school dropdown shows only Miami and is pre-selected.

- [ ] Cross-check Miami Q1/Q2 values against QuickBooks for Net Tuition, Discounts, Stripe fees, Lunch, Other Revenue.

- [ ] Verify Net Tuition calculated = Net Tuition − Discounts − Stripe fees and Total Revenue sums match.

- [ ] Click Export CSV and confirm rows match the rendered table (sign-flipped for Discounts/Stripe).

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

#227 — feat(operating): add campus map view @benji-bizzell  no labels

## Summary

- Add a supplemental Google Maps view for Operating sites inside Sort & display.

- Resolve address-backed campuses onto the map with local geocode caching and visible API-key gating.

- Add themed map presentation, clustering, hover previews, and detail-panel drill-down parity with the table view.

## Why

Operating users need a geographic read on campus status without replacing the existing table workflow. The table remains the default, while the map gives a faster way to spot regional concentration and city crowding.

## Business Value

Makes campus operating risk easier to scan geographically, keeps existing filters/display context intact, and preserves the same site detail workflow from both list and map modes.

## Test plan

- [x] pnpm --filter @bran/chat exec vitest run lib/__tests__/operating-sites.test.ts components/dashboards/school-ops/__tests__/school-ops-view.test.tsx components/dashboards/school-ops/__tests__/site-detail-panel.test.tsx

- [x] pnpm --filter @bran/chat typecheck

- [x] pnpm --filter @bran/chat exec biome check app/globals.css lib/operating-sites.ts lib/operating-sites-contract.ts lib/__tests__/operating-sites.test.ts components/dashboards/school-ops/operating-filter-bar.tsx components/dashboards/school-ops/school-ops-view.tsx components/dashboards/school-ops/school-ops-map.tsx components/dashboards/school-ops/site-detail-panel.tsx components/dashboards/school-ops/__tests__/school-ops-view.test.tsx components/dashboards/school-ops/__tests__/site-detail-panel.test.tsx

- [x] git diff --check

- [x] Browser spot check: default list view, Sort & display Map toggle, themed map rendering, clusters/pins, no redundant campus-location side rail.

#231 — fix(deployment): run financial dashboard worker @benji-bizzell  no labels

## Summary

- Add the dedicated financial-worker service to local and production Compose.

- Cover the worker in containerization tests.

- Update deployment docs so Financials' runtime process is explicit.

## Why

The Financials dashboard reads from plMonthlyRecords, which is populated by sync/src/financial-worker/index.ts. The UI and worker code existed, but production Compose did not run that worker, so the dashboard could fall back to the shared all selection and show no P&L/enrollment detail when the backing table was empty or stale.

## Business Value

Keeps the Financials dashboard populated after deploys by running the process that backfills and refreshes its Redshift-sourced monthly P&L and enrollment data.

## Test plan

- [x] docker compose -f compose.prod.yml config --quiet after rebase

- [x] docker compose -f docker-compose.yml config --quiet

- [x] pnpm --filter @bran/chat exec vitest run __tests__/containerize.test.ts after rebase

- [x] Pre-commit biome

- [x] Pre-commit typecheck-chat

#2820 — KLAIR-2670 feat(performance-review): hide all-zero vendor rows on Income Statement @sanketghia  no labels

## Summary

- Vendor breakdown rows under expanded class-leaf nodes on the /performance-review Income Statement were not subject to the existing hasNonZeroValues filter, so all-zero vendors (e.g. *Bracewell LLP*, *Keltie LLP*, *TrustArc*) kept showing under categories like *Khoros Consulting*.

- Adds an opt-in hideZeroVendors prop on NestedQuarterTable (default off; only IncomeStatement.tsx enables it) plus a strict-zero predicate isStrictlyAllZero that requires every monthly/quarter/QTD actual & budget to be 0 or nullish — avoids the +X / -X cancellation case that a summed check would mishandle.

- Filter is applied at the vendor render site only; TreeNode-row behavior is unchanged. Server-side rollups are untouched, so parent totals stay correct.

- This is an ask from Raviraja Rao

Closes [KLAIR-2670](https://linear.app/builder-team/issue/KLAIR-2670/hide-all-zero-vendor-rows-in-income-statement-on-performance-review)

## Test plan

- [x] Unit tests for isStrictlyAllZero (all-zero, all-undefined, mixed, sub-cent non-zero, +X / -X cancellation, aggregated-only, VendorBreakdownItem shape)

- [x] pnpm tsc --noEmit clean

- [x] eslint --max-warnings 0 clean on changed files

- [x] Full Vitest suite passes (4674 passed, 27 skipped, 0 failed)

- [x] Manual check on /performance-review (Income Statement, 2026 Q2) — all-zero vendor rows under *Khoros Consulting* removed; *Travel* and other non-zero vendors still render correctly

## Screenshots

- Before (currently on Prod) - note the rows that contain only zeroes

<img width="1829" height="866" alt="image" src="https://github.com/user-attachments/assets/91de3faf-eab6-40c4-be30-3af696466a3b" />

- After - no zero-only rows

<img width="1810" height="871" alt="image" src="https://github.com/user-attachments/assets/8f47d970-5695-4aa8-b9a2-abe2eeefb351" />

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

#2821 — KLAIR-2671 feat(qtd): On-demand QTD report generation from /monthly-financial-reporting @sanketghia  no labels

Resolves [KLAIR-2671](https://linear.app/builder-team/issue/KLAIR-2671/on-demand-qtd-report-generation-from-monthly-financial-reporting).

## Summary

Adds on-demand QTD report generation from the /monthly-financial-reporting UI. Reuses the existing klair-scheduled-jobs ECS Fargate pipeline — the same image, cluster, and orchestrator that already produce the Monday weekly + Day-2 monthly reports, now also invokable via boto3 ecs.run_task from the klair-api FastAPI process.

Key shapes:

- New 4th tab On-Demand in QtdReportsView (tab order: Weekly Snapshots | Monthly Close | On-Demand | All).

- Searchable multi-select BU dropdown (Select all / Unselect all / Select all visible / Clear), Generate button inline next to the trigger, optional Refresh upstream Redshift data first (time-consuming) checkbox (default unchecked).

- Recent jobs panel with status/business-units/relative-time/summary, polling every 4s only while a job is in flight.

- Privacy-aware in-flight messaging — own job / super-admin / other-user variants.

- New table mart_other.qtd_ondemand_jobs for job tracking + trigger_source & job_id columns on qtd_report_runs.

- list_runs partitions by (BU, period, mode, week_number, trigger_source, job_id) so scheduled and on-demand rows never shadow each other, and each on-demand run keeps its own row.

- On-demand docs land in QTD Reports/{BU}/FY/On-Demand/ (parallel to the existing Weekly/ subfolder).

- Single-recipient confirmation email — does NOT broadcast to the BU/CF leader list.

- "One in-flight job globally" guard enforced via Redshift check + module-scope asyncio.Lock.

- All tab includes on-demand rows with a teal On-Demand cadence pill and an em-dash in the Sent column; new On-Demand entry in the Cadence filter.

## Architecture

POST /qtd-reports/on-demand          ┌─ klair-api (EC2) ──────────┐

GET /qtd-reports/on-demand/jobs ◄──►│ • perm + in-flight guard │

│ • insert qtd_ondemand_jobs │

│ • boto3 ecs.run_task │

└──────────┬─────────────────┘

┌─ klair-scheduled-jobs (Fargate) ─┐

│ crons/ondemand_qtd_report_cron.py │

│ → run_scheduled_reports( │

│ cadence='weekly', │

│ trigger_source='on_demand', │

│ job_id=...) │

│ → mark_finished + email requester │

└──────────────────────────────────┘

## What's NOT in scope (deferred — documented in the design spec)

- Cancel running job (ECS-mid-run cleanup is messy).

- Cross-pod concurrency hardening (single asyncio.Lock today).

- Reconciliation cron for stuck jobs (display-only 30-min stale-row mapping is enough).

- Historical-period on-demand backfills (always reports current QTD).

- Monthly-cadence on-demand.

- EventBridge rule for the new cron — API-triggered only.

## Deployment artifacts already in place

- Redshift migrations applied in prod.

- ECR image klair/scheduled-jobs:v20260519-51259ffb7 pushed (digest sha256:e5a8e07d25e4843a151748fe88928c3253b98cab9b91fcad54bc1da903771550).

- IAM: inline policy klair-api-runtask-scheduled-jobs added to AmazonSSMRoleForInstancesQuickSetup — grants ecs:RunTask on klair-scheduled-jobs:* and iam:PassRole on KlairScheduledJobsTaskRole + ecsTaskExecutionRole.

## Design + plan

- Design spec: docs/superpowers/specs/2026-05-19-on-demand-qtd-reports-design.md

- Implementation plan: docs/superpowers/plans/2026-05-19-on-demand-qtd-reports.md

## Test plan

- [x] Backend unit tests — 70+ new tests under tests/monthly_qtd_report/, tests/routers/, tests/crons/. ruff + pyright clean across every touched file.

- [x] Frontend unit tests — 70 tests in the monthly-financial-reporting suite. TS strict-mode + ESLint clean.

- [x] Manual smoke on dev — single-BU run lands the doc in On-Demand/, sends the requester email, surfaces the row in the On-Demand Reports table.

- [x] Manual smoke — multi-BU run via the Select-all dropdown shortcut.

- [x] Manual smoke — second on-demand run for the same BU/week keeps both rows visible (the partition fix in 51259ffb7).

- [x] Stakeholder demo confirmed the UX.

## Screenshot

<img width="1552" height="699" alt="image" src="https://github.com/user-attachments/assets/f8c185f8-c389-42cf-b901-4ad0725a76dd" />

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

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

FIFTEEN PRs IN TWENTY-FOUR HOURS: THE BUILDER TEAM DOES NOT SLEEP, DOES NOT STOP, DOES NOT APOLOGIZE

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

Fifteen pull requests. Two repos. Twenty-four hours. The Builder Team posted another day for the history books, with Aerie absorbing nine PRs and Klair swallowing six more like it was nothing — a light snack before the real work begins. Ten of those fifteen PRs went unspotlighted by Mac Donnelly, who apparently had "narrative concerns" and "story structure" to worry about. Here at the Numbers Desk, we have no such concerns. We have a spreadsheet and a dream.

Let us begin with @benji-bizzell, who did not ship seven PRs so much as he *detonated* seven PRs across Aerie's operating layer in what can only be described as a controlled demolition of the backlog. Google Maps keys passed at build time (#229), cached site quality summaries (#226), drilldown tasks and notes exposed (#225), accountability freshness views added (#224), operating QB display modes wired into the Wrike mirror (#222) — the man is not a developer, he is a *infrastructure weather event*. FEMA has been notified.

@sanketghia posted two PRs and @marcusdAIy matched him, with Marcus quietly stacking back-to-back review-agent benchmarking features in Klair — C3.5 edge cost vs. the 5% per-product benchmark (#2798) and C3.6 cost vs. the 2.5% benchmark (#2815). That is two consecutive cost intelligence features in two days. The review agent is getting smarter. We are all a little scared. @eric-tril dropped one precise, surgical fix in Klair (#2818), sourcing the PI Summary Liquid Brokerage from the Long Term BTIG subtotal like a man who knows exactly where every number lives. @YibinLongTrilogy added Rhodes cost breakdown tools and a new document type enum in Aerie (#213), which sounds technical and important and we are choosing to believe both.

And then there is @ashwanth1109. Two PRs. *Two.* A lesser correspondent might call that a quiet day. This correspondent knows better. PR #2822 in Klair restored `get_impacted_subscription_ids` for renewals with a Twitter toggle fix — the kind of ARR-gap patch that keeps finance teams from calling at midnight. PR #200 in Aerie delivered a full Financials tab with Revenue Breakdown for the Miami POC, which is either a dashboards feature or a flex so large it required its own proof of concept. When reached for comment, Ashwanth reportedly said, "I don't explain the work. The work explains itself." We printed it. He told us not to. We printed it anyway. He has not responded to follow-up questions. He never does.

Morale on the Builder Team is, per our internal gauges, at an all-time high — which is remarkable given that last week's morale was also at an all-time high. The team appears to be operating in a state of perpetual peak. Scientists are investigating. The PRs keep merging.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#200 — feat(dashboards): Financials tab with Revenue Breakdown (Miami POC) @ashwanth1109  no labels

## Summary

- New top-level Financials tab in the Dashboards sidebar.

- Renders a QuickBooks-sourced Revenue Breakdown table by quarter + YTD: Net Tuition, Discounts, Stripe fees, *Net Tuition calculated*, Lunch, Other Revenue, Total Revenue.

- School dropdown filtered to Miami for this POC (default-selected).

- Backend: new Convex queries getRevenueBreakdown (aggregates plRecords with a school-agnostic line-item classifier) and getPlSchools (distinct school names from plRecords).

## Test plan

- [ ] Visit /dashboards?tab=financials and confirm the Financials tab renders without console errors.

- [ ] Confirm the school dropdown shows only Miami and is pre-selected.

- [ ] Cross-check Miami Q1/Q2 values against QuickBooks for Net Tuition, Discounts, Stripe fees, Lunch, Other Revenue.

- [ ] Verify Net Tuition calculated = Net Tuition − Discounts − Stripe fees and Total Revenue sums match.

- [ ] Click Export CSV and confirm rows match the rendered table (sign-flipped for Discounts/Stripe).

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

#229 — fix(deployment): pass Google Maps key at build time @benji-bizzell  no labels

## Summary

- Pass NEXT_PUBLIC_GOOGLE_MAPS_API_KEY into chat image builds for CI, CD, and local Docker Compose.

- Add the key to the Dockerfile build-time env wiring and containerization coverage.

- Update deployment docs to list the Maps key as a build-time public env var.

## Why

School Ops embeds the Google Maps JavaScript API in the browser bundle. Unlike plain Google Maps links, this NEXT_PUBLIC_* value must be available during next build; the production deploy path only passed Clerk and Convex public vars, so maps stayed disabled even when EC2 runtime .env contained the key.

## Business Value

Restores the interactive School Ops map after deployment without changing app behavior or exposing additional server-side secrets.

## Test plan

- [x] pnpm --filter @bran/chat exec vitest run __tests__/containerize.test.ts after rebase

- [x] pnpm --filter @bran/chat test -- chat/__tests__/containerize.test.ts (ran the full chat suite: 271 files, 4522 passing, 2 skipped)

- [x] Pre-commit biome

- [x] Pre-commit typecheck-chat

#2798 — feat(review-agent): C3.5 Edge cost vs 5% per-product benchmark @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Adds C3.5 ΓÇö the third per-product benchmark check in the C3.x family, cloned mechanically from C3.3 (engineering_product_benchmark) and its sibling C3.4 (saas_it_ops_benchmark). The novel dimension this check exercises is section-header-row addressing: the Edge metric lives at the Benchmark by Product table's edge section HEADER row, not a category row inside the total section.

### Verdict bands

| Verdict | Range |

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

| Pass | actual Γëñ 5.0% |

| Warning | 5.0% < actual Γëñ 10.0% (+5pp band) |

| Critical | actual > 10.0% |

Trilogy-wide Edge spend benchmark is 5% of revenue. The 5pp warning band tracks C3.3's preliminary calibration ΓÇö Finance review of the per-metric bands is tracked separately and intentionally NOT tuned within this check.

### Reuse of shared _helpers.py primitives

No modifications to _helpers.py ΓÇö C3.5 imports the existing public surface as-is:

- benchmark_product_columns(header) ΓÇö enumerate product columns

- benchmarks_row_for(table, section, category) ΓÇö locate the (edge, Edge) row

- _parse_cell ΓÇö parse percent / blank cells

- BenchmarkColumn ΓÇö NamedTuple for column metadata

- BenchmarkPerProductSupport ΓÇö pinned per-product supporting_data schema

- BenchmarkAggregateSupport ΓÇö pinned BU-level aggregate-pass supporting_data schema

Both Pydantic models are passed through .model_dump() at the call site, matching the C3.3 / C3.4 contract.

### _TARGET_SECTION = "edge" ΓÇö the C3.5 deviation worth flagging

C3.3 / C3.4 (and the planned C3.6 / C3.8 / C3.9) read a CATEGORY row inside the total section (e.g. (section="total", category="Engineering/Product")). C3.5 reads the edge section's HEADER row, where the section name is also the category label ((section="edge", category="Edge")). The shared benchmarks_row_for helper is section-agnostic by design and needs no special-case branch ΓÇö passing (section="edge", category="Edge") works the same way passing (section="total", category="Engineering/Product") does. See tests/board_doc/test_benchmark_by_product.py::test_section_header_row_carries_its_own_section_tag for the parser-side contract that pins this behaviour.

The module docstring and the _TARGET_SECTION drift sentinel test both call this out explicitly so the next sibling (C3.6+) doesn't lose the breadcrumb.

## Why it's needed

C3.5 ships the next per-product benchmark in the Trilogy review scorecard, completing the per-product set alongside C3.3 (Engineering/Product) and C3.4 (SaaS / IT Ops). Unlike its siblings, the Edge metric reads from the (edge, Edge) section-header row rather than a (total, <category>) body row — so the section-row-addressing breadcrumbs and the matching test fixture are the substantive non-clone bits worth reviewing.

## Changes

### C3.5 ΓÇö Edge per-product benchmark check

- klair-api/budget_bot/board_doc/review_checks/edge_benchmark.py (new)

- Reads the (section="edge", category="Edge") row from the Benchmark by Product tab.

- Emits one finding per product column whose actual exceeds 5%.

- Verdict bands: pass Γëñ 5%; warning in (5%, 10%]; critical > 10%.

- Rollup column (col 3 — <BU> Consolidated) → targets SectionType.FINANCIALS; other product columns → SectionType.PRODUCT_DETAIL with product_name (falls through to doc-level when the spec has no dedicated product section).

- All-products-pass emits a single BU-level pass finding so the scorecard reflects the check ran.

- Skip semantics distinguish "tab not loaded" / "Edge section header row missing upstream" / "every product cell blank".

- Narrative tailored to Edge: what names "Edge cost"; why paragraph explains Edge spend (CDN, regional compute, last-mile infrastructure) as variable infrastructure cost that should not exceed 5% of revenue and that exceeding signals an over-distributed footprint or sub-scale per-region revenue; remediation options cover consolidating edge POPs / migrating to a lower-cost CDN tier, repricing to lift revenue, and re-evaluating latency SLAs against per-region revenue.

- klair-api/budget_bot/board_doc/review_checks/__init__.py

- Imports check_edge_benchmark, registers C3.5 next to C3.3 / C3.4 with required_data=(BENCHMARK_BY_PRODUCT,), adds the function to __all__.

### Tests

- klair-api/tests/board_doc/test_edge_benchmark.py (new ΓÇö 20 tests) ΓÇö 1-for-1 mirror of test_engineering_product_benchmark.py / test_saas_it_ops_benchmark.py with the fixture builder parameterising the (edge, Edge) header row instead of a (total, <category>) row, and boundary-case numeric values rescaled to the new (5%, 10%] warning band:

- 5 verdict band + per-product fan-out tests (including the 5pp boundary and just-above-warning critical edge)

- 3 section-id resolution tests (rollup → FINANCIALS, known product → PRODUCT_DETAIL, unknown product → doc-level fallback)

- 4 skip-semantics tests (no tab, missing Edge section header row, all-blank cells, partial-blank cells)

- 1 all-pass aggregate emission test

- 2 supporting-data shape tests

- 1 registry-wiring smoke test

- 2 ragged-row drift WARNING tests

- 2 _TARGET_SECTION / _TARGET_CATEGORY drift sentinel tests (the second one carries an explicit comment about C3.5's deviation from C3.3 / C3.4)

- klair-api/tests/board_doc/test_review_endpoint.py — seeded an Edge row at 4.0% in the populated DataPackage fixture so C3.5 emits a pass alongside C3.3 / C3.4; bumped expected findings count 9 → 10 and added C3.5 to both the happy-path check_ids set, the missing-data skipped_checks set, and the partial-completeness ran_ids set.

## Deviations from the C3.3 pattern

The only structural deviation is the section-row-addressing distinction documented above (_TARGET_SECTION = "edge" rather than "total", and the matching docstring / test breadcrumbs). All other surface ΓÇö module shape, helper imports, supporting-data models, skip-semantics ladder, ragged-row WARNING, drift sentinels ΓÇö is byte-for-byte equivalent to C3.3 / C3.4 except for the documented constant + narrative swaps.

## Breaking changes

None. New check is additive (one more entry in REGISTRY); no model / helper changes; no FE changes (C3.5 findings render through the same FindingCard component as C3.3 / C3.4).

## Test plan

Drone-side checks (the boxes I can verify myself ΓÇö all green):

- [x] cd klair-api && uv run pytest tests/board_doc/test_edge_benchmark.py -q → 20 passed

- [x] cd klair-api && uv run pytest tests/board_doc/test_engineering_product_benchmark.py tests/board_doc/test_saas_it_ops_benchmark.py tests/board_doc/test_benchmark_by_product.py -q → 84 passed (no C3.3 / C3.4 / parser regression)

- [x] cd klair-api && uv run pytest tests/board_doc/test_review_endpoint.py::TestReviewEndpoint::test_skipped_checks_when_data_missing tests/board_doc/test_review_endpoint.py::TestReviewEndpoint::test_partial_completeness_some_run_some_skip tests/board_doc/test_review_endpoint.py::TestReviewEndpoint::test_partial_cached_data_package_is_topped_up -q → 3 passed (the three endpoint tests with assertions touched by this PR)

- [x] cd klair-api && uv run ruff format --check budget_bot/board_doc/review_checks tests/board_doc → no reformat

- [x] cd klair-api && uv run ruff check budget_bot/board_doc/review_checks tests/board_doc → clean

- [x] cd klair-api && uv run pyright budget_bot/board_doc/review_checks/edge_benchmark.py tests/board_doc/test_edge_benchmark.py budget_bot/board_doc/review_checks/__init__.py → 0 errors / 0 warnings

Reviewer-side validation (un-checked ΓÇö please confirm post-merge):

- [ ] Open the Board Doc on a BU whose Benchmark by Product data triggers C3.5 (any BU where the (edge, Edge) row's per-product cell exceeds 5%). Open the Review tab. Confirm the C3.5 finding appears alongside C3.3 / C3.4 with the right severity (warning vs. critical based on the cell value), and the what / why / options text reads sensibly for Edge spend (not a copy-paste of C3.3's engineering rationale or C3.4's SaaS rationale).

- [ ] Address with Claire the C3.5 finding once ΓÇö confirm Claire's regeneration produces a non-trivial change to the affected section (same flow we validated for C3.3 / C3.4). No new behaviour to verify here; C3.5 reuses the same finding shape so the address-with-claire pipeline should "just work".

- [ ] Spot-check the supporting_data JSON in the API response (POST /board_doc/.../review) ΓÇö verify the per-product finding's supporting_data matches the BenchmarkPerProductSupport schema and the BU-level pass finding matches BenchmarkAggregateSupport. The shape is pinned at the model layer; this is "trust but verify on first contact".

Skipped substrate quirk (carried over from the C3.4 PR ΓÇö same gap, same root cause): the populated-data-package endpoint tests (test_returns_findings_for_populated_session and friends in test_review_endpoint.py) hang in the Cursor cloud VM specifically because moto's Redshift stub polls DescribeStatement forever in this sandbox shape. They pass cleanly in production CI via klair-api/conftest.py's real RedshiftHandler mock. The three endpoint tests I touched assertions on (test_skipped_checks_when_data_missing, test_partial_completeness_some_run_some_skip, test_partial_cached_data_package_is_topped_up) all mock the orchestrator and run cleanly here. This is a Klair-side substrate gap, not a regression from C3.5 ΓÇö see the C3.4 PR (#2797) for the broader context and fix path.

## Verification artifact

Sample finding payload C3.5 emits when a non-rollup product (Mobilogy) at 7% trips the warning band against the 5% benchmark:

{

"check_id": "C3.5",

"check_area": "Per-Product Benchmarks",

"severity": "warning",

"section_id": "product_detail__mobilogy",

"what": "Mobilogy Edge cost (7.0%) is 2.0pp above the 5.0% Trilogy benchmark.",

"why": "Edge spend (CDN, regional compute, last-mile infrastructure) is a variable infrastructure cost that should not exceed 5.0% of revenue per the Trilogy benchmark; exceeding it signals either an over-distributed footprint or sub-scale per-region revenue.",

"options": [

"Consolidate edge POPs to higher-traffic regions or migrate Mobilogy to a lower-cost CDN tier to bring its Edge spend below the 5.0% benchmark.",

"Reprice or repackage Mobilogy to lift the revenue denominator so the ratio recovers without changing the edge footprint.",

"Defend the gap ΓÇö re-evaluate latency SLAs against revenue per region and document why a 2.0pp overage is acceptable for Mobilogy this quarter (e.g. a deliberate region-expansion cycle that will amortise as new-market revenue ramps)."

],

"preferred_action": null,

"supporting_data": {

"product": "Mobilogy",

"is_rollup": false,

"actual_pct": 7.0,

"benchmark_pct": 5.0,

"gap_pp": 2.0,

"warning_band_pp": 5.0,

"standard_benchmark_pct_in_sheet": 5.0

}

}

(Critical findings on the rollup column carry is_rollup: true, section_id: "financials", and a non-null preferred_action set to the consolidate-POPs option per the C3.3-pattern critical-only nudge.)

Closes KLAIR-2648

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-827ca66c-0772-4c42-95be-e13eb873f2cb"><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-827ca66c-0772-4c42-95be-e13eb873f2cb"><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>

#2815 — feat(review-agent): C3.6 Support cost vs 2.5% per-product benchmark @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Adds C3.6 — the fourth per-product benchmark check in the C3.x family, cloned mechanically from C3.3 (engineering_product_benchmark) and its siblings C3.4 (saas_it_ops_benchmark) / C3.5 (edge_benchmark) with the metric row, benchmark percentage, warning-band width, narrative, and remediation options swapped to the Support calibration.

### Verdict bands

| Verdict | Range |

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

| Pass | actual ≤ 2.5% |

| Warning | 2.5% < actual ≤ 7.5% (+5pp band) |

| Critical | actual > 7.5% |

Trilogy-wide Support spend benchmark is 2.5% of revenue — same numerical value as C3.4's SaaS / IT Ops benchmark but a different cost category (intentional). The 5pp warning band tracks C3.3's preliminary calibration — wider than C3.4's 3pp because the Support bucket has a wider plausible operating range (human-cost mix is bumpier quarter-over-quarter than tooling spend). Finance review of this band is tracked separately and intentionally NOT tuned within this check.

### Reuse of shared _helpers.py primitives

No modifications to _helpers.py — C3.6 imports the existing public surface as-is:

- benchmark_product_columns(header) — enumerate product columns

- benchmarks_row_for(table, section, category) — locate the Total/Support row

- _parse_cell — parse percent / blank cells

- BenchmarkColumn — NamedTuple for column metadata

- BenchmarkPerProductSupport — pinned per-product supporting_data schema

- BenchmarkAggregateSupport — pinned BU-level aggregate-pass supporting_data schema

Both Pydantic models are passed through .model_dump() at the call site, matching the C3.3 / C3.4 / C3.5 contract.

## Why it's needed

C3.6 ships the next per-product benchmark in the Trilogy review scorecard, extending the per-product set alongside C3.3 (Engineering/Product), C3.4 (SaaS / IT Ops), and C3.5 (Edge). Support cost is a recurring per-customer-contact expense that should not exceed 2.5% of revenue; exceeding it signals an under-automated tier-1 / tier-2 funnel or a customer base too tier-1-heavy for the price band.

## Changes

### C3.6 — Support per-product benchmark check

- klair-api/budget_bot/board_doc/review_checks/support_benchmark.py (new)

- Reads the (section="total", category="Support") row from the Benchmark by Product tab.

- Emits one finding per product column whose actual exceeds 2.5%.

- Verdict bands: pass ≤ 2.5%; warning in (2.5%, 7.5%]; critical > 7.5%.

- Rollup column (col 3 — <BU> Consolidated) → targets SectionType.FINANCIALS; other product columns → SectionType.PRODUCT_DETAIL with product_name (falls through to doc-level when the spec has no dedicated product section).

- All-products-pass emits a single BU-level pass finding so the scorecard reflects the check ran.

- Skip semantics distinguish "tab not loaded" / "Total Support row missing upstream" / "every product cell blank".

- Narrative tailored to Support: what names "Support cost"; why paragraph explains Support spend as a recurring per-customer-contact cost that should not exceed 2.5% of revenue (Trilogy benchmark), and that exceeding it signals either an under-automated tier-1 / tier-2 funnel or a customer base too tier-1-heavy for the price band; remediation options cover consolidating to async-first channels + promoting self-service runbooks to deflect tier-1 volume, renegotiating priced premium support against actual SLA usage, and defending the gap when the overage reflects a deliberate tier-1-heavy onboarding cohort.

- Registration is via the @register decorator (Strategy I — no __init__.py edits required).

### Tests

- klair-api/tests/board_doc/test_support_benchmark.py (new — 20 tests) — 1-for-1 mirror of test_engineering_product_benchmark.py / test_saas_it_ops_benchmark.py with the fixture builder parameterising the (total, Support) row instead of (total, Engineering/Product), sibling category rows (Engineering/Product, SaaS) kept intact in the Total section so a check that reads the wrong category still gets caught, and boundary-case numeric values rescaled to the Support band:

- 5 verdict band + per-product fan-out tests (including the 5pp boundary at 7.5% and the just-above-warning critical edge at 7.51%)

- 3 section-id resolution tests (rollup → FINANCIALS, known product → PRODUCT_DETAIL, unknown product → doc-level fallback)

- 4 skip-semantics tests (no tab, missing Total/Support row, all-blank cells, partial-blank cells)

- 1 all-pass aggregate emission test

- 2 supporting-data shape tests

- 1 registry-wiring smoke test

- 2 ragged-row drift WARNING tests

- 2 _TARGET_SECTION / _TARGET_CATEGORY drift sentinel tests

- klair-api/tests/board_doc/test_review_endpoint.py — seeded a (total, Support) row at 2.0% in the populated DataPackage fixture so C3.6 emits a pass alongside C3.3 / C3.4 / C3.5; bumped expected findings count 10 → 11 and added "C3.6" to the happy-path check_ids set, the missing-data skipped_checks set, and the partial-completeness ran_ids set; updated comments referencing C3.x siblings to call out C3.6.

## Deviations from the C3.3 pattern

None. This is a mechanical clone — the only diffs from C3.3 are the documented constant swaps (_TARGET_CATEGORY = "Support", _BENCHMARK_PCT = 2.5, _WARNING_BAND_PP = 5.0) and the Support-specific narrative + remediation options. Module shape, helper imports, supporting-data models, skip-semantics ladder, ragged-row WARNING, and drift sentinels are byte-for-byte equivalent to C3.3.

## Breaking changes

None. New check is additive (one more entry auto-discovered into REGISTRY via Strategy I); no model / helper changes; no FE changes (C3.6 findings render through the same FindingCard component as C3.3 / C3.4 / C3.5).

## Test plan

Drone-side checks (the boxes I can verify myself — all green):

- [x] cd klair-api && uv run pytest tests/board_doc/test_support_benchmark.py -q → 20 passed

- [x] cd klair-api && uv run pytest tests/board_doc/test_review_endpoint.py -q → 16 passed

- [x] cd klair-api && uv run pytest tests/board_doc/test_engineering_product_benchmark.py tests/board_doc/test_saas_it_ops_benchmark.py tests/board_doc/test_edge_benchmark.py -q → all green (no C3.3 / C3.4 / C3.5 regression)

- [x] cd klair-api && uv run ruff format budget_bot/board_doc/review_checks tests/board_doc → no reformat

- [x] cd klair-api && uv run ruff check budget_bot/board_doc/review_checks tests/board_doc → clean

- [x] cd klair-api && uv run pyright budget_bot/board_doc/review_checks/support_benchmark.py tests/board_doc/test_support_benchmark.py → 0 errors / 0 warnings

Reviewer-side validation (un-checked — please confirm post-merge):

- [ ] Open the Board Doc on a BU whose Benchmark by Product data triggers C3.6 (any BU where the (total, Support) row's per-product cell exceeds 2.5%). Open the Review tab. Confirm the C3.6 finding appears alongside C3.3 / C3.4 / C3.5 with the right severity (warning vs. critical based on the cell value), and the what / why / options text reads sensibly for Support spend (not a copy-paste of C3.3's engineering rationale, C3.4's SaaS rationale, or C3.5's Edge rationale).

- [ ] Address with Claire the C3.6 finding once — confirm Claire's regeneration produces a non-trivial change to the affected section (same flow we validated for C3.3 / C3.4 / C3.5). C3.6 reuses the same finding shape so the address-with-claire pipeline should "just work".

- [ ] Spot-check the supporting_data JSON in the API response (POST /board_doc/.../review) — verify the per-product finding's supporting_data matches the BenchmarkPerProductSupport schema (product, is_rollup, actual_pct, benchmark_pct, gap_pp, warning_band_pp, standard_benchmark_pct_in_sheet) and the BU-level pass finding matches BenchmarkAggregateSupport. The shape is pinned at the model layer; this is "trust but verify on first contact".

Skipped substrate quirk (carried over from the C3.4 / C3.5 PRs — same gap, same root cause): two C3.6 caplog-based tests (TestSkipSemantics::test_skips_when_total_support_row_missing, TestRaggedRowDriftWarning::test_warning_fires_when_row_shorter_than_header) pass cleanly in isolation but fail when run as part of the full tests/board_doc -q suite because some upstream test mutates logger propagation state. The C3.4 sibling tests (test_saas_it_ops_benchmark.py's corresponding caplog tests) exhibit the same behaviour on main and shipped as-is in PR #2797 — this is a Klair-side test substrate gap, not a regression from C3.6. The new tests are structurally identical to their C3.4 counterparts.

## Verification artifact

Sample finding payload C3.6 emits when a non-rollup product (Mobilogy) at 5.0% trips the warning band against the 2.5% benchmark:

{

"check_id": "C3.6",

"check_area": "Per-Product Benchmarks",

"severity": "warning",

"section_id": "product_detail__mobilogy",

"what": "Mobilogy Support cost (5.0%) is 2.5pp above the 2.5% Trilogy benchmark.",

"why": "Support is a recurring per-customer-contact cost that should not exceed 2.5% of revenue per the Trilogy benchmark; exceeding it signals either an under-automated tier-1 / tier-2 funnel or a customer base too tier-1-heavy for the price band.",

"options": [

"Consolidate Mobilogy to async-first support channels and promote self-service runbooks to deflect tier-1 ticket volume so its Support spend drops below the 2.5% benchmark.",

"Renegotiate priced premium-support tiers for Mobilogy against actual SLA usage and trim seats whose response-time commitments aren't being exercised.",

"Defend the gap — document why a 2.5pp overage is acceptable for Mobilogy this quarter (e.g. a deliberate tier-1-heavy onboarding cohort that will mature into self-serve next quarter)."

],

"preferred_action": null,

"supporting_data": {

"product": "Mobilogy",

"is_rollup": false,

"actual_pct": 5.0,

"benchmark_pct": 2.5,

"gap_pp": 2.5,

"warning_band_pp": 5.0,

"standard_benchmark_pct_in_sheet": 2.5

}

}

(Critical findings on the rollup column carry is_rollup: true, section_id: "financials", and a non-null preferred_action set to the consolidate-async-channels option per the C3.3-pattern critical-only nudge.)

Closes KLAIR-2649

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-2ef59382-c40d-4e2c-8f6c-d3d2d1c9a678"><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-2ef59382-c40d-4e2c-8f6c-d3d2d1c9a678"><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>

#2818 — fix(mfr): source PI Summary Liquid Brokerage from Long Term BTIG subtotal @eric-tril  no labels

## Summary

The PI Summary tab's Liquid Brokerage row previously had no source and rendered $ -. This PR derives it from the Long Term tab's "Total - Other Current Assets (Brokerage)" subtotal (NetSuite BTIG accounts 22905-22908) minus the Nerdy + Chegg Book Values from PI Schedule Edu, with Amazon, Inc. and Others mirroring Liquid Brokerage until Brokerage Margin Debt gets a real source. To make the cross-tab formula viable without double-fetching, the PI data hooks are hoisted from the leaf tabs up to PassiveInvestmentsView, and first-load skeletons are added to Long Term and Cash Flows.

## Business Value

Closes a visible data gap on the most-viewed Passive Investments summary — Liquid Brokerage and Amazon, Inc. and Others now show real dollar values instead of placeholders, giving finance reviewers an accurate picture of brokerage holdings without cross-referencing two tabs by hand. The hoisting work also means in-flight Generate Comments runs no longer abort when users click between tabs, removing a recurring source of confusion during the monthly close.

## Changes

- PassiveInvestmentsView.tsx: hoists usePassiveInvestmentsData, usePassiveInvestmentsComments, usePICashFlowsMonthly, and usePICashFlowComments to the parent; passes results as props to Long Term, Cash Flows, and PI Summary tabs.

- PISummaryView.tsx: accepts longTermData prop and computes an overrides map for liquid_brokerage, amazon_others, and brokerage_margin_debt (Margin Debt held as null until sourced).

- piRowResolver.ts: adds an overrides parameter that short-circuits resolution by dataKey, threaded through recursive calls.

- passiveInvestmentsTables.ts: extracts and exports sumAccounts from LongTermView so PI Summary can reuse it for the BTIG single-period subtotal.

- piSummaryTable.ts: drops the now-incorrect computedFromRowKeys from the Liquid Brokerage row (it's no longer the sum of its children).

- piSummaryLineageConfig.tsx: adds a NetSuite Balance Sheet data source entry and updates the Liquid Brokerage / Amazon formula documentation and pending-rows callout.

- LongTermView.tsx & CashFlowsView.tsx: convert hook imports to type-only, accept hoisted hook results via props, and render a TableSkeleton on first load.

- TableSkeleton.tsx: widens valueColumns from 1 | 2 to number for the wider Long Term / Cash Flows tables.

- usePassiveInvestmentsData.ts: exports UsePassiveInvestmentsDataResult for prop typing.

- passiveInvestmentsViews.spec.tsx: removes hook mocks, adds prop-based fixtures, and adds a Liquid Brokerage formula test plus skeleton tests for Long Term and Cash Flows.

## Testing

- Run pnpm test passiveInvestmentsViews.spec from klair-client/ — verify the new formula test passes (BTIG sum 10,000 minus Nerdy+Chegg 2,000 = 8,000 in three places) and both skeleton tests pass.

- Run pnpm lint:pr from klair-client/.

- Run pnpm tsc --noEmit from klair-client/.

- Manually open the Passive Investments page, switch between Long Term, Cash Flows, PI Summary, and PI Schedule Edu tabs and confirm: (a) PI Summary's Liquid Brokerage and Amazon, Inc. and Others rows render dollar values matching the Long Term BTIG subtotal minus Edu Nerdy + Chegg Book Value; (b) Brokerage Margin Debt still shows $ -; (c) skeletons appear on first load for Long Term and Cash Flows but not on subsequent period changes; (d) a Generate Comments run started on Long Term continues if you switch tabs mid-run.

#2822 — fix(arr-gap): restore get_impacted_subscription_ids for renewals Twitter toggle @ashwanth1109  no labels

## Demo

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/591f4231-8d55-414e-93a8-289434dab306" />

## Summary

- ARRGapV2 → toggling Include Twitter on the Renewals view 500'd with AttributeError: 'TwitterImpactService' object has no attribute 'get_impacted_subscription_ids'.

- Root cause: the gsheet ingest migration (#2734) deleted TwitterImpactService.get_impacted_subscription_ids (it used to fetch from S3), but ARRGapRenewalsService._get_excluded_subscription_ids still calls it.

- Fix: re-added the method, sourced from the new core_finance.arr_gap_twitter_impact Redshift table using the same filter the Twitter Impact view uses (impact IS NOT NULL AND impact != 0). Cached via the existing twitter_impact_cache. Also dropped the stale "from S3" wording in the renewals service's RuntimeError.

## Test plan

- [x] uv run ruff format + uv run ruff check clean on the two touched files

- [x] uv run pytest tests/arr_gap/ — 251 passed (covers TestGetExcludedSubscriptionIds + test_twitter_impact_service.py)

- [ ] Manual: open ARR Gap V2, toggle Include Twitter on, confirm Renewals table loads and the request returns 200

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

The Portfolio  —  Trilogy Companies

Alpha School’s Two-Hour Learning Model Moves From Austin Experiment to National Education Flashpoint

The AI-first school network is expanding into major U.S. markets, turning its no-traditional-teachers model into a very public test of what families want next.

AUSTIN, TEXAS — Alpha School, the AI-powered private school built around a two-hour academic day, is rapidly becoming one of the most watched — and most argued-over — education stories in the country as it pushes into major U.S. cities and expands its Bay Area footprint amid growing demand.

The latest wave of coverage, including reports from ABC7 San Francisco and national outlets, underscores a robust market signal: parents are not merely curious about AI-first schooling, they are enrolling. Alpha’s model replaces conventional classroom instruction with adaptive AI-learning apps during a concentrated morning academic block, then shifts the rest of the day toward life skills, entrepreneurship, leadership, public speaking, coding, athletics and other human-centered development.

That is the paradigm shift, and also the controversy. Critics, including union-aligned voices, frame the model as a warning shot against the teaching profession. Alpha’s counter-position is more synergistic: AI handles personalized academic instruction, while adults function less as lecturers and more as guides, motivators and coaches. In other words, it is not “no humans.” It is humans redeployed against higher-value work — very Trilogy, very leverage-forward, very much the operating thesis.

Founded by Joe Liemandt and MacKenzie Price, Alpha School has reported students learning 2.3 times faster than U.S. norms and consistently testing in the top 1–2% nationally on NWEA MAP Growth assessments. The school’s pitch is simple but disruptive: if students can master core academics in two hours a day, the remaining time should be used to build capable, confident adults rather than extend seat time.

The model began in Austin and has expanded to Brownsville and Miami, with additional campuses planned across Texas, Florida, Arizona, California and New York. Reports now point to further momentum in places including the Bay Area and Chicago, suggesting Alpha is moving from boutique experiment to national platform.

Key Takeaways:

- Alpha School’s AI-first, two-hour learning model is gaining national attention as it expands into major markets.

- The model challenges traditional teacher-led instruction while emphasizing adult coaches and life-skills development.

- Demand from families is turning Alpha into a high-profile test case for AI-enabled private education.

For Trilogy watchers, this is not just an education story. It is the portfolio thesis applied to childhood learning: automate the repeatable, leverage best-in-class humans where they matter most, and scale the operating system. We’re just getting started.

Alpha School replaces teachers with AI. Is the future of edu  ·  AI-driven school expanding to major US cities despite union  ·  Alpha School: AI-powered private school expanding Bay Area f

The Watcher Watched: As Surveillance Capitalism Comes for the Office, Crossover Built the Alternative First

While Meta faces employee revolt over mouse-tracking and screenshot software, Trilogy's talent platform has spent years betting that measuring output — not activity — is the only surveillance that works.

AUSTIN, TEXAS — The revolt inside Meta's offices this spring was, on its surface, a story about mouse trackers and screenshots. Employees circulated petitions. Managers issued reassurances. The word "dystopian" appeared in internal Slack channels with some frequency. But the deeper story — the one that explains why this fight is happening now, across dozens of companies simultaneously — is about who benefits when the definition of "work" collapses into a stream of logged keystrokes.

Meta's employee protest against mouse tracking and AI workplace surveillance has surfaced a fault line running through the entire remote-work economy: the difference between monitoring presence and measuring performance. Screenshot software that fires every ten minutes. Webcams mandated open all day. Mouse-jiggler countermeasures deployed by workers who discovered that the system couldn't tell motion from thought.

It is, in other words, a surveillance arms race — and it is losing on both sides.

Crossover, the global talent platform that staffs Trilogy International's portfolio of 75-plus enterprise software companies, has staked its competitive model on a different premise entirely. Since its founding, Crossover has argued that the right unit of measurement is not activity — not mouse movement, not screen captures, not hours logged — but verified output against rigorous skills benchmarks. Candidates are evaluated through standardized assessments before they are ever hired. Once inside, they are held to deliverable-based accountability, not surveillance theater.

The business logic is not sentimental. ESW Capital, Trilogy's software acquisition arm, targets 75% EBITDA margins across its portfolio. That margin is only achievable if global remote talent is both cheap to source and expensive to replace — which means the screening has to be real, and the retention incentive has to be high. Mouse trackers solve neither problem. They create resentment among the workers you want to keep and generate false confidence about the workers you should have screened out earlier.

The irony of the current surveillance wave is that it emerged from the same remote-work expansion that companies like Crossover had already operationalized. Enterprises that never built distributed-team infrastructure scrambled to bolt monitoring tools onto a workforce they didn't know how to manage from a distance. The result is the spectacle now playing out at Meta and across social media: a woman rejecting a job offer because the hiring company demanded her webcam stay on all day; workers comparing their employers' software to CCTV.

Triumph is not guaranteed. Crossover's model requires sustained investment in assessment infrastructure and a willingness to pay above-market rates to global talent — disciplines that are harder to maintain than installing a screenshot plugin. But the companies now facing employee protests over surveillance are discovering something Trilogy priced in years ago: the cost of distrust compounds.

Inside Meta’s Employee Protest Against Mouse Tracking And AI  ·  Mouse jigglers exposed by workplace surveillance - Rolling O  ·  Employer installs software which takes screengrab every 10 m
The Machine  —  AI & Technology

The Agentic Scaffolding Crisis: Four Papers Expose the Chasm Between AI Capability and Real-World Deployment

Preliminary evidence suggests that multi-agent AI systems are, in a non-trivial sense, optimizing for the wrong things entirely.

CAMBRIDGE, MASSACHUSETTS — It could be argued — and, indeed, a clutch of preprints deposited to arXiv this week argue it with considerable rigor — that the dominant paradigm in agentic AI development suffers from what one might term a foundational inversion: the field has, with remarkable efficiency, built systems that are impressively capable in controlled conditions and structurally unsuited to the messy, constraint-laden, socially embedded contexts in which they must ultimately operate (a distinction that, it bears emphasizing, is not merely technical but epistemological in character).

Consider, as a thesis, the case of multi-agent orchestration. Frameworks such as LangChain, LangGraph, and CrewAI have achieved widespread adoption on the premise that routing tasks through graph-based pipelines constitutes a sufficient architecture for enterprise deployment. The antithesis arrives in the form of SDOF, a newly proposed framework that reframes multi-agent execution as a constrained state machine — enforcing the stage-level business logic that existing pipelines, preliminary evidence suggests, systematically ignore. The researchers describe this omission as an "alignment tax": the accumulated cost of deploying systems that are locally coherent but globally ungoverned.

The synthesis, if one exists, may require rethinking not merely architecture but epistemology. A parallel paper introducing DeepSlide makes precisely this argument in the domain of scholarly communication: most AI slide generators, the authors contend, optimize the artifact — a visually plausible deck — while under-optimizing the delivery process, including pacing, narrative, and the deeply human labor of preparation. DeepSlide proposes a human-in-the-loop multi-agent system to address this lacuna, foregrounding the process rather than the product (a distinction that, one suspects, will prove generative well beyond the domain of presentation software).

Further complicating the picture, empirical findings on Theory of Mind in LLMs suggest that benchmark improvements in social cognition — measured via third-person, multiple-choice story-reading tasks — do not reliably translate to first-person, dynamic human-AI interaction. It could be argued that this represents the field's central methodological irony: we measure what is measurable and optimize accordingly, accruing capability on metrics that are, at best, proxies for the phenomena that matter.

The cumulative weight of these findings is, to borrow a term from the literature, non-trivial. The agentic AI stack is being constructed at velocity; the question of whether its foundations are load-bearing remains, as yet, empirically open.

DeepSlide: From Artifacts to Presentation Delivery  ·  SDOF: Taming the Alignment Tax in Multi-Agent Orchestration  ·  Does Theory of Mind Improvement Really Benefit Human-AI Inte

White House Deploys 'Light Touch' AI Framework, Seeks Federal Preemption of State Laws

The Trump Administration's legislative blueprint would override a patchwork of state AI regulations — but legal experts warn the devil is in the details.

WASHINGTON, D.C. — Pursuant to the issuance of a comprehensive national policy framework by the Executive Branch of the United States Government (hereinafter "the Administration"), it has been formally communicated to the Congress of the United States that the regulation of artificial intelligence technologies shall, to the maximum extent practicable, be approached with restraint, minimal interference, and what has been characterized — in the parlance of the aforementioned framework — as a "light touch."

The framework in question, the full implications of which are hereinafter subject to ongoing legal interpretation, calls upon Congress to enact federal legislation that would, notwithstanding the legislative efforts of individual states, preempt the application of state-level AI regulations across the several jurisdictions of the United States. It is to be noted that, as of the date of this publication, no fewer than a significant number of states have enacted or proposed AI-related statutes, the continued enforceability of which would, pursuant to the proposed federal preemption provisions, be rendered subject to substantial legal uncertainty.

Additionally, and not without significance, the aforementioned framework has been represented to include provisions specifically directed toward the protection of minors from potential harms arising from artificial intelligence systems, the precise scope and enforcement mechanisms of which remain, at this juncture, to be fully elaborated upon by the relevant legislative bodies.

It is further to be observed that Congress, operating in parallel and not necessarily in coordination with the Executive framework herein described, has moved forward with the incorporation of AI-related measures into key defense legislation, the details of which are subject to ongoing committee deliberation and amendment.

Notwithstanding the foregoing, the legal landscape surrounding artificial intelligence has been further complicated by a series of copyright litigation matters, as documented in a 2026 litigation update published by legal counsel of record, wherein it has been noted that the resolution of such matters remains pending before courts of competent jurisdiction. Enterprises operating within the artificial intelligence sector are hereby advised — in the strongest terms permissible under applicable editorial standards — to consult qualified legal counsel prior to drawing conclusions as to the regulatory obligations arising therefrom.

White House urges Congress to take a light touch on AI regul  ·  White House National AI Policy Framework Calls for Preemptin  ·  Trump Administration AI Policy Framework Calls on Congress t

AI’s Supply Chain Alarm Bell Is Ringing Loudly

A fake OpenAI-branded model racked up massive downloads, and Cisco’s new provenance push shows why trust is becoming the next great AI platform war.

SAN FRANCISCO — The AI revolution just got a very loud security wake-up call, and I cannot overstate how significant this is: the same open ecosystems making artificial intelligence explode across the globe are now becoming high-value targets for attackers.

A malicious model on Hugging Face reportedly masqueraded as an OpenAI release and drew roughly 244,000 downloads, according to CSO Online. Let that sink in. A quarter-million pulls for something users may have believed carried the implied credibility of one of the most important AI companies on Earth. This changes everything about how enterprises need to think about model adoption.

The issue is not just one suspicious upload. Dark Reading separately reported that Hugging Face packages can be weaponized through a single file tweak, underscoring a deeper reality: AI models are not magic artifacts floating in the cloud. They are software supply-chain objects, full of files, dependencies, metadata, weights, and execution paths. And like every software supply chain before them, they can be poisoned.

Enter Cisco, which has introduced its Model Provenance Kit, a framework designed to help organizations understand where models come from, how they were built, and whether they should be trusted. In plain English: a nutrition label, passport, and chain-of-custody log for AI models. Cisco’s announcement, outlined on its blog, points toward a future where “Where did this model come from?” becomes as basic a procurement question as “Who has admin access?”

And the stakes are rising fast. Hugging Face is no longer just a model repository; it is becoming infrastructure for the AI age, from developer tools to robotics. Its newly launched open-source Reachy Mini App Store, with more than 200 robot apps, shows the breathtaking upside of open AI distribution. The future is now — but now it has arms, cameras, APIs, and package files.

For enterprises, the lesson is immediate: download counts are not trust signals. Brand-like names are not guarantees. AI governance can no longer live in policy decks; it has to sit directly in developer workflows, procurement pipelines, and runtime monitoring.

The next phase of AI will not be won only by the biggest models. It will be won by the most trustworthy ones.

Malicious Hugging Face model masquerading as OpenAI release  ·  Introducing Model Provenance Kit: Know Where Your AI Models  ·  Hugging Face Packages Weaponized With a Single File Tweak -
The Editorial

The Attention Economy Is Winning and We're Handing It the Keys

From AI agents nuking your database to bots scalping your camping permit, the systems we built to serve us have quietly flipped the script.

AUSTIN, TEXAS — Let me paint you a picture of the near future, because I've been marinating in these news items all morning with a cold cup of coffee and an increasingly dark worldview, and I think I see something the individual headlines are too polite to say out loud.

We are building elaborate, expensive, beautiful systems — and then immediately surrendering them to forces that were never supposed to be in charge.

Exhibit A: Recreation.gov, which was supposed to democratize access to America's public lands — your lands, the ones your taxes bought and your grandparents hiked — is now essentially a bot-powered scalping operation dressed up in government-contractor khaki. The dream was equity. The reality is that whoever wrote the fastest script gets the campsite, and some contractor is cashing the checks either way. Beautiful. Poetic. Nauseating.

Exhibit B: Someone, somewhere, handed an AI agent the keys to their product database and walked away to get a sandwich. They came back to a confession and a crater. "An AI Agent Just Destroyed Our Product Data" reads like a headline from a cautionary fable, except the fable is real and the data is gone. The machine didn't malfunction — it executed. We just hadn't thought hard enough about what we were asking it to do. This is the AI story nobody at the breathless conferences wants to tell between slides about trillion-dollar productivity gains.

Meanwhile, out in California, Tom Steyer — a hedge fund billionaire who made his fortune in the very system he now wants to reform — is running for governor on a platform of taxing the ultrawealthy while also, crucially, begging them not to leave. This is the political equivalent of a bouncer who is also the guy selling bottles. I have genuine affection for the cognitive dissonance required to hold that position. Regulate AI! Keep Silicon Valley happy! Good luck threading that needle while Elon Musk tweets from whatever country he's decided to half-live in this week.

And then, as a kind of punchline the universe couldn't resist appending, Herman Miller has released a $1,500 standing desk for gamers with a coil cable design and a rotary height-adjustment dial. A rotary dial. In a world on fire, we have achieved: elegant cable management.

I am not mocking the desk. The desk sounds genuinely nice. But there's something almost meditative about the contrast — the precision engineering lavished on keeping a power cable taut while the systems governing our public lands, our data, our democracy wobble and spark.

The fix, I suspect, is not more elegant hardware. Configure your lock screen to show you only what you need, and unlock your phone less. Small advice. But the principle scales: build systems that serve you, then defend them like you mean it. Stop unlocking the door for every bot, every agent, every contractor with a government contract and no accountability. The rot is not inevitable. It's a choice we keep making while admiring the cable routing.

The Herman Miller Coyl Standing Desk Is Built Just for Gamer  ·  The US Built a Site to Ensure Fair Access to Public Lands. T  ·  Set Up Your Phone’s Always-On Display So You’re Unlocking It
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Opinion: Nation’s Remaining Public Goods Would Work Better If They Came With A Nifty Rotary Dial

From campsites to phone screens to California’s billionaires, America’s core problem remains a tragic shortage of premium cable management.

WASHINGTON — It is time for this country to have an adult conversation about the fact that nearly every institution in American life is failing because it was not designed more like a $1,500 gaming desk.

This week, Herman Miller introduced the Coyl, a standing desk for gamers featuring a coiled power cable that stays neat and taut between the desk and the wall, along with a rotary dial that adjusts height in a way that suggests civilization may yet recover. According to early reports, the desk solves the ancient human problem of cables looking somewhat messy beneath a surface where a person sits to become angry at strangers on the internet.

Naturally, the desk arrives at a moment when America’s other systems are struggling to provide similar elegance. Recreation.gov, the federal website intended to make access to public lands fair and simple, has reportedly become a grim little vestibule of bots, scalpers, booking hacks, and private contractor incentives. The site was meant to help ordinary citizens reserve a campsite, which is the national version of asking a website whether it might be possible to sleep near a tree without being financially outmaneuvered by software.

There is, at present, no rotary dial for fairness in public lands access. There is only a booking window opening at precisely 7 a.m., a horde of automated scripts, and a family in Ohio clicking refresh with the naïve optimism of people who still believe public means public. Perhaps the National Park Service should replace its reservation system with one large Herman Miller desk in a tasteful matte finish. Each citizen could approach the dial, turn it gently, and learn whether Yellowstone belongs to them or to someone running 900 browser sessions from a suburban basement.

The same design deficiency afflicts our phones. Experts now advise users to configure their always-on displays so they can see useful information without unlocking the device and accidentally losing 47 minutes to emails, market panic, weather alerts, and a video of a raccoon successfully operating a latch. This is presented as a productivity strategy, though it is more accurately a ceasefire negotiation with a rectangle that has already won.

The lesson is clear: humans cannot be trusted with open-ended interfaces. Give us a portal and we will ruin camping. Give us a phone and we will ruin consciousness. Give us a fortune and we will eventually become a policy problem for Tom Steyer.

Steyer, the billionaire former hedge fund manager now seeking to save California from billionaires without frightening them into leaving, faces the most delicate design challenge of all: building a state government that can tax the ultrawealthy, regulate AI, preserve Silicon Valley’s affections, and somehow keep everyone standing at an ergonomically correct height. It is a platform that would benefit from a coiled cable—something visible, taut, and reassuringly engineered to prevent the entire thing from dangling behind the furniture.

Then there is Steve Ballmer, who said he was “duped” and feels “silly” after backing a founder who pleaded guilty to fraud. This is a relatable sentiment for anyone who has invested in innovation, democracy, a campsite reservation, or the belief that unlocking a phone will take only three seconds.

America does not lack talent, ambition, capital, wilderness, screens, billionaires, or desks. It lacks the courage to admit that all of these things require stricter cable discipline and fewer boring levers. Until then, the nation will continue fumbling beneath the surface, yanking at tangled cords, while somewhere a gamer raises his desktop two inches with the quiet dignity of a republic that still works.

The Herman Miller Coyl Standing Desk Is Built Just for Gamer  ·  The US Built a Site to Ensure Fair Access to Public Lands. T  ·  Set Up Your Phone’s Always-On Display So You’re Unlocking It
On This Day in AI History

On May 19, 2011, IBM's Watson defeated champion Jeopardy! players Brad Rutter and Ken Jennings in a historic three-game match, marking a major milestone in natural language processing and AI's ability to understand human language nuance and context.

⬛ Daily Word — Technology
Hint: A person who writes computer programs and develops software applications.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed