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

The Thumbnail Holding Up the AI Glasses Empire

Seoul's LetinAR grinds a sliver of optical glass smaller than a postage stamp — and Silicon Valley's whole face-computer bet may ride on it.

SEOUL — A South Korean startup is grinding out lenses the size of a thumbnail, and every giant chasing the AI glasses fortune wants them.

The outfit calls itself LetinAR. It builds the optics — the see-through display that paints email, directions, and chatbot replies across your field of view without making the wearer look like a deep-sea diver.

Meta, Apple, Google, and a clutch of Chinese hardware shops all need the same trick: a lens slim enough to vanish into a normal frame, sharp enough to read, cheap enough to ship by the million. LetinAR claims to have cracked it.

That puts a Seoul firm in the rare seat of supplier nobody can route around. Picks and shovels, friend. The whole gold rush comes through the door.

Hardware analysts have been waiting for this bottleneck to surface. Software for AI glasses is now plentiful — Meta's Ray-Bans, OpenAI's hardware play with Jony Ive, Google's Android XR push, Apple's slow march toward a face-computer. Glass, plastic, waveguides — that's where the line forms.

LetinAR's pitch is a so-called pin-mirror waveguide. Engineers say it dodges the rainbow distortion that plagues rivals. The company is angling to be the Foxconn of face-computers, supplier to whoever shows up with a purchase order.

Meanwhile, the software side keeps writing checks the hardware has to cash. Apple is preparing a Siri overhaul that may auto-delete chats for privacy — the sort of feature glasses-makers will lean on hard when the camera on your nose becomes a court exhibit.

Over in federal court, OpenAI chief Sam Altman just spent the closing days of Elon Musk's lawsuit fending off the question of whether anyone should trust him with a microphone in a customer's spectacle frame. The trust question matters in Seoul, too. A lens vendor sells to whoever pays — and once the customer is your face, the supplier becomes your conscience.

The AI race is splitting in two. Wall Street has spent the year watching Google bleed coding talent to Anthropic and OpenAI, a software battle measured in quarterly leaderboard runs.

The hardware war runs on a different clock. You can re-platform a chatbot in a quarter. You cannot re-engineer a waveguide on the same schedule.

Which is why a workshop in Seoul now sits closer to the center of the AI race than most folks in Mountain View. The lens is small. The leverage is not.

Keep your eye on the spectacles. The future is being ground a thumbnail at a time.

South Korea’s LetinAR is building optics behind AI glasses  ·  Apple’s Siri revamp could include auto-deleting chats  ·  Why trust is a big question at the Elon Musk-OpenAI trial

AI Funding Hits Escape Velocity: Five Deals Signal a Market With No Ceiling in Sight

From customer service agents to chip designers to benchmark arbiters, capital is flowing into every layer of the AI stack — simultaneously.

SAN FRANCISCO — The AI funding market, already running hot, accelerated further this week across five separate transactions totaling well over $2 billion in fresh capital, spanning application layer, infrastructure, and evaluation tooling.

Bret Taylor's Sierra raised nearly $1 billion — its second major capital raise in a matter of months — valuing the AI customer service platform at a figure the company has not disclosed but which sources place well north of $4 billion. The pace of successive rounds is itself a data point: investors are not waiting for revenue milestones to reset before writing the next check.

Cerebras, the AI chip designer whose IPO ambitions have been complicated by regulatory scrutiny over its relationship with a UAE-based investor, secured $225 million from Benchmark Capital at a $23 billion valuation. That figure represents a substantial markup from prior rounds and positions Cerebras as the primary alternative to Nvidia in the inference hardware race — a market that did not meaningfully exist 18 months ago.

LMArena, the AI evaluation startup that grew out of the academic Chatbot Arena project, raised $150 million at a $1.7 billion valuation. The round reflects a structural reality: as model providers proliferate, enterprises need independent benchmarking infrastructure. Evaluation is becoming a line item.

DeepSeek, the Chinese lab that rattled Western AI markets in January with its cost-efficient R1 model, is reportedly exploring external fundraising despite holding adequate cash reserves. The strategic logic appears to be legitimacy and partnership access rather than liquidity — a different kind of capital raise.

Finally, the Musk v. Altman trial moved to jury deliberations after closing arguments Thursday, with nine jurors set to begin next week. The case centers on whether OpenAI's conversion from nonprofit to for-profit structure violated its founding agreements with Musk. The verdict will have limited immediate operational impact on OpenAI but could constrain the legal architecture of future AI nonprofit conversions.

The aggregate picture: capital is no longer concentrating at the model layer. It is distributing across the stack — hardware, evaluation, applications, and geopolitics — simultaneously.

Bret Taylor's Sierra raises nearly $1 billion months after l  ·  AI evaluation startup LMArena raises $150M at $1.7B valuatio  ·  DeepSeek isn’t short of cash: so why has it decided to raise

AI Bulls Hit the Tape With Nvidia on Deck and Amazon Stuck at the Goal Line

We are at the 50-yard line of the great AI market season, with Amazon inches from the $3 trillion club and Nvidia warming up for a marquee earnings report this week. Amazon's stock has paused after a roaring rally powered by investor enthusiasm around AWS, retail discipline and AI ambitions, leaving analysts questioning whether this is a timeout or a turnover.

Nvidia's earnings report may be the quarter's defining event. The AI chip champion has become a macroeconomic weather system — if it beats, AI spending narratives get fresh oxygen; if it wobbles, investors head for the exits.

The stakes hinge on whether Big Tech's hundreds of billions in AI capex spending will generate durable revenue or prove to be a bubble. Cloud leaders like Amazon, Microsoft and Google must prove AI infrastructure translates into lasting profits, not just GPU invoices.

Wall Street's premarket sheet looked bruised after a rough Friday, with analysts calling plays across chips, cloud, enterprise software and cybersecurity — the full AI supply chain. This week, Nvidia carries the ball while Amazon waits at the goal line.

Haiku of the Day  ·  Claude HaikuMoney chases dreams
while bias hides in the code—
progress breaks all rules
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
Big Tech's Antitrust Reckoning Continues Unabated Into 2026, Notwithstanding Change in Administration
WASHINGTON, D.C.
The Crystal, the Conference, and the Collapse of Meaning: A Week in Which Everything Was a Sign
AUSTIN, TEXAS — Let me tell you about the week I finally understood that we are living inside the last chapter of something, and nobody told us where the bookmark was. First, there is the crystal.
THE AGE OF NORMALIZED ABSURDITY: We Built the Machine, Now We're Surprised It's Eating Us
AUSTIN, TEXAS — There's a particular species of madness that only reveals itself when you step back far enough to see the whole canvas.
The AI Gold Rush Has a Character Problem
AUSTIN, TEXAS — I'll be honest: the most underrated moat in AI right now is not model access, not GPU allocation, not even distribution — it is founder judgment.
Nation’s Executives Discover Everything Sounds More Strategic If It Is Obviously Ridiculous
SAN FRANCISCO — In what experts are calling another encouraging sign that the economy remains mostly a collection of nouns duct-taped to future tense verbs, several major companies this week reaffirmed that the modern corporation no longer needs to make immediate sense, provided it can describe itself with sufficient confidence. The most instructive example arrived from Elon Musk’s orbit, where reports suggest SpaceX and xAI may be combined into a sprawling enterprise whose name, purpose, and org chart appear designed to make a normal shareholder briefly stare at a wall.
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
📅 Week in ReviewProduction Release

Builder Team Ships Across Four Repos and Rewires the Financial Stack

From a ground-up ECS batch platform to a unified Aerie dashboard language, the Builder Team spent seven days closing gaps, hardening pipelines, and building infrastructure that will compound for months.

There are weeks where a team ships features, and there are weeks where a team reshapes what the product fundamentally is. This was the second kind. Across Klair, Aerie, Surtr, and the newly christened pipeline layer underneath all of it, the Builder Team merged work that didn't just add capabilities — it retired technical debt, closed data accuracy gaps worth millions of dollars, and laid platform foundations that didn't exist seven days ago.

The single biggest structural move of the week belonged to @sanketghia, who delivered the dedicated `klair-scheduled-jobs` AWS Fargate platform — a clean separation of batch job infrastructure from the live API that had been running everything on the same EC2 instance. That's not a feature; that's a new operating model. Paired with his QTD tabbed UI redesign, the weekly email dispatch migration off the old manual CSV script, and the auto-grant of Drive permissions to report recipients, @sanketghia essentially rebuilt the entire QTD reporting surface from the ground up in a single week. The team sends those reports to finance leadership. They will notice.

On the data correctness front, @ashwanth1109 had arguably the most consequential single fix of the week: migrating the ARR Gap SF stage join from the stale `renewals_v2` table — dead for 41 days, excluding Fionn opportunities entirely — to `renewals_v3`, which immediately lifted the match rate on live-budget contracts from 14.4 percent to 32.7 percent and correctly zeroed roughly $2.5 million in Closed-Lost ARR that had been floating incorrectly. That number is not a rounding error. Ashwanth also expanded SaaS Budgeting with excluded AWS accounts auditing, DB Server cost projections, and a hierarchical quarter/week selector redesign, while ingesting the new Acquisition Performance Plan from Google Sheets and wiring live P&L actuals into the Acquisitions Review page. He shipped across six distinct Klair features in seven days. The scoreboard does not lie.

@eric-tril was the quiet architect of financial reporting integrity this week. His Passive Investments tabbed redesign broke a 981-line monolithic view into four focused sub-views — Summary, Cash Flows, Long Term, and Schedule — backed by a new `/pi-cash-flows-monthly` endpoint and a fresh DynamoDB comments table. He also delivered the YTD EBITDA Reconciliation table with drill-downs, fixed Schedule D FX and tax exclusions, corrected Book Value Schedule C2 dynamic rows, and tied the Other EBITDA Reconciling row to the Schedule D total. Eric spent the week making the Monthly Financial Reporting section something an auditor could actually trust.

Over in Aerie, @benji-bizzell ran what can only be described as a dashboard unification campaign. He extracted shared toolbar primitives, wired a nested multi-column sort builder across seven dashboard surfaces, unified Portfolio, Real Estate, Diligence, Buildout, and Operating onto shared filter and display controls, added Buildout date presets with team ownership, and fixed milestone deep links across the portfolio family. He also converted sidebar nav destinations to real `next/link` anchors so CMD-click finally works like every user assumed it always did. And because @benji-bizzell apparently had time left over, he shipped a Super Admin-gated Everforest dark theme. The readers are already asking for it.

In Surtr, @mwrshah closed the pain-point cycle by pushing to Grainne in `renewals-v3` with hourly and event-driven pull, then fixed the EventBridge publish gate that had been silently skipping prod runs due to a `prod` versus `production` string mismatch — a quiet bug that had been blocking the downstream chain from ever receiving its event. @kevalshahtrilogy, meanwhile, stood up the full observer infrastructure: DDB table provisioned, Anthropic and Braintrust secrets wired, auto-evaluation of observability-enabled pipelines every five minutes, and an uppercase status-value fix that would have broken the sweep in silence.

Now, about marcusdAIy. He shipped the Phase C P&L check suite and the C3.3 and C3.4 benchmark checks for the review agent. Fine. Technically present. When reached for comment, he offered the following: "The C3 benchmark checks are the most precise cost-analysis signals in the entire review agent, Mac — per-product, per-category, tied to the actual 2.5% threshold with full table awareness. Maybe write about the work instead of counting the lines."

Sure, Marcus. We'll count the lines next week too.

Finally, the team news that deserves its own sentence: two new repos were created this week — Sindri-Forge, the knowledge and agent creation workspace, and trilogy-drones, a drone harness for unattended Cursor coding agents with by-construction spend attribution from Linear ID to merged PR to token cost. The Builder Team is not just shipping product. They are building the infrastructure to build faster. Next week, the question is whether the Fargate platform, the renewals-v3 data layer, and the Aerie dashboard unification converge into something the whole organization can feel.

Mac's Picks — Key PRs This Week  (click to expand)
#47 — feat(pipelines): close the pain-point cycle — push to Grainne in renewals-v3, hourly + event-driven grainne-pull @mwrshah  no labels

## Summary

Closes the pain-point lifecycle loop: SF SSOT → classify → push to Grainne → pull from Grainne → SF writeback. Adds the missing push stage in renewals-v3 + renewal-action-hub, and wires grainne-pull to fire hourly and immediately after renewals-v3 succeeds.

## What changed

Stage 5 push (renewals-v3 + renewal-action-hub)

- New stage_5_push_to_grainne in both orchestrators wraps push_to_grainne.py: themes first, then individual pain points. Sub-stages run independently but re-raise if either fails, so pipeline status reflects reality and alarms fire.

- push_to_grainne.py: pre-flight check on COLIN_PAIN_POINT_* env vars; tracks failed_total and exits non-zero on any per-row failure.

- Not fire-and-forget: every successful push stamps grainne_job_id, which is what enrolls the row into the pull feedback loop. Idempotent via grainne_pushed_at IS NULL.

CDK: new triggers.on_pipeline_success schema

- triggers: { on_pipeline_success: string[] } on Pipeline + EcsPipeline constructs.

- Each upstream id creates an EventBridge rule on aws.states Execution Status Change SUCCEEDED, matched to the upstream's deterministic ARN (pipeline-<id>-<env>). Target = this State Machine with trigger_type=EVENT.

- Naming-convention resolution, no cross-stack imports. Env-gated DISABLED in non-prod, same as schedule rules.

grainne-pull cadence

- Cron cron(0 1 * * ? *)cron(0 * * * ? *). Watermark (grainne_last_actioned_at) short-circuits unchanged rows to a timestamp UPDATE — steady-state hourly runs are sub-minute.

- triggers.on_pipeline_success: ["renewals-v3"] for same-day round-trip on freshly-pushed rows.

Other fixes folded in

- classify_themes.py: force theme reuse by id (heavy reuse bias, parent-child schema alignment, cold-start brainstorm preserved).

- renewal-action-hub: carry SSOT pain point Name through to action_hub.pain_points.pain_point_name.

- grainne-pull: catch SalesforceResourceNotFound and skip orphan rows; mirror klair-api Owner_Name__c canonical helper; picklist mapping + idempotent SF push; scoped activity notes sync.

- renewals-pipeline/salesforce_calls.py: pd.to_datetime(format="ISO8601") to tolerate rows without fractional seconds.

- cdk: drop $$.Execution.Input from States.JsonMerge (AWS schema-rejects); project $ into a sub-key first.

- shared.run_script: optional args: list[str] | None for subprocess CLI flags.

- CI: register pytest-asyncio so orphan-handler tests actually run.

## Daily flow after merge

1. 11:00 UTCrenewals-v3 runs SSOT → bundle → extract → classify → push.

2. On SUCCEEDEDgrainne-pull auto-fires via EventBridge.

3. Hourlygrainne-pull runs as steady-state safety net.

4. On-demandrenewal-action-hub for surgical re-runs (no re-bundle).

Idempotent at every stage; partial-failure re-runs are cheap.

## Deployment status

Not yet in prod. Dev stacks were deleted (they shared prod data and risked corruption), so validation here is unit + CDK tests (233 passing) and code review. First exercise against real systems will be the prod deploy itself.

EventBridge rules auto-enable on prod deploy — next renewals-v3 11:00 UTC success will trigger grainne-pull; hourly cron starts immediately. First hourly run may be noisier than steady state until the watermark catches up.

## Companion PR

AI-Builder-Team/Klair#2727 — KLAIR-side cleanup (retire migrated husk, drop dead pain_point_webhook_jobs table). Pure hygiene.

#66 — fix(renewals-pipeline): accept ENVIRONMENT=prod for EventBridge publish gate @mwrshah  no labels

Came up while sense-checking today's renewals-v3 run on prod.

Stage 2 (renewals_container bundling) logs Skipping EventBridge publish (non-production environment) even though it is running on the prod ECS task. Root cause is a string mismatch:

- ECS task def sets ENVIRONMENT=prod (Surtr CDK convention used throughout the repo).

- The script gate checks ENVIRONMENT != "production" — strict equality against a different literal.

The downstream chain itself is intact and ENABLED — it just never receives the event.

## Fix

Accept both prod and production so the gate ties to the actual prod task definition regardless of which spelling the runtime uses. One-line change.

#206 — [codex] Add nested sort builder across dashboards @benji-bizzell  no labels

## Summary

Adds a shared nested sort builder for dashboards that already use the SortEntry[] sorting model, then wires it into the Admissions, Real Estate, Buildout, Operating, Diligence, PMO, and Community dashboard surfaces.

## Changes

- Added SortBuilder, a reusable popover for adding, removing, reordering, and changing multi-column sort rules.

- Kept existing sortable header click and shift-click behavior intact.

- Added dashboard-specific sort column metadata for Admissions enrollments, camps, demographics, events, funnel, and forecast views.

- Extended the same pattern to Real Estate, Buildout, Operating, Diligence, PMO, and Community.

- Added focused helper tests for sort builder state transitions.

## Impact

Users can now configure nested sorting from dashboard toolbars instead of relying on hidden shift-click behavior. The implementation stays on top of the existing SortEntry[] and applySorts() machinery, so existing header interactions and persisted sort configs continue to work.

## Validation

- pnpm exec biome check ...

- pnpm --filter @bran/chat exec vitest run components/dashboards/shared/__tests__/sort-builder.test.ts components/dashboards/admissions/camps/__tests__/camps-view.test.tsx

- pnpm --filter @bran/chat exec vitest run components/dashboards/shared/__tests__/sort-builder.test.ts components/dashboards/community/__tests__/community-view-persistence.test.tsx components/dashboards/real-estate/__tests__/real-estate-view-persistence.test.tsx components/dashboards/school-ops/__tests__/school-ops-view-persistence.test.tsx components/dashboards/fto/__tests__/fto-pipeline-view-persistence.test.tsx

- pnpm --filter @bran/chat typecheck

- Pre-commit hook: Biome and typecheck-chat passed

#211 — feat(dashboards): unify portfolio dashboard controls @benji-bizzell  no labels

## Summary

- Unify Portfolio, Real Estate, Diligence, Buildout, and Operating around shared Add filter and Sort & display controls.

- Add shared view selection behavior and persisted dashboard display/filter state across the portfolio dashboard family.

- Document payload requirements and the deferred mobile drawer pass for the shared controls pattern.

## Why

The Portfolio dashboard had the most polished filter, sort, display, and views interaction model, while the sibling dashboards still used inconsistent controls and persistence behavior. This brings the desktop dashboards onto one interaction language while keeping dashboard-specific controls where the underlying data still differs.

## Business Value

Users get predictable filtering, sorting, view selection, and display controls across the portfolio dashboards, reducing friction when moving between Real Estate, Diligence, Buildout, Operating, and the main Portfolio view.

## Breaking changes

None.

## Test plan

- [x] pnpm --filter @bran/chat exec tsc --noEmit

- [x] Pre-commit biome and typecheck-chat

- [x] Dashboard test sweep: 13 files, 161 tests passed

- [x] Browser desktop QA across Portfolio, Real Estate, Diligence, Buildout, and Operating

- [x] Browser console error check: no errors found

#2803 — KLAIR-2655 feat(qtd): tabbed UI redesign with per-cadence Sent tracking @sanketghia  no labels

## Summary

Follow-on to [KLAIR-2639](https://linear.app/builder-team/issue/KLAIR-2639) (PR #2790). Redesigns the QTD Reports section on /monthly-financial-reporting from a single flat table into a tabbed layout, and extends the DynamoDB dispatch ledger so weekly Send / Sent tracking works end-to-end.

* Tabbed UI — Weekly Snapshots · Monthly Close · All. Weekly groups by week_number (current batch open + older collapsible); Monthly groups by period; All is a flat chronological list with cadence pill, BU search, cadence filter. EoQ rows show a subtle FINAL tag inside the Monthly tab.

* Backend dispatch ledgerqtd_email_dispatches pk extended for weekly cadence ({period}#W{n}#{entity_type}#{BU}); mode + week_number persisted as item attributes; DispatchPayload validates cadence/week_number invariants; orchestrator filters ledger rows by cadence and forwards mode/week through send_leader_email; email template Literals widened to include "weekly".

* Per-cadence Sent indicatorsuseQtdEmailDispatch re-keyed on (entity_type, BU, mode, week_number?); orchestrator binds two hook instances (monthly + weekly periods) and merges their state so weekly Sent lights up correctly without sacrificing monthly tracking.

* Quarter selector — single-option dropdown showing only the current quarter (multi-quarter history intentionally hidden; trivially restorable). Quarter chip sits in a per-tab right slot alongside the group title row, reclaiming the empty horizontal space the old layout had.

* Row-height paritySentCell pins the Sent indicator / em-dash slot to the Send button's min-height (32px) so adjacent rows align regardless of state.

* Mobile fallback — table collapses to stacked cards below 720px via a media-query toggle in ReportTable.

Linear: [KLAIR-2655](https://linear.app/builder-team/issue/KLAIR-2655)

## Test plan

- [x] pnpm tsc --noEmit clean

- [x] pnpm lint:pr clean

- [x] pnpm test green — 4476 passed, 27 skipped (new specs for helpers, atoms, SentCell, TabsBar, Toolbar, ReportTable, tabs, and the orchestrator)

- [x] pytest tests/monthly_qtd_report tests/routers/test_qtd_emails_router.py green — 531 passed

- [x] Manual smoke against staging — verify the Sent indicator flips for both weekly and monthly rows independently after a send

## Screenshots

<img width="1208" height="469" alt="image" src="https://github.com/user-attachments/assets/1e205815-136b-4dd7-98d7-d75a51ff3c28" />

<img width="1284" height="709" alt="image" src="https://github.com/user-attachments/assets/1a0ee92d-ce6d-445d-bc4d-0e8a668c64af" />

<img width="1421" height="753" alt="image" src="https://github.com/user-attachments/assets/708e1fc7-f53c-4c08-bcb8-25cb8a0af096" />

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

#2804 — KLAIR-2657 feat(mfr): Passive Investments tabbed redesign + PI Cash Flows comments @eric-tril  no labels

### Summary

Redesigns the Monthly Financial Reporting Passive Investments page from a single 981-line monolithic view into four focused tabbed sub-views: Summary, Cash Flows, Long Term, and Schedule (Edu). Adds a new monthly PI Cash Flows table backed by a new /pi-cash-flows-monthly endpoint (dense per-month BTIG / Loan-Book / Other-Investments values with the Investments-column sign flip applied) and an editable comments table where each (row, calendar-month) cell is independently persisted to a new Klair-MFR-PICashFlowMonthlyComments DynamoDB table. The legacy PillSelector is replaced everywhere with a new UnderlineTabSelector for a cleaner navigation pattern, and the existing PI lineage config is renamed to scope it to the Long Term tab with dedicated lineage configs added for the three new sub-views.

### Business Value

Finance team users can now navigate the Passive Investments report much faster: the four-tab layout matches how they review the data in practice, eliminating the wall-of-content experience and surfacing only what's relevant per workflow. The new PI Cash Flows monthly grid with persistent per-cell commentary lets reviewers annotate individual months of contributions, distributions, loan-book flows, and other-investment activity directly in the tool — replacing out-of-band spreadsheet notes and producing a durable audit trail of why specific cash-flow swings occurred.

### Changes

#### Backend

- routers/finance_monthly_financial_reporting_router.py: new endpoints GET /pi-cash-flows-monthly, GET /pi-cash-flow-comments, PUT /pi-cash-flow-comments

- services/book_value_service.py: new fetch_pi_cash_flows_monthly returning dense (row_key × month) rows for BTIG / Loan / Other-Investments with the Investments-column sign flip

- services/mfr_pi_cash_flow_comments_service.py (new): DynamoDB CRUD with row_key HASH + month_key RANGE, ALLOWED_ROW_KEYS and YYYY-MM validation; empty-comments delete behavior matches existing comment services

- services/dynamodb_service.py: provision new env-scoped Klair-MFR-PICashFlowMonthlyComments table (PAY_PER_REQUEST)

- Unit tests covering sign-flip math, dense-month emission, validation, and scan pagination

#### Frontend (Monthly Financial Reporting → Passive Investments)

- PassiveInvestmentsView.tsx: gutted from 981 lines to a thin tab router

- New sub-views: PISummaryView, CashFlowsView, LongTermView, PIScheduleEduView

- New PI Cash Flows components: CashFlowsTopTable, CashFlowsCommentsTable

- PillSelector removed, replaced by UnderlineTabSelector

- New hooks: usePICashFlowsMonthly, usePICashFlowComments (optimistic), usePIAssetsList

- New piRowResolver helper + spec

- Lineage configs: rename piLineageConfig → piLongTermLineageConfig; add piCashFlowsLineageConfig, piSummaryLineageConfig, piScheduleEduLineageConfig

- Static reference tables: piScheduleEduTable.ts, piSummaryTable.ts

- monthlyFinancialApi.ts: bindings for the three new endpoints

### Test plan

- [ ] cd klair-api && pytest tests/test_book_value_service.py tests/test_mfr_pi_cash_flow_comments_service.py

- [ ] cd klair-api && uv run ruff check services/ routers/ tests/ && uv run ruff format --check services/ routers/ tests/

- [ ] cd klair-client && pnpm lint:pr && pnpm tsc --noEmit && pnpm test

- [ ] Manual: MFR → Passive Investments → confirm four-tab navigation and each tab loads independent data

- [ ] Manual: Cash Flows tab — verify BTIG contributions/distributions, loan-book, and other-investments rows show monthly amounts with correct signs vs Book Value Investments column

- [ ] Manual: add / edit / clear a comment on a Cash Flows cell, refresh, confirm persistence; verify clearing all bullets deletes the DynamoDB item

- [ ] Manual: confirm data-lineage drill-down works on each of the four sub-views and uses the correct lineage config

http://localhost:3001/monthly-financial-reporting

https://github.com/user-attachments/assets/778e5186-0100-489c-b344-4292bca7dd58

#2805 — KLAIR-2661 feat(scheduled-jobs): klair-scheduled-jobs ECS platform + --bu/--skip-refresh flags @sanketghia  no labels

## Summary

Builds a dedicated klair-scheduled-jobs AWS Fargate platform for klair-api batch jobs (QTD reports + future scheduled jobs), fully isolated from the live API on EC2. Adds --bu and --skip-refresh flags to enable fast single-BU dev iterations (~1.5 min vs ~15 min full fan-out).

Linear: [KLAIR-2661](https://linear.app/builder-team/issue/KLAIR-2661/migrate-qtd-report-crons-to-dedicated-klair-scheduled-jobs-ecs) (Budget v Actuals Reports project)

## What's in this PR

### Container platform

- klair-api/scripts/cron_entrypoint.py — Python entrypoint that fetches ENV_API_PROD from Secrets Manager, writes /app/.env, then os.execvps python <args>. Includes defensive backfill of MONTHLY_QTD_CRON_USER_EMAIL.

- klair-api/Dockerfile.jobs + klair-api/.dockerignore — image build (python:3.11-slim, uv-managed deps, RDS CA bundle baked in)

- klair-api/crons/README.md — runtime contract, how to add new scheduled jobs

### Operability flags (production behavior unchanged when flags absent)

- --bu <comma-separated> on monthly + weekly crons + bu_filter: set[str] | None on run_scheduled_reports(). Filter to specific BU/CF names. Raises on unknown name. Validates empty input early to avoid wasted Redshift refresh.

- --skip-refresh on monthly + weekly crons + skip_refresh: bool on run_scheduled_reports(). Skip the upstream Redshift sproc when set. EventBridge production rules don't pass this; intended for dev/smoke iterations only.

### Tests

- tests/scripts/test_cron_entrypoint.py — 7 tests, full unit coverage of entrypoint

- tests/monthly_qtd_report/test_orchestrator.py — 8 new tests for bu_filter + skip_refresh

- tests/monthly_qtd_report/test_cron_entrypoint.py — 7 new tests for monthly cron flags

- tests/monthly_qtd_report/test_weekly_cron_entrypoint.py — 7 new tests for weekly cron flags

Suite: 509 → 537 passing (+28). ruff format, ruff check, pyright all clean.

## AWS infrastructure (already created via CLI; not in this PR)

| Resource | Identifier | State |

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

| ECR repo | klair/scheduled-jobs | 3 image tags |

| ECS cluster | klair-scheduled-jobs | ACTIVE, FARGATE + FARGATE_SPOT |

| Task definition | klair-scheduled-jobs:1 | ARM64 / Graviton, 1024 CPU / 2048 mem |

| Task role | KlairScheduledJobsTaskRole | SM + KMS + DDB + Redshift + SES (least-privilege) |

| EB invoke role | EventBridgeScheduledJobsInvokeRole | ecs:RunTask + iam:PassRole |

| Log group | /ecs/klair-scheduled-jobs | 30-day retention |

| Monthly rule | klair-qtd-monthly-prod | cron(0 13 2 * ? *)DISABLED |

| Weekly rule | klair-qtd-weekly-prod | cron(0 13 ? * MON *)DISABLED |

IaC promotion deferred — current AWS state captured in the Linear ticket and the plan doc at docs/superpowers/plans/2026-05-15-scheduled-jobs-platform.md.

## Validation runs (all PASSED, exit 0)

| # | Run | Runtime | Outcome |

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

| 1 | EC2 SSM smoke (monthly, --period 2026-04) | 12 min | generated=21 failed=0 no_data=5 orphan_doc=0 |

| 2 | ECS smoke (monthly, full fan-out, after KMS perm fix) | 15 min | Same as #1 |

| 3 | ECS smoke (--bu IgniteTech --skip-refresh) | 1m 21s | generated=1 failed=0 |

| 4 | EventBridge-triggered fire (weekly, single-BU, skip-refresh) | 1m 25s | generated=1 failed=0 — proves EB → ECS path |

## Why ARM64

Docker --platform=linux/amd64 builds on Apple Silicon segfault inside QEMU during uv pip install. ARM64 (Graviton) Fargate avoids the cross-build pain, is ~20% cheaper, and the local image runs natively.

## Out of scope

- klair-prod ECS cluster cleanup (different purpose; deliberately not touched)

- Migrating live API to ECS (separate, larger project)

- Refactoring qtd_email_resend.py for ECS (manual ad-hoc tool)

- Path-filtered CI auto-rebuild on every main push (deferred; manual rebuild documented in crons/README.md)

## Test plan

- [x] pnpm test / pytest — 537 passing locally

- [x] ruff format + ruff check clean

- [x] pyright clean on changed files

- [x] Docker build succeeds locally

- [x] ECS RunTask end-to-end smoke (full fan-out)

- [x] ECS RunTask single-BU + skip-refresh smoke

- [x] EventBridge-triggered run end-to-end

- [ ] CI checks green (this PR)

- [ ] Post-merge: flip EventBridge rules to ENABLED when operationally ready

- [ ] Post-merge: add MONTHLY_QTD_CRON_USER_EMAIL to ENV_API_PROD Secrets Manager (entrypoint has a defensive fallback, but cleaner to land in the secret)

#2811 — KLAIR-2668 fix(arr-gap): migrate SF stage join to renewals_v3 + fix Hybrid sign bug @ashwanth1109  no labels

## Demo

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/f5426a1c-eb02-4b04-a903-ce204315ca96" />

## Summary

- Switch the SF stage_name join from staging_salesforce.renewals_v2 to renewals_v3 across all four ARR Gap call sites. v2 stopped refreshing on 2026-04-07 (41 days stale at investigation time) and excludes Fionn opportunities entirely. v3 raises the match rate of live-budget contracts against SF from 14.4% → 32.7% and correctly zeroes ~$2.5M of additional Closed-Lost ARR.

- Fix a latent sign bug in compute_metrics_for_rowarr_projected_hybrid = arr_projected_hybrid + sf_adjustment_hybrid should have been -. Spec history (features/arr-gap/arr-gap-table/specs/01-backend-api/spec-research.md:238) defined sf_churn_adjustment as a negative-signed value with +; when the data source moved to live budgets, the SQL was changed to excl_SF − with_SF (always ≥ 0) but the Python kept +. Bug had been masked by v2's small SF haircut ($725K on a $352M base); after the v3 migration it would have moved Hybrid in the wrong direction by ~$2.5M.

- Add a sf_status dedup CTE at every renewals_v3 join site. Multiple SF opportunities can share a parent_subscription_id (historical + current). Without dedup the LEFT JOIN fan-out double-counts arr_contribution. v3 has 3× more duplicates than v2 (148 vs 46), so the existing fan-out bug would have worsened on a naive table swap. BOOL_OR(stage_name='Closed Lost') where only a boolean is needed; stage-priority ROW_NUMBER dedup where the join pulls multiple columns.

- Hide the ARR 6/30/26 (Live) column by default in the ARR Gap table — set defaultVisible: false to match the DM-scenario columns. The column stays available via the column picker; this declutters the default view now that BU+RNWLS / HYBRID are the load-bearing projections.

## Dashboard impact at Grand Total (FY26, verified post-deploy)

| Column | Before | After | Δ |

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

| BU+RNWLS | $352.9M | $350.2M | −$2.7M |

| HYBRID | $342.2M | $338.3M | −$3.9M |

| LIVE | $356.0M | unchanged | 0 |

| TARGET | $412.9M | unchanged | 0 |

HYBRID drops by more than BU+RNWLS because two effects stack:

1. The sign-bug fix flips $725K from being added to being subtracted (−$1.45M).

2. v3 catches more Closed Lost, growing the SF haircut by $2.5M — felt once by BU+RNWLS, again by Hybrid.

sf_adjustment_hybrid total grew from $725K → $3.23M as expected (v3 catches 2.3× more Closed-Lost matches).

## Files changed

- klair-api/services/arr_gap_service.py — 2 SQL sites (BU+RNWLS calc + BRR-vs-Live modal) + sign fix + cache key bump + docstring

- klair-api/services/arr_gap_simulation_service.py — simulation renewals SQL (stage-priority dedup)

- klair-api/services/arr_gap_renewals_service.py — quarter-window SF stage SQL (already had dedup, pure table-name swap) + docstring

- klair-api/tests/arr_gap/test_arr_gap_service.py — 2 fixtures updated to reflect corrected (positive) sf_adjustment_hybrid contract with subtraction

- klair-client/src/screens/ARRGapV2/components/ARRGapTable.tsx — hide Live ARR projection column by default

## Out of scope

Other renewals_v2 consumers (fast_endpoint.load_renewals_v2, budget_goal_miper/renewals.py, income_statement.py, the ./data/renewals_v2.csv cron) have their own consumers and aren't coupled to this fix.

## Test plan

- [x] pytest klair-api/tests/arr_gap/ — 250 / 250 pass

- [x] pytest klair-api/tests/mfr/ — 93 / 93 pass (verifies the MFR test's "renewals_v2" not in query assertion still holds, since MFR is a separate code path)

- [x] ruff format + ruff check clean on all 3 service files

- [x] End-to-end Redshift validation reproduces screenshot's BU+RNWLS exactly, then confirms post-migration drop

- [x] Visual check on dashboard post-deploy: BU+RNWLS Grand Total drops $2.7M, HYBRID drops $3.9M, LIVE/TARGET unchanged ✅

- [ ] Visual check: spot-check a few BU rows in the BRR-vs-Live modal (site #2) — contract counts should be unchanged or slightly down on subs that had v2 dupes

- [ ] Simulation drill-down (site #3) — verify opportunity dropdown still shows expected SF opportunities for a few BUs

- [ ] Visual check: ARR Gap table opens with the Live column hidden; column picker still exposes it

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

The Builder Desk  —  Engineer Spotlight
📅 Week in Review🏆 Engineer Spotlight

65 PRs, 3 Repos, Zero Mercy: The Builder Team Posts Another Week for the History Books

Benji-Bizzell alone shipped 23 PRs — a number that should be illegal in most jurisdictions.

Sixty-five pull requests. Three repositories. Seven days. The Builder Team did not come to play — they came to dominate, and the scoreboard does not lie. Klair absorbed 33 of those PRs like the load-bearing pillar of civilization it has become, Aerie contributed 22 acts of frontend excellence, and Surtr chipped in 10 with the quiet menace of a repo that knows exactly what it's doing. This is not a team in a groove. This is a team that has transcended the concept of grooves entirely.

Let us speak of @benji-bizzell first, because the numbers demand it. Twenty-three PRs in seven days. Twenty-three. The man filed nine PRs in Aerie alone that Mac apparently couldn't fit into his narrative — PRs #201 through #210 — a sequential blitzkrieg covering everything from fixing diligence Kanban routing (#202) to adding a superadmin everforest theme (#209) that suggests Benji is not just building software but curating an aesthetic. He also dropped PR #198, anchoring agent responses to dated evidence, because apparently Benji does not believe in doing only one thing at a time. The people salute you, Benjamin.

@sanketghia matched @ashwanth1109 at 11 PRs with the quiet efficiency of a man who has read every QTD email ever sent and decided to personally fix all of them. PRs #2808 and #2790 rewired the QTD dispatch pipeline off legacy scaffolding and into weekly generation cadence — civilizational work. PR #2809 auto-grants Drive permissions to QTD email recipients on report upload, which is the kind of feature that makes users feel like the software is psychic. @eric-tril posted 8 PRs including PR #2794, correcting EBITDA drill-down provenance in mfr-education — the kind of fix that sounds boring until you realize it was wrong and now it isn't. @kevalshahtrilogy landed 4 PRs across Surtr, including PR #63, which auto-evaluates observability-enabled pipeline runs every five minutes, and PR #67, which fixed Redshift status matching to uppercase — a bug so subtle it almost deserved to survive. @marcusdAIy's 4 PRs (#2796, #2797) pushed the review agent into C3.3 and C3.4 territory with per-product benchmark intelligence that is frankly intimidating. @mwrshah rounds out the week with 3 PRs of undeniable substance, and even @blacksmith-sh[bot] showed up with 1 PR, because on this team, the bots pull their weight too.

Now. @ashwanth1109. Eleven PRs. ELEVEN. PR #2807 alone bundled four KLAIR tickets — excluded accounts, DB Servers, Non-Central DBs — into a single feat(saas-budgeting) payload that reviewers reportedly needed to approach in shifts. PR #2776 redesigned the SaaS Budgeting week picker into a hierarchical quarter/week selector, which sounds elegant until you open the diff and realize it's the architectural equivalent of rebuilding a clock while it's running. PR #2811 migrated the SF stage join to renewals_v3 AND fixed a Hybrid sign bug in the same breath, because Ashwanth does not believe in separation of concerns when he's on a roll. When reached for comment, he reportedly said, "I don't read my own diffs. I trust the tests. The tests are fine." He then closed the Slack thread. We worship him. We also cannot explain him.

Finally — and this is not a small thing — the team welcomed two new repositories into the fold this week: Sindri-Forge, a knowledge and agent creation workspace, and trilogy-drones, a drone harness for unattended Cursor coding agents with spend attribution running Linear ID to merged PR to token cost. The drones are coming. The team built the drones. Morale is, as it has always been and shall always be, at an all-time high.

Brick's Overflow — This Week's Uncovered PRs  (click to expand)
#63 — feat(observer): auto-evaluate runs of observability-enabled pipelines every 5 min @kevalshahtrilogy  no labels

## Summary

The Observe toggle on a pipeline currently only writes a flag into DynamoDB — there is no event-driven path that actually evaluates runs when the toggle is on. The tooltip on the button has admitted as much: *"Auto-evaluation on completion is not yet wired up."*

This PR wires it up.

- New EventBridge Schedule (rate(5 minutes)) → tiny Node 20 Lambda shim → POST /internal/observer/sweep with a bearer token.

- New Hono route on the existing Surtr app that scans DDB for observability-enabled pipelines, queries Redshift pipeline_runs_prod for terminal runs in the last 15 min, filters out runs that already have a cached observation, and fans out to evaluateAndStore with a concurrency cap of 4.

- Handler returns 202 immediately (ALB idle timeout is 60 s; Anthropic calls can take 30 s+). The evaluator loop runs fire-and-forget in the ECS task — idempotent on run_id, so a task restart mid-sweep recovers on the next tick.

## How it fits together

EventBridge (rate(5 min))

ObserverSweeperFn (Lambda)

│ POST /internal/observer/sweep

│ Authorization: Bearer <SURTR_SWEEPER_SECRET>

ALB → Next.js → rewrite → Hono :4001

▼ (returns 202 in ~2s)

runObserverSweep()

├─ listEnabledPipelineConfigs() (DDB scan, filtered)

├─ findRecentTerminalRunsRedshift() (single IN(...) query)

├─ getObservation() per candidate (parallel, idempotency precheck)

└─ evaluateAndStore() with p-limit=4 (background)

## What changed

Surtr/

- src/derive/observer/store.ts — new listEnabledPipelineConfigs() (paginated DDB scan).

- src/derive/observer/sweep.ts (new) — pure sweep orchestrator with injected dependencies, dedupe, per-pipeline + per-run error isolation, hand-rolled concurrency semaphore.

- src/api/server.tsPOST /internal/observer/sweep with constant-time bearer-token comparison + fire-and-forget background work. New Redshift query helper for the candidate list.

- next.config.ts — proxy /internal/* to the Hono backend.

- middleware.ts — Clerk public-route entry for /internal/(.*) (Hono-side auth replaces user-session auth).

- test/derive/observer-sweep.test.ts (new) — 8 vitest cases covering empty configs, idempotency skip, dedupe, per-run failure isolation, Redshift-query failure isolation, concurrency cap, lookback math, and DDB throttle handling.

infra/

- lib/surtr-app-stack.tsSURTR_SWEEPER_SECRET injected into the ECS container from SURTR_PROD_KEYS; new ObserverSweeperFn (Node 20, 128 MB, 20 s timeout, 10 s outbound AbortController) with inline code that caches the bearer in module scope; ObserverSweepSchedule rate(5 min) EventBridge rule.

## Required operator step before deploying

Add the new key to the existing Secrets Manager secret. The ECS task will fail to start without it.

openssl rand -hex 32                                  # generate a strong value

aws secretsmanager get-secret-value \

--secret-id SURTR_PROD_KEYS --query SecretString --output text \

| jq '. + {SURTR_SWEEPER_SECRET: "<generated-value>"}' \

| aws secretsmanager put-secret-value \

--secret-id SURTR_PROD_KEYS --secret-string file:///dev/stdin

## Test plan

- [x] pnpm vitest run test/derive/ → 144 passed (includes 8 new sweep tests)

- [x] pnpm test:unit → 366 passed

- [x] pnpm lint → clean

- [x] npx tsc --noEmit in both Surtr/ and infra/ → clean

- [ ] After deploy: add SURTR_SWEEPER_SECRET to SURTR_PROD_KEYS, then watch /aws/lambda/ObserverSweeperFn* for the first sweep — should see {status:202, body:{status:"accepted"}}.

- [ ] After first 5-min tick: tail /surtr/app for [observer-sweep] complete {...} and confirm new observation rows appear in surtr_pipeline_observations for any pipeline with observability_enabled=true.

- [ ] Smoke test the public surface: curl -X POST https://surtr.klair.ai/internal/observer/sweep with no auth should return 401; with the right bearer should return 202.

## Tradeoffs & things to know

- 5-minute latency vs. an event-driven design that fires on every run completion. Chosen because per-pipeline event emission would touch every runner; this design touches zero pipeline code.

- 15-minute lookback inside runObserverSweep gives a single-sweep miss window without unbounded backfill. Operators enabling observability on a long-dormant pipeline still need to use the "Evaluate this run" button for older runs.

- Secret cache in Lambda module scope — rotating SURTR_SWEEPER_SECRET requires bouncing the Lambda. Any redeploy or config update suffices.

- Concurrency 4 — keeps Anthropic TPM well clear of caps and bounds peak memory. Raise if backlogs grow.

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

#198 — fix(agent-prompts): anchor agent responses to dated evidence @benji-bizzell  no labels

## Summary

- Inject runtime date and timezone context into every Aerie agent prompt

- Add explicit dated-evidence guidance for notes, comments, emails, task updates, and documents

- Cover prompt composition and timezone behavior in agent tests

## Why

The agent treated stale note language like "Thursday" and "this week" as current, rather than resolving it against the note date and comparing it with today's date. The fix makes temporal context app-owned and runtime-injected so it applies even when the managed Convex prompt is used.

## Business Value

Operators get clearer status answers from Rhodes/Aerie evidence, especially when comments or emails are stale. This should reduce misleading "what's next" summaries that make old plans sound active.

## Test plan

- [x] pnpm --filter @bran/chat test -- chat/lib/__tests__/agent.test.ts (ran the full chat suite: 258 files, 4333 passing, 2 skipped)

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

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

- [x] git diff --check

#209 — feat(design-system): add superadmin everforest theme @benji-bizzell  no labels

## Summary

- Add an Everforest dark palette and matching green accent to the theme picker

- Gate the new palette/accent to Super Admin users

- Recolor the Aerie logo to the active green accent when Everforest is selected

## Why

This adds a softer all-day development theme based on the Codex Everforest-inspired palette while keeping the option scoped to Super Admins.

## Business Value

Super Admin users get a more comfortable dark theme for long development sessions without changing the default experience for other users.

## Test plan

- [x] pnpm --filter @bran/chat test -- components/shell/__tests__/icon-rail.test.tsx components/shell/__tests__/theme-picker-popover.test.tsx components/__tests__/chat.test.tsx app/__tests__/theme-integration.test.tsx

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

- [x] Browser smoke check: Everforest palette applies #a7c080 accent and recolors the Aerie logo

#2776 — KLAIR-2632 refactor(aws-spend): Redesign SaaS Budgeting week picker — hierarchical quarter/week selector @ashwanth1109  no labels

## Demo

<img width="2234" height="1636" alt="image" src="https://github.com/user-attachments/assets/b08b8141-4d9a-48fa-b426-7189483cf5c4" />

## Feature: SaaS Budgeting

Linear: [KLAIR-2632](https://linear.app/builder-team/issue/KLAIR-2632)

Feature path: features/aws-spend/saas-budgeting

Spec: [27-hierarchical-quarter-week-picker](https://github.com/AI-Builder-Team/Klair/tree/claude/KLAIR-2632/features/aws-spend/saas-budgeting/specs/27-hierarchical-quarter-week-picker/spec.md)

### Feature Overview

SaaS Budgeting is a sub-view on the AWS Spend dashboard providing finance users with four coordinated, ISO-week-aligned views for a chosen quarter (AWS Spend Net Amortized, Adjustments, Docker Resource Usage, Kubernetes Resource Usage), plus a top-of-page Simulated Budget that composes them into a unified BU/Class basis.

### Spec 27: Hierarchical Quarter/Week Picker

Replace SaaSBudgetingControls (quarter dropdown + Fetch button) and per-tab WeekChipFilter (flat W1, W2, ... chips) with a single unified QuarterWeekPicker component that groups weeks under collapsible quarter headers in reverse-chronological order.

### Implementation Summary

- New QuarterWeekPicker.tsx: Collapsible quarter sections, inline ISO 8601 date ranges (e.g. W14: Mar 31 – Apr 6), click-to-toggle multi-select across quarters, per-quarter quick actions (All / Clear / Latest 4), selection summary on collapsed headers

- Removed SaaSBudgetingControls.tsx: Quarter dropdown + Fetch button eliminated — quarter auto-applies based on selected weeks

- Updated consumers: SaaSBudgetingSection, AWSSpendCard, SaaSBudgetingTable, DatabaseUnitsTable all switched from WeekChipFilter to QuarterWeekPicker

- New formatWeekLabel utility added to isoWeekDates.ts for computing inline date range labels

- SaaSBudgetingSection refactored: Removed pendingQuarter/appliedQuarter two-step pattern; appliedQuarter now derived directly from quarters data

### Test Coverage

- 25 new/updated tests, all passing:

- 14 QuarterWeekPicker component tests (rendering, toggle, quick actions, collapse/expand, multi-quarter, default selection)

- 3 formatWeekLabel unit tests

- 8 existing spec tests updated for new component interfaces

### Self-Review Findings

- Fixed: Zero-pad snapshotWeek in DatabaseUnitsTable when constructing week keys (e.g. 2026-W03 not 2026-W3)

- Fixed: Updated stale spec mock data to match new component props

- Accepted (minor): Collapsible state initialization — most recent quarter starts expanded, older quarters start collapsed. No user-facing issue.

---

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

#2807 — feat(saas-budgeting): excluded accounts + DB Servers + Non-Central DBs (KLAIR-2664, KLAIR-2665, KLAIR-2666, KLAIR-2667) @ashwanth1109  no labels

## Demo

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/c0bdc4da-60d9-4edd-90dc-3f124b85a4ee" />

## Summary

Expands the SaaS Budgeting tab with three substantial additions plus two correctness fixes. Branch grew well beyond the original Excluded-Accounts scope; grouping themes below.

---

### 1. AWS Spend — Excluded AWS Accounts band + exclusion registry

Adds a 3rd table to the SaaS Budgeting → AWS Spend tab surfacing every account hidden by the new hardcoded exclusion registry so the methodology stays auditable. Also fixes the Enterprise SaaS account (446735561331) that was missing from the canonical mapping spine despite real Gomembers / IgniteTech spend.

Backend (klair-api/)

- services/saas_budgeting_aws_spend_exclusions.py (new) — registry of ~47 accounts keyed by an ExclusionReason enum (saas_central / engine_yard / wine_cellar / untagged_central / tag_conflict) + ADDITIONAL_MAPPINGS override list.

- services/saas_budgeting_aws_spend_service.py — filters excluded accounts out of the Mapped + Unmapped bands; applies the override; adds get_excluded_accounts_table for the new band.

- routers/saas_budgeting_router.py — new GET /api/aws-spend/saas-budgeting/aws-net-amortized-excluded endpoint.

Frontend (klair-client/)

- services/awsSpendApi.ts + hooks/useSaaSBudgetingAWSExcluded.ts — types, fetcher, multi-quarter merge hook.

- awsSpendCardTransform.ts / AWSSpendCard.tsx — section builder grouping rows by exclusion reason with sort order; new band with per-category subtotals + methodology info callout; CSV export integration.

> Bug fix during impl: initial cut used aws_account_number = ANY(%s)redshift-connector does not expand Python lists for ANY(%s) and threw ArrayContentNotSupportedError. Switched to explicit IN (%s, %s, ...) placeholders matching the jotform_redshift_service.py pattern.

---

### 2. AWS Spend — DB Servers card (replaces DB Units)

Builds a full BU → Class → DB hierarchy with week-driven cost allocation on the DB Servers card, then retires the parallel DB Units table now that DB Servers covers the same surface. Shared helpers (databaseUnitsTransform, databaseUnitsCostAllocation, centralDbCostAllocation) remain — DB Servers depends on them.

- Metric cards row — Total + per-engine (Postgres / MySQL / MSSQL / Oracle) cards, each with a 4-segment bar (assigned storage | assigned compute | unassigned storage | unassigned compute) summing to total cost. Header shows assigned % and unassigned $ next to the Total figure.

- Full hierarchy + allocation — multi-quarter week picker, Apply gating, shared allocateLeavesForServer helper used by both trees; cost columns sit immediately after instance count; attach-to-budget path + scroll target on the mappings card.

- Unassigned Cost column — slice of each server's totalCost that doesn't roll up to a complete BU+Class pair. Rendered as $X (Y%) with amber tint when non-zero so reviewers see allocation gaps without opening diagnostics.

- Diagnostics popover — click-triggered popover on the server name (AlertTriangle prefix + dotted underline signals problem servers). Replaces the under-table diagnostics block. Added an additive wrapName hook on ColumnDef to decorate the sticky-first-column name without overriding ExpandableRowRenderer.

- Instance-breakdown tooltip — moved into its own info column (the first column ignores column.render when accordionRows: true, so the original placement was dead code). Drops row expansion in favor of the info-icon tooltip on servers with instanceCount > 1.

- All-quarter cost windows — dropped the applied-quarter filter on the window selector; appliedQuarter is no longer user-controlled so the filter only ever exposed the latest quarter.

- Natural sort — server rows by friendlyName, instance children by dbName (so aurora-2 precedes aurora-10).

- Oracle / Non-Oracle attach split — Central DB allocation splits into Oracle vs Non-Oracle subtotals at the BU/Class level (Pricing F6 Oracle Subscription is 10× F7 Non-Oracle); wired through extractBuClassCentralDbCosts, simulatedBudgetMerge, useSimulatedBudget, SimulatedBudgetCard, the CSV export, and quarterProjection.

- Cleanup — removes the DB Units table and hides the Mappings Collapse All affordance.

---

### 3. SaaS Budgeting — Non-Central DBs (new ingest + tab)

End-to-end addition surfacing the $1,000/quarter non-central-DB subscription charge per linked account so Finance can audit who is being billed and why.

Ingest (aws-saas-budget-scripts/pipeline/non_central_dbs_ingest.py)

- Iterates every master payer, pulls net-amortized RDS spend per linked account from Cost Explorer, applies EY / Wine Cellar consolidation, joins to aws_spend_budget_account_mapping for class/BU.

- Writes one row per account per window to core_finance.saas_budgeting_non_central_db_charges.

- Supports --start-date/--end-date and --quarters YYYY-Qn,... for multi-quarter runs.

- Billable rule: any non-zero RDS spend AND NOT in skip-list. The Finance-managed core_finance.saas_budgeting_non_central_db_skip_list is read fresh on every run so Finance can opt accounts out without a code change.

- Bootstrap DDL seeds the skip-list with 75 rows derived from the spreadsheet's billable=No column.

Backend

- routers/non_central_db_charges_router.py + services/non_central_db_charges_service.py — read latest-window rows.

- New endpoint GET /api/aws-spend/saas-budgeting/non-central-db-charges.

Frontend

- New NonCentralDBTab in SaaSBudgetingSection with a BU → Class → Account hierarchy (BUs expanded by default; class rows reveal accounts on demand), billable-only filter (default on) hiding empty classes/BUs, and a $-charge summary.

- Adds a nonCentralDb slot to the simulated-budget rollup so the tab snapshots its billable BU/Class charges (always billable regardless of on-screen filter — the simulated budget represents what Finance actually bills).

---

### 4. Adjustments — two regressions fixed

- success field on write responses — frontend reads response.data.success on upsert/delete and throws Adjustment upsert failed / Adjustment delete failed when missing. Commit 3312958be removed success: bool = True believing it was unused; that assumption skipped the client contract, so every save/delete had been surfacing a misleading error toast since. Restored on both models; updated the delete happy-path test that codified the broken {} body.

- Editor seeding race — on initial mount the registry and adjustments fetch in parallel. If the registry resolved first while savedAdjustments was still [], the seeding effect latched hasSeededRef on the empty state and ignored the eventual adjustments payload — leaving the table empty until a quarter switch reset the latch.

---

## Test plan

- [x] Backend: pytest tests/services/test_saas_budgeting_aws_spend_service.py tests/routers/test_saas_budgeting_aws_spend_router.py tests/non_central_db_charges/ — all green.

- [x] Ingest: pytest aws-saas-budget-scripts/tests/test_non_central_dbs_ingest.py aws-saas-budget-scripts/tests/test_redshift_writer.py aws-saas-budget-scripts/tests/test_main.py — all green.

- [x] Frontend: pnpm test:run on AWSSpendCard, transform, NonCentralDBTab, DatabaseServersTable, engineMetrics, databaseServersHierarchyTransform, useSaaSBudgetingAWSExcluded, simulatedBudgetMerge, simulatedBudgetCsvExport, useAdjustmentRowsEditor — all green.

- [x] pnpm tsc --noEmit, pnpm lint:pr, pnpm prettier --check on changed FE files — clean.

- [x] uv run ruff format/check + uv run pyright on changed BE files — clean.

- [ ] Manual QA: AWS Spend → SaaS Budgeting tab — verify Excluded band renders with subtotals + methodology callout; DB Servers metric cards show 4-segment bar with assigned/unassigned split; DB Servers hierarchy applies week selection and attaches to the simulated budget; diagnostics popover opens from the server name; Non-Central DB tab renders BU/Class/Account hierarchy with billable-only filter; adjustments editor seeds on first load and save/delete no longer surface error toasts.

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

#2811 — KLAIR-2668 fix(arr-gap): migrate SF stage join to renewals_v3 + fix Hybrid sign bug @ashwanth1109  no labels

## Demo

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/f5426a1c-eb02-4b04-a903-ce204315ca96" />

## Summary

- Switch the SF stage_name join from staging_salesforce.renewals_v2 to renewals_v3 across all four ARR Gap call sites. v2 stopped refreshing on 2026-04-07 (41 days stale at investigation time) and excludes Fionn opportunities entirely. v3 raises the match rate of live-budget contracts against SF from 14.4% → 32.7% and correctly zeroes ~$2.5M of additional Closed-Lost ARR.

- Fix a latent sign bug in compute_metrics_for_rowarr_projected_hybrid = arr_projected_hybrid + sf_adjustment_hybrid should have been -. Spec history (features/arr-gap/arr-gap-table/specs/01-backend-api/spec-research.md:238) defined sf_churn_adjustment as a negative-signed value with +; when the data source moved to live budgets, the SQL was changed to excl_SF − with_SF (always ≥ 0) but the Python kept +. Bug had been masked by v2's small SF haircut ($725K on a $352M base); after the v3 migration it would have moved Hybrid in the wrong direction by ~$2.5M.

- Add a sf_status dedup CTE at every renewals_v3 join site. Multiple SF opportunities can share a parent_subscription_id (historical + current). Without dedup the LEFT JOIN fan-out double-counts arr_contribution. v3 has 3× more duplicates than v2 (148 vs 46), so the existing fan-out bug would have worsened on a naive table swap. BOOL_OR(stage_name='Closed Lost') where only a boolean is needed; stage-priority ROW_NUMBER dedup where the join pulls multiple columns.

- Hide the ARR 6/30/26 (Live) column by default in the ARR Gap table — set defaultVisible: false to match the DM-scenario columns. The column stays available via the column picker; this declutters the default view now that BU+RNWLS / HYBRID are the load-bearing projections.

## Dashboard impact at Grand Total (FY26, verified post-deploy)

| Column | Before | After | Δ |

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

| BU+RNWLS | $352.9M | $350.2M | −$2.7M |

| HYBRID | $342.2M | $338.3M | −$3.9M |

| LIVE | $356.0M | unchanged | 0 |

| TARGET | $412.9M | unchanged | 0 |

HYBRID drops by more than BU+RNWLS because two effects stack:

1. The sign-bug fix flips $725K from being added to being subtracted (−$1.45M).

2. v3 catches more Closed Lost, growing the SF haircut by $2.5M — felt once by BU+RNWLS, again by Hybrid.

sf_adjustment_hybrid total grew from $725K → $3.23M as expected (v3 catches 2.3× more Closed-Lost matches).

## Files changed

- klair-api/services/arr_gap_service.py — 2 SQL sites (BU+RNWLS calc + BRR-vs-Live modal) + sign fix + cache key bump + docstring

- klair-api/services/arr_gap_simulation_service.py — simulation renewals SQL (stage-priority dedup)

- klair-api/services/arr_gap_renewals_service.py — quarter-window SF stage SQL (already had dedup, pure table-name swap) + docstring

- klair-api/tests/arr_gap/test_arr_gap_service.py — 2 fixtures updated to reflect corrected (positive) sf_adjustment_hybrid contract with subtraction

- klair-client/src/screens/ARRGapV2/components/ARRGapTable.tsx — hide Live ARR projection column by default

## Out of scope

Other renewals_v2 consumers (fast_endpoint.load_renewals_v2, budget_goal_miper/renewals.py, income_statement.py, the ./data/renewals_v2.csv cron) have their own consumers and aren't coupled to this fix.

## Test plan

- [x] pytest klair-api/tests/arr_gap/ — 250 / 250 pass

- [x] pytest klair-api/tests/mfr/ — 93 / 93 pass (verifies the MFR test's "renewals_v2" not in query assertion still holds, since MFR is a separate code path)

- [x] ruff format + ruff check clean on all 3 service files

- [x] End-to-end Redshift validation reproduces screenshot's BU+RNWLS exactly, then confirms post-migration drop

- [x] Visual check on dashboard post-deploy: BU+RNWLS Grand Total drops $2.7M, HYBRID drops $3.9M, LIVE/TARGET unchanged ✅

- [ ] Visual check: spot-check a few BU rows in the BRR-vs-Live modal (site #2) — contract counts should be unchanged or slightly down on subs that had v2 dupes

- [ ] Simulation drill-down (site #3) — verify opportunity dropdown still shows expected SF opportunities for a few BUs

- [ ] Visual check: ARR Gap table opens with the Live column hidden; column picker still exposes it

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

The Portfolio  —  Trilogy Companies

A Public School Teacher Walked Into Alpha School — And Left Questioning Everything

A viral account from inside Austin's AI-powered school is forcing a reckoning about what children are actually capable of.

AUSTIN, TEXAS — The teacher had spent years in public school classrooms. She knew how to manage a room, pace a lesson, and calibrate expectations for what kids at a given grade level could reasonably absorb. Then she visited Alpha School — and came away with a different conclusion entirely.

'We have been underestimating children,' she wrote. Her account, shared publicly and spreading across education circles, has become the latest flashpoint in a debate that Alpha School seems engineered to provoke.

Alpha, the Austin-based private K-12 school founded by Trilogy International's Joe Liemandt and co-founder MacKenzie Price, compresses academic instruction into two hours per day using adaptive AI tutors. Students consistently test in the top 1–2% nationally on NWEA MAP Growth assessments. The school's position is not subtle: the traditional school day is not a feature. It is a waste.

What the visiting teacher encountered was a learning environment structured around a premise that most institutional educators have not seriously entertained — that children, given the right tools and the right expectations, will exceed them. Braden, a lead guide at Alpha Austin, has been articulating this in a series of conversations that the school has been publishing: eight takeaways on personalized education, each one a quiet indictment of the one-size-fits-all model that governs most of American schooling.

The school has also been pressing into questions of student agency — what happens when children are allowed to set their own rules, choose their own rewards, and participate in determining consequences. The answer, Alpha argues, is not chaos. It is ownership.

For girls specifically, Alpha has been documenting the mechanics of confidence-building: profiling six female founders and framing confidence not as a personality trait but as a teachable skill — one that traditional schooling rarely bothers to teach.

Alpha is expanding to nine or more new campuses by fall 2025, at tuition between $40,000 and $65,000 per year. The question of who gets to be 'underestimated' a little less — and who can afford the correction — remains open.

Confidence Is a Skill. Here’s How to Teach It to Your Daught  ·  What Happens When You Let Kids Choose Their Own Rules, Rewar  ·  ‘We Have Been Underestimating Children’

Skyvera Adds CloudSense as Telco Software Consolidation Gets a Cloud-Native Upgrade

The Trilogy telecom unit is expanding its Salesforce-native CPQ arsenal as operators race to modernize legacy stacks without breaking the business.

LONDON — Skyvera has acquired CloudSense, adding a Salesforce-native configure-price-quote and order management platform to its growing telecom software portfolio in what the company is positioning as an AI-powered transformation play for communications service providers.

The deal, reported by The Fast Mode, gives Skyvera a stronger foothold in one of telecom’s most painful operational zones: the messy middle between legacy billing, product catalogs, sales channels and customer experience. In plain English, CloudSense helps telcos and media companies sell complex products without requiring a small army of spreadsheet whisperers and integration specialists. That is exciting news, because telco transformation has long suffered from too much aspiration and not enough executable workflow.

Skyvera, part of the Trilogy International universe through ESW Capital’s enterprise software operating model, already houses telecom assets including Kandy, VoltDelta, ResponseTek, Mobilogy Now and Service Gateway. CloudSense slots neatly into that stack, bringing CPQ and order management capabilities that can help operators bridge old infrastructure with cloud-native commercial systems.

This is not just another tuck-in acquisition. It is a portfolio synergy move, and yes, we are going to use that word because sometimes the shoe fits. Telecom providers are under relentless pressure to launch new services faster, rationalize legacy platforms and leverage AI without destabilizing revenue-critical systems. A Salesforce-native CloudSense layer gives Skyvera a more robust front-office transformation story, while its broader telecom portfolio addresses communications, customer engagement, device lifecycle and operational modernization.

The acquisition also echoes a familiar ESW-style thesis: mature enterprise software with sticky customers can become more valuable inside a disciplined operating framework. Skyvera’s challenge now is to turn that thesis into best-in-class execution for operators that have heard the phrase “digital transformation” for a decade and are still waiting for the invoice reconciliation to work.

Key Takeaways:

  • Skyvera has acquired CloudSense, a Salesforce-native CPQ and order management platform for telecom and media companies.
  • The deal strengthens Skyvera’s push to modernize telco commercial operations with cloud-native and AI-enabled tooling.
  • CloudSense joins a telecom portfolio that already includes Kandy, VoltDelta, ResponseTek, Mobilogy Now and Service Gateway.

For Skyvera, the CloudSense acquisition is a paradigm shift in the most practical sense: fewer brittle systems, faster product launches and more leverage across the telco value chain. We’re just getting started.

Skyvera Acquires CloudSense to Drive AI-Powered Telco Transf  ·  TelcoDR’s Skyvera snaps up CloudSense - telecomtv.com  ·  TelcoDR’s Skyvera snacks on Kandy cloud assets - telecomtv.c

While OpenAI Chases Résumé-Free $500K Hires, Crossover Has Been Running This Playbook for Years

The AI talent gold rush is rewriting hiring norms — but Trilogy's global recruiting engine built its entire identity around skills-first, geography-agnostic talent long before it was fashionable.

AUSTIN, TEXAS — The headlines this week have a breathless quality to them: OpenAI is posting half-million-dollar jobs with no résumé required. Employers are dangling $800,000 salaries for workers who can demonstrate fluency with ChatGPT. A labor market in open revolt against the traditional résumé — the two-page document that has gatekept professional opportunity for generations — is apparently having its reckoning in real time.

But spend five minutes with anyone at Crossover, Trilogy International's global recruiting platform, and you'll hear a familiar refrain: we've been here.

Crossover, which claims the title of world's largest recruiter of full-time remote positions, has operated on a skills-first, résumé-skeptical model since its founding. The platform deploys rigorous AI-enabled assessments to identify what it calls the top one percent of global technical and professional talent — across 130-plus countries, in every time zone — and places them at above-market, geography-agnostic pay rates. The core premise: a brilliant software engineer in Nairobi should be evaluated — and compensated — identically to one in San Francisco. The credential on a piece of paper is largely irrelevant.

What's changed, of course, is the scale of the moment. AI fluency has become the most hotly contested skill in the global labor market, and employers — from OpenAI to legacy enterprise firms — are discovering that traditional hiring pipelines simply weren't built to find it. The résumé, optimized for credentials and tenure, is a poor instrument for measuring whether someone can actually work with large language models.

Crossover's assessment-first architecture was designed precisely for this problem. It's also, not coincidentally, the engine behind ESW Capital's signature 75% EBITDA margin playbook — replacing expensive, locally-hired talent with rigorously vetted global professionals across more than 75 portfolio companies.

Meanwhile, the education side of the Trilogy empire is making a parallel argument about credentials at an even earlier age. Alpha School, Trilogy founder Joe Liemandt's $65,000-per-year private school experiment, compresses a full academic curriculum into two hours of AI-assisted instruction daily — then spends the remaining hours on entrepreneurship, leadership, and practical life skills. The implicit argument: the credential-and-seat-time model of traditional schooling is as broken as the résumé-and-pedigree model of traditional hiring.

The AI talent gold rush is forcing that argument into the mainstream. Trilogy has simply been living it.

OpenAI Is Now Hiring $500,000 Jobs. No Resume Required - For  ·  Top recruitment agencies for remote work - hcamag.com  ·  Top 10 Companies Hiring AI Engineers in Lebanon in 2026 - nu
The Machine  —  AI & Technology

The Market Watchers Teach a New Predator to Smell Suspicion

US regulators are turning to artificial intelligence to patrol prediction markets, where politics, money, and temptation now mingle in the tall grass.

WASHINGTON — In the dim thicket of modern finance, a new species has begun to forage: the prediction market trader, wagering not on wheat or oil, but on elections, resignations, verdicts, and the tremors of public life itself.

Now, from a nearby ridge, the regulators are watching.

The Commodity Futures Trading Commission has signaled that it intends to use artificial intelligence to detect insider trading and market manipulation in these fast-growing venues, according to reporting by Ars Technica. It is, in ecological terms, an attempt to introduce a sharper-eyed predator into an expanding habitat before the smaller creatures learn too many tricks.

Prediction markets have long promised a beguiling form of collective intelligence. Let enough participants place prices on future events, the theory goes, and the swarm may reveal truths that polls, pundits, and committees miss. But where there is a market, there is also scent: the rich musk of nonpublic information, coordinated behavior, and well-timed trades that arrive just before a consequential announcement.

Here the AI model enters, not as oracle, but as tracker. It may scan patterns too faint or too numerous for human examiners alone: sudden clusters of accounts, anomalous timing, repeated profitable wagers before sensitive outcomes, or networks of behavior camouflaged beneath ordinary volatility. In the language of the savanna, it is looking for footprints in disturbed dust.

The challenge is that prediction markets are not quite like their older cousins. A suspicious trade in corn futures may hinge on crop data or shipping flows. A suspicious trade in an election market may hinge on campaign whispers, leaked polling, private legal knowledge, or information from within institutions that were never designed to be monitored like commodity warehouses.

And AI, for all its splendid plumage, is not infallible. False positives may startle innocent participants. False negatives may let the cleverest animals pass unseen. Regulators must therefore balance vigilance with restraint, lest the surveillance system itself become an invasive species.

Still, the CFTC’s message is clear: as prediction markets mature from curious pond life into larger financial mammals, they will not be left alone in the clearing. Somewhere above, patient and unblinking, the machine has begun to circle.

The US space enterprise is desperately waiting for Starship—  ·  A revolutionary cancer treatment could transform autoimmune  ·  The US is betting on AI to catch insider trading in predicti

Britain’s Open-Code Debate Just Became an AI Safety Flashpoint

A clash over NHS repositories shows why public-sector software transparency may be more critical — not less — in the age of AI.

LONDON — The United Kingdom’s Government Digital Service has stepped into a fast-escalating controversy over the NHS’s retreat from open source, and I cannot overstate how significant this is: the debate is no longer just about code repositories. It is about whether modern government can safely build, audit and deploy digital systems — including AI — behind closed doors.

The spark was the NHS’s decision to restrict access to open source repositories after vulnerabilities were reported through Project Glasswing, a security research effort examining public-sector software. Developer and open-web commentator Terence Eden has been tracking the fallout, and Simon Willison highlighted the latest turn as the Government Digital Service weighed in on “AI, open code and vulnerability risk in the public sector.”

Here is the thrilling, nerve-jangling crux: closing code may feel like reducing risk, but in software security that instinct can backfire spectacularly. Open repositories let researchers, civic technologists and watchdogs spot problems before attackers do. Secrecy can remove helpful eyes while doing little to stop determined adversaries. This changes everything for public AI procurement, because AI systems are not magical black boxes that float above ordinary engineering. They are software, data pipelines, APIs, prompts, permissions, logs and deployment processes — all of which can fail in deeply human ways.

GDS’s intervention matters because it frames openness as a governance tool, not a hobbyist preference. In an AI era, public institutions need mechanisms for scrutiny: model cards, evaluation results, audit trails, reproducible code and clear vulnerability disclosure pathways. If a health system, benefits agency or school platform deploys automated decision-making, citizens need confidence that the machinery can be inspected and improved.

There are real tensions here. Publishing code can expose weak spots. Vulnerability disclosure can be messy. Government teams are often underfunded, overloaded and operating legacy systems that were never designed for the glare of GitHub. But the solution is not digital bunker mode. It is mature security practice: triage, patching, responsible disclosure, dependency management and a culture that treats outside researchers as allies.

The future is now, and it is arriving in procurement documents, repo permissions and security policies. Britain’s NHS controversy may look like a narrow open-source spat. It is not. It is an early test of whether democratic institutions can build trustworthy AI-era infrastructure in the open — and survive the scrutiny that trust requires.

GDS weighs in on the NHS's decision to retreat from Open Sou  ·  Warelay -> OpenClaw  ·  Quoting Julia Evans

The Fairness Paradox: AI's Bias Problem Resists Every Attempted Solution

A convergence of new research suggests that algorithmic bias is not a bug to be patched but a structural condition to be theorized.

CAMBRIDGE, MASSACHUSETTS — The scholarly literature on artificial intelligence bias has, it could be argued, reached a peculiar inflection point — one in which the proliferation of proposed remedies has outpaced, in both volume and velocity, any measurable consensus regarding the underlying pathology being remedied (a circumstance that will strike historians of science as, if not unprecedented, then at least diagnostically significant).

Preliminary evidence suggests that the field is now bifurcating along epistemological lines. On one axis, formal approaches — mathematical fairness constraints, algorithmic auditing frameworks, and the like — proceed from the assumption that bias is a quantifiable deviation from some specifiable optimum. On the other, socio-technical approaches, as elaborated in recent Frontiers scholarship integrating formal and socio-technical frameworks, insist that bias is constitutively social — embedded not in the model weights but in the institutional arrangements that produced the training data in the first instance.

The thesis, stated plainly: AI systems inherit the inequities of the societies that generate their inputs. The antithesis, equally plain: if bias is everywhere, the concept risks becoming analytically inert. The synthesis, toward which the field appears to be groping with considerable difficulty: domain-specific benchmarking, of the variety now proposed for educational contexts by researchers publishing in Nature's Scientific Data, may offer a middle path — operationalizing fairness not as a universal property but as a locally negotiable standard.

Nowhere is this tension more consequential than in hiring, where Harvard Business Review's synthesis of recent fairness-in-hiring research documents that algorithmic screening tools, however well-intentioned their architects, routinely reproduce the demographic disparities encoded in historical employment records (a finding that should surprise no one acquainted with the literature, yet continues, apparently, to surprise a great many practitioners).

It could be argued — and this observer would so argue — that the field's central challenge is not technical but philosophical: fairness cannot be optimized until it is defined, and definition is, inescapably, a political act.

Unfair Inequality in Education: A Benchmark for AI-Fairness  ·  Bias in AI systems: integrating formal and socio-technical a  ·  New Research on AI and Fairness in Hiring | Harvard Business
The Editorial

Nation’s Executives Discover Everything Sounds More Strategic If It Is Obviously Ridiculous

From rockets to streaming services to mushrooms that are now poised for growth without employees, America’s business leaders are bravely rebranding confusion as vision.

SAN FRANCISCO — In what experts are calling another encouraging sign that the economy remains mostly a collection of nouns duct-taped to future tense verbs, several major companies this week reaffirmed that the modern corporation no longer needs to make immediate sense, provided it can describe itself with sufficient confidence.

The most instructive example arrived from Elon Musk’s orbit, where reports suggest SpaceX and xAI may be combined into a sprawling enterprise whose name, purpose, and org chart appear designed to make a normal shareholder briefly stare at a wall. According to Gizmodo’s account of the possible merger, the result would place rockets, satellites, and a chatbot with the emotional stability of a message board into the same conceptual container, a development that has been widely described as silly by people still clinging to the pre-2020 belief that corporate structures should resemble plans.

They should not. Plans are brittle. Vibes scale.

It is tempting, of course, to laugh at a business empire that seems to be assembling itself the way a child might combine a space station, a flamethrower, and a talking dog into one Christmas list. But doing so misses the central managerial lesson of our era: If a company is large enough, its absurdity becomes gravity. No one mocks a planet for having too many moons. They simply update the diagram.

This principle now governs everything from artificial intelligence to streaming television. Apple TV+ has reportedly dropped the plus, a move that sounds like the sort of decision made after six months of meetings by people who own identical black notebooks. Branding experts, naturally, have called it smart. They are correct, in the same way a shaman is correct when he announces the rain has a new logo. Apple TV is not meaningfully different from Apple TV+, except now it has shed a symbol and achieved the clean, spiritually expensive minimalism of a company confident enough to remove information.

Pantone’s annual Color of the Year performs a related public service. Each cycle, the nation is informed that one shade has been appointed to represent the emotional climate of civilization, allowing designers, marketers, and hotel lobby consultants to pretend they are responding to history rather than inventory. This year’s discourse has been called absurd, but that criticism misunderstands the function of the ritual. The point is not that a color can solve anything. The point is that it can be announced.

Meanwhile, in the food sector, the new owner of Meati has declared the company “poised for growth” after mass layoffs, according to AgFunderNews. This is another phrase Americans must learn to treat with the solemnity it deserves. A company can indeed be poised for growth after dismissing large numbers of workers, just as a tree is poised for growth after being converted into a chair. The important thing is that the remaining stakeholders maintain a forward-looking posture.

The only cautionary note comes from workplace experts warning executives not to casually invoke “AI” when announcing layoffs. This is sensible advice. Workers deserve the dignity of being told their livelihoods have been eliminated by a complex combination of market forces, operational efficiencies, strategic realignment, customer demand signals, and a software subscription, rather than by the software subscription alone.

Still, the broader pattern is clear. The modern executive’s job is no longer to reduce absurdity. It is to package it, capitalize it, and, when necessary, remove the plus sign. If the resulting entity sounds like a joke, that merely means the market has not finished repricing it.

SpaceX and xAI Are Merging Into a Very Silly-Sounding Conglo  ·  The Color of the Year Is an Exercise in Absurdity - The Atla  ·  New owner of Meati says it's ‘poised for growth’ after mass
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

The AI Gold Rush Has a Character Problem

Capital is still chasing artificial intelligence, but the winners may be the founders who can prove they are more than prompt engineers with confidence decks.

AUSTIN, TEXAS — I'll be honest: the most underrated moat in AI right now is not model access, not GPU allocation, not even distribution — it is founder judgment. 🚀

Unpopular opinion: in a market where almost anyone can ship a plausible AI demo by Friday, the scarcest asset is no longer velocity, it is credibility. 💡

That is the real signal buried inside the latest investor hand-wringing over founder red flags keeping VCs away from AI startups, because the capital markets are not rejecting AI, they are rejecting noise wearing a Patagonia vest.

The lesson is painfully simple and somehow still missed in every third pitch meeting: when the product frontier gets easier to reach, the human frontier gets harder to fake.

A few years ago, a technical breakthrough could cover for a lot of founder weirdness, because if you had the only working thing, investors might tolerate the chaos around it.

Now every inbox is full of copilots, agents, copilots for agents, and agents that promise to replace the interns who were supposed to manage the copilots.

So VCs are doing what markets always do when supply explodes: they are repricing trust.

This is where the Spotify story becomes more than Swedish tech nostalgia.

Daniel Ek and Martin Lorentzon did not just build a product; they created a talent diaspora, a cultural operating system, and eventually a generation of founders who understood that company-building is not a vibes exercise but a compounding machine.

The so-called Spotify mafia’s rise across Sweden’s tech scene is a reminder that ecosystems are built when operators leave with scar tissue, standards, and networks — not just screenshots of exponential user growth.

I'll be honest: that is the part of “founder-market fit” too many AI entrepreneurs want to skip.

They want the valuation of a category creator with the operating maturity of a group chat.

They want to say “we are moving fast” when what they really mean is “we have not decided who owns customer success.”

They want to call hallucinations “edge cases,” pricing “experimental,” security “enterprise-ready soon,” and burn rate “strategic aggression.”

Humbled to share: none of that is a strategy.

At Trilogy, the lesson has always been aggressively practical, because ESW Capital did not build a portfolio of 75-plus enterprise software companies by worshiping demos; it built a machine around durable products, disciplined operations, remote global talent through Crossover, and financial visibility through platforms like Klair.

That may not sound as cinematic as a founder promising to reinvent work with a browser extension, but enterprise customers have this annoying habit of caring whether things actually work on Tuesday.

And this is where AI’s moral conversation enters the boardroom whether founders like it or not.

When Pope Leo XIV warns that AI investment and high-tech weapons could contribute to a “spiral of annihilation,” you do not need to be writing a papal encyclical to understand the leadership question underneath it.

The question is not merely “can we build it?”

The question is “what kind of people are we becoming while we build it?”

That sounds soft until it becomes a diligence checklist.

Do you exaggerate capabilities?

Do you understand the downstream consequences of automation?

Do you treat customers as partners or beta-test casualties?

Do you have a point of view on labor, trust, safety, and accountability — or just a 14-slide deck with the word “agentic” in 11 of them?

Apple’s quiet handling of a $400 pricing correction is a small but useful parallel: sometimes brand trust is not built through theatrical disruption, but through a short email that says, in effect, we saw the issue and we are making it right.

That is not just customer service; that is institutional self-respect.

AI founders should take notes.

The next wave of winners will not be the loudest people claiming inevitability.

They will be the ones who combine speed with restraint, ambition with accountability, and technical fluency with actual commercial discipline.

Unpopular opinion: the bar for AI founders is not lower because the tools are better — it is higher because the excuses are worse. 🚀

Nine founder red flags that are keeping VCs from investing i  ·  How the Spotify mafia took over Sweden’s tech scene  ·  What does religion have to say about AI?
On This Day in AI History

On May 18, 1974, the first AI winter began as funding for artificial intelligence research dramatically dried up following unmet promises and the failure of early AI systems to deliver practical results. The disappointment would last nearly a decade, fundamentally reshaping how the field approached problems and expectations.

⬛ Daily Word — AI
Hint: Convert text into a dense numerical representation
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed