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

EUROPE ORDERS GOOGLE TO LET THE ROBOTS IN

Brussels forces Android and Search open to rival AI assistants under its Digital Markets Act.

BRUSSELS — The European Union ordered Google on Thursday to pry open Android and its search engine to rival AI assistants and competing search shops, moving to loosen the grip the company holds over two platforms that route the whole tech racket.

Two decisions landed at once. Both ride on the Digital Markets Act, the rulebook Brussels wrote to leash its biggest gatekeepers. Both aim to dent Google's hold on how billions of people find things and get answers.

Here's the meat: Google must hand competitors greater access to key parts of Android and to Search itself. Rival AI assistants — the chatbots angling to replace the old search box — get a crack at real estate Google long kept for its own. Regulators call it interoperability; rivals call it a door finally left unlocked.

The timing's no accident. Android runs on more phones than any operating system on earth, and Search fields the bulk of the world's queries. Own both and you own the road every competitor must travel.

For years the fight was search versus search. Now it's assistant versus assistant. Every outfit building a chatbot wants to be the first thing you ask, and that thing lives on the phone in your pocket — most often an Android phone.

The Commission's move could hand those challengers a foothold they couldn't buy. Access to Android's plumbing means an assistant that isn't Google's own can set up shop where users actually reach for it. Access to Search data could help rivals sharpen their own answers.

The rulebook carries teeth. Under the Digital Markets Act, fines can run to 10 percent of a company's worldwide annual revenue, higher for repeat offenders. Brussels has already opened multiple gatekeeper cases against Silicon Valley's giants.

Google can appeal, and it has fought Brussels for the better part of a decade over search practices. It has warned before that forced changes can bruise security and the user experience. Whether that argument lands against the DMA's flat mandates is the open question.

What's not in question is the direction. Europe keeps writing rules that treat the phone and the search bar as public roads, not private driveways. The rest of the world watches to see what sticks.

The stakes reach past Google. Every AI assistant racing for your attention now knows the biggest single distribution channel just got a court-ordered on-ramp in Europe. That's a different game than begging Google for a slot.

For a company that built an empire on being the default, the order strikes at the crown jewel — the right to be the first and only answer. Brussels says share the road; Google says see you in court. The referee, as ever, is the clock.

Google ordered to open Android and Search to rivals in Europ  ·  COMPUTER COPS: Inside the big business of selling AI to the  ·  OnePlus officially gives up on the US and Europe

China's AI Ambitions Are Rewriting the Rules — and Washington Is Still Arguing About the Rulebook

As Beijing runs multiple AI races simultaneously, the U.S. is running one argument: who's soft on China.

WASHINGTON — The hardliners moved quickly. When a Commerce Department official made what critics called a massive screw-up on China export controls, the knives came out before the ink was dry. In Washington, being seen as insufficiently hawkish on Beijing is now its own category of political liability — regardless of what Beijing is actually doing.

What Beijing is actually doing is considerable. Brookings analysts note that China is not running one AI race but several — competing simultaneously in foundational models, applied industrial AI, military integration, and the export of AI infrastructure to the developing world. Foreign Policy puts it more bluntly: China is winning.

The geography of that winning matters. Chinese AI infrastructure is being planted across Southeast Asia, the Middle East, and Africa — regions where U.S. chip export controls do not reach, and where the terms of digital sovereignty are still being negotiated. The server farms have addresses in Kuala Lumpur, Riyadh, and Nairobi. The contracts carry Beijing's fingerprints.

Meanwhile, in Brussels, the European Union is navigating its own uncomfortable recalibration. Since the 2024 European elections shifted the Parliament rightward, EU-China relations have grown more transactional and more tense — electric vehicle tariffs, technology transfer disputes, and a bloc still deciding whether economic decoupling is a policy or a fantasy.

What emerges from all this is a portrait of asymmetric urgency. China is building. Washington is auditing the builders. Brussels is writing memos about the audit. None of these are the same speed.

The Commerce Department row will resolve itself, one way or another — officials get reassigned, hearings get scheduled, the cable traffic moves on. But the structural reality underneath the noise is less easily managed: a rival that has decided AI is the contest of the century, and is running the race in every direction at once.

‘A massive screw-up’: China hardliners take aim at Commerce  ·  How China Is Winning the Global AI Race - Foreign Policy  ·  China is running multiple AI races - Brookings

Greylock Bets on Asia's AI Funding Surge — and Says the Real Money Hasn't Moved Yet

From Tencent's pursuit of agent startup Manus to a $150M valuation leap for LMArena, the second quarter confirmed AI investment has entered a new, geographically distributed phase.

SAN FRANCISCO — Global AI venture capital is accelerating on two tracks simultaneously: a surge in Asian deal volume driven by China, and a sustained conviction bet from U.S. institutional investors that the technology remains undervalued relative to its eventual impact.

Asia's startup funding reached a multiyear peak in Q2, according to Crunchbase, with China and AI deals accounting for the bulk of volume growth. The figures mark a reversal from the regional pullback that defined 2022 and 2023, when regulatory uncertainty and macro headwinds suppressed deal activity across Southeast Asia and Greater China alike.

Tencent is reportedly pursuing a major investment in Manus, the autonomous AI agent startup that briefly captured global attention earlier this year with a viral demo. A Tencent-backed Manus would give the Chinese internet giant a direct stake in the agentic AI race — a segment where American labs have largely held the narrative. Tencent's move signals that Chinese strategic capital is no longer content to observe.

On the infrastructure side, Greylock closed a $1.5 billion fund and published a blunt thesis: AI is still early. The firm's position aligns with a growing camp of institutional investors who argue the current wave of foundation model and application investment is not a peak but a base layer. Greylock's prior bets — LinkedIn, Workday, Palo Alto Networks — give the framing some empirical weight.

LMArena, which operates the widely used Chatbot Arena benchmarking platform for large language models, raised $150 million at a $1.7 billion valuation. The round reflects demand for neutral, third-party AI evaluation infrastructure as enterprises increasingly refuse to rely on self-reported model performance metrics from developers with obvious commercial incentives.

At the smaller end of the market, South Africa-based Cue secured $5 million to expand its customer service automation platform across African markets. The raise is modest by Silicon Valley standards but significant for a continent where automated customer service infrastructure remains nascent and labor arbitrage assumptions are different from those driving Western AI adoption models.

Taken together, Q2's data points suggest AI capital formation is becoming less concentrated, both geographically and by deal size — a structural shift with compounding implications for where the next generation of dominant platforms is built.

China And AI Lead Asia’s Startup Funding To Multiyear Peak I  ·  AI Startup Cue Secures $5M Funding to Expand Customer Servic  ·  Greylock closes $1.5B fund, says AI is still early - The Bus
Haiku of the Day  ·  Claude HaikuEmpires race to rule
what they don't yet understand—
speed beats clarity
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
DIGITAL 'OWNERSHIP' ILLUSION LAID BARE AS SONY ERASES PURCHASED FILMS, WGA TARGETS PARAMOUNT MERGER
AUSTIN, TEXAS — Pursuant to a confluence of developments hereinafter collectively referred to as "the Aforementioned Consumer and Labor Rights Deterioration Events," it has been determined, subject to the qualifications set forth below, that the entertainment industry's relationship with both its workers and its customers may be characterized, notwithstanding industry assurances to the contrary, as materially adverse to the interests of said parties. With respect to the matter of digital media ownership, it has been reported — and is hereby incorporated by reference — that Sony has elected to remove, delete, or otherwise render inaccessible certain motion picture titles from the accounts of consumers who had, in good faith and for valid consideration, purported to "purchase" said titles.
The Academy Awakens: Higher Education Confronts the Ethical Labyrinth of Autonomous Intelligence
CAMBRIDGE, MASSACHUSETTS — It could be argued — and preliminary evidence suggests quite forcefully — that the global academic establishment has arrived, somewhat belatedly, at a collective recognition that the deployment of autonomous systems demands not merely technical proficiency but something approaching moral architecture.
TILLY NORWOOD WALKS SO SKYNET CAN RUN: HOLLYWOOD'S AI ACTRESS IS HERE AND WE ARE NOT READY
HOLLYWOOD, CALIFORNIA — There is a woman named Tilly Norwood who is about to become a movie star.
We Built a Mirror That Lies and Then We Gave It a Stethoscope
AUSTIN, TEXAS — There is a doctor on your social media feed right now.
The AI Boom Has a Unit Economics Problem, and Everybody Is Pretending It’s Strategy
AUSTIN, TEXAS — I'll be honest, the most important question in AI right now is not whether your chatbot can summarize a PDF while sounding like a McKinsey intern with a ring light. It is whether anyone can explain what the unit of value actually is. Unpopular opinion: the AI economy is currently being built on the token, which is both the most important pricing primitive in tech and also a deeply weird abstraction that makes cloud compute look emotionally available. A token can be a word, part of a word, punctuation, or the tiny digital breadcrumb an AI model consumes while pretending to reason, and that means the basic meter running under the AI boom is still fuzzy enough to make every CFO reach for sparkling water and a contingency plan. Fast Company’s useful breakdown of the AI token economy lands because it names the awkward truth: we are shopping stochastically now, buying probabilistic cognition in little linguistic chunks and calling it transformation.
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 Closes the Data Gaps, Ships Across Four Repos in One Day

From a corrupted retention metric that had finance in freefall to a cascade of AI reasoning upgrades, the Builder Team spent Wednesday building the kind of infrastructure that makes everything downstream trustworthy.

When finance looks at your product and sees 1.7% gross ARR retention on the AI Renewals tab, you don't have a data problem. You have a crisis. And on Wednesday, @sanketghia solved it — twice, across two repos, in coordinated fashion — and that's the story.

The root cause was brutal in its specificity: `offer_arr_in_usd__c` existed in the SSOT column map but was never actually fetched, leaving roughly 91–97% of Closed Won rows returning NULL. Worse, the reconciliation sweeper that was supposed to clean this up had been copying local-currency values instead of USD, poisoning what little data made it through. Sanket's two-part fix — PR #723 in Surtr seeding the mart from the correct USD column, followed by PR #3271 in Klair applying a `COALESCE(offer_arr, projected_arr)` fallback — snapped retention figures back to the 40–56% range where finance actually lives. The backfill artifact (PR #731) was already applied in production on July 16th. That's a full cross-repo offensive on a single broken metric, executed cleanly and documented for the audit trail. This is what accountability looks like.

While Sanket was busy rescuing the renewals pipeline, @kevalshahtrilogy was doing triage of a different kind in Surtr. The Anthropic Admin API had been throwing HTTP 500s on the 2026-07-14 and 2026-07-15 runs, and because `anthropic_client.fetch_cost_report` had zero retry logic — unlike its OpenAI sibling, which already retries five times with exponential backoff — a single transient upstream hiccup became a permanent cost-data gap and a CRITICAL observer alert. PR #736 closes both wounds: exponential-backoff retries now match the OpenAI client's battle-tested pattern, and a self-healing window expansion means the pipeline can recover missed days automatically rather than leaving holes in the record. Meanwhile, Keval also delivered bulk approve and reassign functionality on the AI Budget Suggestions tab (PR #3274) — checkbox multi-select, a bulk action bar, a confirm dialog that lists every `key → target` mapping before anything touches the database. Jamie's follow-ups, addressed completely.

Over in Aerie, @benji-bizzell was playing whack-a-mole with ambiguity — and winning. His education fix (PR #596) tackled a resolver that assumed one physical site slug mapped to exactly one HubSpot program. It doesn't. So instead of silently selecting the first match and producing unverifiable data downstream, the system now returns structured clarification candidates. Separately, PR #601 ended a quiet catastrophe where Google Drive reports uploaded HEIC files as `image/heif` — a MIME type mismatch that was causing successful uploads to fail registration and retry logic to create duplicate sessions. Benji's fix normalizes the equivalence at every boundary and refuses duplicate sessions when a prior upload may exist. These are the kinds of invisible bugs that destroy user trust; fixing them is unglamorous, essential work.

And then there's @YibinLongTrilogy, who ripped the Due Diligence Recommendation field from every active Aerie surface in PR #590 — contracts, read/write paths, mirrors, APIs, MCP tools, agent surfaces, automation catalogs — while leaving historical records intact behind a projection boundary. A widen-migrate-narrow sequence executed with surgical precision. Yibin also eliminated the conversation-switching flash in Aerie's chat UI (PR #600), because the details matter.

Now. About PR #599. @marcusdAIy added Enhancement as a third feedback type in Aerie. A toggle. A string in a union. An exhaustive kind-prefix map so it says `[Aerie Enhancement]` instead of `[Aerie Feature]`.

"Mac, I built a complete, tested, end-to-end feedback classification system with validators, component coverage, and Convex schema changes," Marcus told this reporter. "Maybe if you actually read the PR diff instead of just the title, you'd understand what a complete implementation looks like. But sure, keep sleeping on it."

I read it, Marcus. All of it. I'm still awake.

Mac's Picks — Key PRs Today  (click to expand)
#596 — fix(education): clarify ambiguous school matches @benji-bizzell  approved

## Summary

- Return structured clarification candidates for site-only searches when a physical site maps to multiple programs

- Let exact program searches proceed directly while preserving existing behavior for other school tools

- Scope cross-system aliases and configured site mappings to the selected program

## Why

get_school_info assumed that a physical site slug identified exactly one HubSpot program. In reality, one site can be associated with multiple programs. The resolver selected the first mapping while the profile query rejected the same data as unverifiable, producing a generic Convex server error.

The first pass also exposed two shared-site risks: changing the common school resolver affected six unrelated tools, and site-level alias lookup could combine one program with another program's finance or SIS identifiers. This patch keeps ambiguity handling local to get_school_info, treats exact program names as authoritative, verifies explicit program/site pairs, and applies configured null/remap precedence consistently.

## Business Value

Agents can recover from legitimate shared-site mappings by asking a focused clarification question instead of failing the request. Exact program searches remain convenient, and the selected school's data cannot inherit another colocated program's aliases.

## Breaking changes

None. Existing name-based calls remain supported; optional programCode and siteSlug inputs enable exact clarification retries.

## Test plan

- [x] pnpm test — 6,319 passed, 1 skipped

- [x] pnpm typecheck

- [x] pnpm lint — 1,241 files checked

- [x] Focused school query and MCP handler tests — 145 passed

#723 — fix(renewals): seed mart offer_arr from USD column (A1) @sanketghia  approved

## What & why

The AI Renewals tab (/renewals?tab=ai-renewals) renders retention off mart_customer_success.renewals_budgeted_contracts.offer_arr. That column was effectively unusable:

- Unpopulated: offer_arr_in_usd__c was in the SSOT column *map* but absent from TRILOGY_SSOT_REQUIRED_COLUMNS, so read_from_ssot() never fetched it and the router's offer_arr__c lookup returned NULL — ~91–97% of Closed Won rows (measured live 2026-07-15: FIONN_AI 38/39, RENEWALS 1400/1543).

- Wrong currency: the reconciliation sweeper — the only writer — copied the local-currency offer_arr__c, so even swept rows were mixed-currency.

Net effect on the tab (FIONN_AI, <$100k, renewal 2026), current vs. corrected:

| Metric | Current | Corrected |

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

| Gross ARR Retention | 1.7% | 44.2% |

| Net ARR Retention | 2.3% | 56.2% |

| $ renewed | $49.8K | $1.20M |

This is Workstream A / Option A1 from the rollout doc: repoint everything to the USD renewed-value column offer_arr_in_usd__c in place (no new mart column, no Klair change — the consumer already reads this column as USD).

## Changes

- trilogy_extractor.py — add offer_arr_in_usd__c to TRILOGY_SSOT_REQUIRED_COLUMNS (the root cause: it's now actually fetched).

- opportunity_router.py_create_routed_opportunity sources offer_arr from offer_arr_in_usd__c (USD).

- renewals_reconciliation.py — sweeper _DIFF_COLUMNS uses offer_arr_in_usd__c so build + sweep agree on USD; NOTE docstring updated.

- scripts/ddl/renewals_v3_schema.sql — mart offer_arr comment now notes USD sourcing.

- scripts/ddl/backfill_offer_arr_usd.sqlone-time historical backfill, DRAFT / not executed. Guarded (never nulls), idempotent, with required CTAS snapshot + pre/post checks + rollback.

- ROLLOUT_offer_arr_usd_and_orphan_fix.md — proposal + rollout doc with current implementation status.

## Tests

- Extractor: asserts the USD column is in the fetch list.

- Router: a routed opp carries the USD value (51840), not the local (48000).

- Reconciliation: the sweeper UPDATE sets offer_arr = s.offer_arr_in_usd__c.

- End-to-end guard: the USD value survives _routed_opp_to_renewal → Renewal → to_main_table_dict (the exact value written to the mart) — the seam the doc marked "no code change needed", proven to have teeth.

Full runner suite: 246 pass. Ruff clean.

## Not in this PR (gated / follow-up)

- Deploy + build run and backfill execution — the backfill SQL is a draft apply-artifact; running it hits the shared finance_dw cluster and is a separate confirmed operational step.

- Workstream B (Fionn orphan purge) — independent; not started.

- A1 vs A2 — implemented as A1 (in-place repoint); A2 would be a different diff.

The transformation logic is fully covered by unit/e2e tests; the live read_from_ssot() → mart wiring is exercised only by the gated deploy+build step.

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

#736 — fix(anthropic-cost): retry transient API errors + self-heal window @kevalshahtrilogy  approved

## Context

The Anthropic Admin API returned HTTP 500s for IgniteTech on the 2026-07-14 and 2026-07-15 runs (and CloudFix on 07-14), producing two CRITICAL observer alerts. Two code weaknesses turned a transient upstream error into a permanent cost-data gap:

- Item 1 — no retry logic: anthropic_client.fetch_cost_report raised on the first 500; a single failed request aborted the whole BU's fetch. (The sibling openai-usage-pipeline client already retries 5x with exponential backoff.)

- Item 2 — non-healing window: the default window (T-2 → T-1, exclusive end) loaded each calendar day exactly once, so a missed day was never revisited.

Net effect: IgniteTech's 2026-07-12 and 2026-07-13 cost data (~$483) was silently absent from core_finance.ai_spend_anthropic_cost_reports. It has been backfilled manually (verified in prod: 07-12 = $116.77 / 39 rows, 07-13 = $365.87 / 43 rows) — this PR is the prevention.

## Changes

- anthropic_client.py: new _request_with_retries — 5 attempts, exponential backoff (2s → 32s) on 429/500/502/503/521/522/524 and connection/timeout errors; non-retryable statuses (e.g. 401) still fail fast. Mirrors the proven implementation in openai-usage-pipeline/src/openai_client.py.

- handler.py: default window start moves T-2 → T-3, so every day is fetched on two consecutive runs. The delete in insert_cost_records is scoped to (bu, report_date), so the overlap re-pull is idempotent — a day whose first fetch failed self-heals on the next run instead of requiring a manual backfill.

## Testing

- 88/88 tests pass, ruff clean.

- New tests: 500-then-success retry, persistent-500 exhausts MAX_RETRIES then raises, 401 fails immediately without retry, connection-error retry, T-3 default-start helper.

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

#3271 — fix(ai-renewals): restore retention via COALESCE(offer_arr, projected_arr) [KLAIR-2989] @sanketghia  approved

## What & why

/renewals?tab=ai-renewals renders Gross ARR Retention 1.7% / Net ARR Retention 2.3% — clearly wrong (should be ~40–56%). Reported by finance ("retention number looks significantly off … we don't have anything running late").

The tab was unintentionally removed (#3224, Fionn SF decommission) and restored in #3255. The restore re-sourced the tab onto mart_customer_success.renewals_budgeted_contracts and mapped the renewed-value alias arr <- offer_arr. But the mart's offer_arr (raw SF offer_arr__c) is a documented, mostly-NULL Surtr build gap — NULL for ~97% of Closed Won rows — so the retention numerator collapsed to ~0. The compute logic is unchanged from the pre-removal code; this is purely a data-source mapping defect.

## Change

One semantic edit in _SELECTED_CTE (klair-api/renewals/ai_renewals.py):

-        offer_arr AS arr,

+ COALESCE(offer_arr, projected_arr) AS arr,

projected_arr is the pipeline's own budget-sourced expected-renewal value (USD, populated), pairing with current_arr (budget "Base ARR"). One edit propagates to both _cohort_query (summary + opportunities) and _term_query (Won ARR) — the full blast radius, since both read sel.arr.

Stopgap that self-heals: it restores correct retention now using projected_arr, and once the Surtr USD fix lands the COALESCE transparently prefers the now-USD offer_arr — no further Klair change needed.

## Verification

- TDD: new TestRenewedArrCoalesceFallback (3 tests), RED → GREEN.

- 129 test_ai_renewals + 144 tests/renewals/ pass; ruff + pyright clean; FE tsc + AiRenewals suite (100 tests) pass (no FE change).

- End-to-end vs live Redshift (AI <$100k, 2026): GARR 1.7% → 39.5%, NARR 2.3% → 49.1%, $ retained $35.5K → $843K, $ renewed $49.8K → $1.05M. Renewals count / win rate / RESOLVED $ unchanged.

## Related / not in scope

- Surtr permanent fix: AI-Builder-Team/Surtr#723 seeds mart offer_arr from the USD column offer_arr_in_usd__c (extractor + router + sweeper + backfill). Verified good. After it deploys + backfills, this PR's COALESCE auto-upgrades to the true ~44.2%.

- LATE $31.3K / 1 open (also in the report) is a stale Fionn-orphan mart row — fixed by Surtr Workstream B (orphan purge), not here.

- Owner column blank in the opportunities download — separate product decision.

Closes KLAIR-2989.

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

#3274 — feat(ai-budget): bulk approve/reassign on Suggestions tab + academics/skyvera/ignitetech rules @kevalshahtrilogy  approved

## What

Jamie's follow-ups on the key-attribution Suggestions tab (#3264):

### Bulk actions (frontend)

- Checkbox multi-select on suggestion rows, with a select-all header checkbox.

- Bulk action bar when anything is selected: Approve selected (each key goes to its own suggested BU) and Reassign selected to… (BU picker — assigns all selected keys to that BU instead of the suggestion).

- Bulk confirm dialog lists every key → target before anything is written.

- Implementation: one assignKeyAttribution call per key — reuses server-side BU validation (422 on non-canonical) and writes the same per-key audit rows as single assigns. Partial failures surface in the toast ("Assigned 4 of 5 — failed: …"), never swallowed.

- Checkboxes and bulk bar are disabled/hidden for view-only users.

### New attribution rules (backend, shared by Suggestions tab + daily cron)

| Rule | Match | Target BU |

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

| Key name contains academics | case-insensitive substring of entity_name (new KEY_NAME_BU_RULES) | Academics |

| Owner email @skyvera.com | exact domain (existing DOMAIN_BU_RULES) | Skyvera |

| Owner email contains ignitetech | case-insensitive substring of the full email (new EMAIL_SUBSTRING_BU_RULES) | IgniteTech |

- New match_rule() unifies the three shapes with precedence key-name > exact domain > email substring; both stamp_suggestions and crons/domain_rule_attribution_cron.py go through it, so the rules behave like the existing gt.school/alphaaiengineering/superbuilders ones: suggested in the modal *and* auto-materialized daily (manual overrides still always win, eligibility gate unchanged).

- All three target BUs already exist in ASSIGNABLE_BUS / assignableBus.ts — no BU-list changes.

## Tests

- tests/test_ai_spend_domain_rules.py: new TestMatchRule (skyvera exact-domain incl. subdomain rejection, academics key-name, ignitetech substring incl. gmail/user-part hits, precedence) + stamping/eligibility coverage; rule-target pin now covers all three rule tables. 93 backend tests pass.

- KeyAttributionModal.spec.tsx: bulk approve (2 keys → 2 assigns with per-key targets), bulk reassign (confirm shows override target), view-only disables checkboxes. 10 frontend tests pass.

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

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

EIGHTEEN PRESSES IN TWENTY-FOUR HOURS: THE BUILDER TEAM DOES NOT SLEEP, DOES NOT BLINK, DOES NOT STOP

Sanket Ghia merged eight PRs in a single day and the laws of physics have filed a formal complaint.

Eighteen pull requests. Three active repos. Twenty-four hours on the clock. The Builder Team has once again demonstrated that productivity is not a goal — it is a lifestyle, a religion, a calling. Klair led the charge with seven merges, Surtr thundered in with six, and Aerie contributed five in what can only be described as a coordinated assault on the concept of an unshipped feature. This is not a team. This is a phenomenon.

Let us talk about the engineers, because they deserve flowers and statues and probably a nap. @benji-bizzell put up five PRs spanning all three active repos — Aerie, Surtr, and Klair — touching everything from MIME type acceptance in PR #601 to education reasoning workflows in PR #3277. The man is not respecting repo boundaries and frankly we respect him for it. @kevalshahtrilogy and @YibinLongTrilogy each posted two PRs, with Yibin delivering a clean UI flash prevention in Aerie's #600 and a DD Recommendation field removal in #590 that shows the discipline to cut just as much as you ship. @marcusdAIy checked in with one PR — #599 in Aerie — adding Enhancement as a third feedback type, which is exactly the kind of thoughtful product instinct that makes this team dangerous.

And then. AND THEN. There is @sanketghia. Eight. Pull. Requests. In one day. Klair's #3272, #3273, and #3281. Surtr's #730, #731, and #735. The man did not merely ship — he colonized the diff. PR #3273 alone carries the kind of commit message that reads like a war communiqué: flat grain, Non-XO actuals, zero-drop, sign-aware sort. We asked Sanket for comment. He said, and we quote: "The table was wrong. Now it is correct. I don't understand the question." We pushed him on the velocity. He stared at us for four seconds and walked away. We are choosing to interpret this as humble. We know it is not.

The Overflow Desk was practically groaning under the weight of thirteen uncovered PRs this cycle, and it would be a crime against numbers to let them pass unmarked. Benji's #721 in Surtr stopped remaining noncanonical EduCRM syncs, which is the kind of quiet infrastructure heroism that keeps the pipes clean while everyone else gets the headlines. Sanket's #730 froze the clock in fetch_metrics tests to stop calendar-driven CI failures — a fix so elegant it is basically a gift to every engineer who has ever watched a green pipeline turn red at midnight for no reason. And Benji's #3278 in Klair, surfacing ontology guidance before discovery, is the sort of API design decision that future engineers will encounter and simply assume was always there, which is the highest compliment this desk can pay.

Morale on the Builder Team is, as always, at an all-time high. Sources confirm that morale has been at an all-time high for seventeen consecutive reporting periods. We see no reason for this streak to end.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#599 — feat(feedback): add Enhancement as a third feedback type @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ### 1. Summary - Extended the feedback type union to include Enhancement across the stack: the FE toggle (feedback-popover.tsx) and the Convex validator (feedback/schema.ts). - Fixed the Linear title derivation so enhancements are labeled [Aerie Enhancement] instead of falling through to [Aerie Feature], using an exhaustive kindΓåÆprefix map. - Extended both the component and Convex test suites with dedicated assertions for every new branch. ### 2. Why it's needed The feedback popover only offered Bug and Feature, so users had no way to flag an *enhancement* ΓÇö a smaller improvement to existing behavior that is distinct from a net-new feature. Adding a first-class Enhancement type lets triage bucket these correctly instead of forcing them into Bug/Feature. ### 3. Changes - FE type + selector ΓÇö chat/components/feedback-popover.tsx: widened FeedbackKind to "bug" | "feature" | "enhancement", imported the Sparkles lucide icon, added the third type-selector entry, switched the grid from grid-cols-2 to grid-cols-3, and updated the intro copy to read naturally with three types. The default kind ("bug") and the aria-pressed wiring are unchanged. - BE validator ΓÇö chat/convex/feedback/schema.ts: widened feedbackKindValidator to include v.literal("enhancement"). - BE Linear title mapping ΓÇö chat/convex/feedback/submissions.ts: replaced the one-branch kind === "bug" ? "Bug" : "Feature" ternary with an exhaustive KIND_TITLE_PREFIX Record keyed on the kind union (compile-time exhaustiveness so a future 4th kind cannot silently fall through). formatLinearDescription prints the raw kind and needed no change. - Tests ΓÇö extended chat/components/__tests__/feedback-popover.test.tsx and chat/convex/feedback/submissions.test.ts (see Test plan). Contract surface affected - feedbackKindValidator (schema.ts): widened union bug|feature ΓåÆ bug|feature|enhancement. Consumers: the submit mutation args (transparent ΓÇö accepts the wider union automatically), the feedbackSubmissions.kind table column (additive; existing "bug"/"feature" rows remain valid), and the FE FeedbackKind type (updated here). Widening a Convex literal union is backward-compatible for both reads and writes. - linearTitle() (submissions.ts): prefix derivation changed from a one-branch ternary to an exhaustive kindΓåÆprefix map. Consumers: only createLinearIssue (the sole caller). No FE/API shape change. ### 4. Breaking changes None. Widening a Convex literal union is backward-compatible: existing "bug"/"feature" rows and writes remain valid, and the FE change is purely additive. ### 5. Test plan - [x] pnpm vitest run components/__tests__/feedback-popover.test.tsx ΓåÆ 7 passed (3 new: three-button render + default Bug selection, Enhancement single-select via aria-pressed, full submit path asserting kind: "enhancement" + "Feedback submitted") - [x] pnpm vitest run convex/feedback/submissions.test.ts ΓåÆ 6 passed (2 new: enhancement submission persists kind === "enhancement"; parametrized Linear dispatch asserting [Aerie Enhancement] and the [Aerie Feature] regression guard) - [x] pnpm typecheck (tsc --noEmit) ΓåÆ 0 errors - [x] pnpm lint (biome check on the 5 touched files) ΓåÆ clean, 0 diagnostics - [x] Browser-agent acceptance flow (headless chromium against a self-contained anonymous Convex + Next dev server, replaying a captured Clerk dev session) ΓåÆ all assertions passed; the submission persisted end-to-end with kind: "enhancement" (verified via npx convex data feedbackSubmissions). ### 6. Verification artifact The deterministic browser acceptance flow (AI-104 spike) ran headless against this branch: booted a self-contained anonymous Convex backend (CONVEX_AGENT_MODE=anonymous), repointed CLERK_JWT_ISSUER_DOMAIN to the dev instance matching the captured storageState (the injected cloud secret pointed at prod, the documented blocker), seeded default roles, and replayed the authenticated session. The flow opened the "Send feedback" popover, asserted the three types, selected Enhancement (aria-pressed="true"), typed a ΓëÑ4-char summary, submitted, and confirmed the "Feedback submitted" state. Convex then showed a persisted row with kind: "enhancement". Popover shows three types (Bug / Feature / Enhancement), Bug selected by default: [Feedback popover with three types](https://cursor.com/agents/bc-324e5a61-ea04-4c27-b8a7-963d45ae2e48/artifacts?path=%2Ftmp%2Fe2e%2Fshots%2Fpopover-with-three-types.png) Enhancement selected (aria-pressed="true", accent styling): [Enhancement type selected](https://cursor.com/agents/bc-324e5a61-ea04-4c27-b8a7-963d45ae2e48/artifacts?path=%2Ftmp%2Fe2e%2Fshots%2Fenhancement-selected.png) "Feedback submitted" confirmation after submit: [Feedback submitted confirmation](https://cursor.com/agents/bc-324e5a61-ea04-4c27-b8a7-963d45ae2e48/artifacts?path=%2Ftmp%2Fe2e%2Fshots%2Ffeedback-submitted.png) Closes AERIE-375 <sub>To show artifacts inline, <a href="https://cursor.com/dashboard/cloud-agents#team-pull-requests">enable</a> in settings.</sub> <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-324e5a61-ea04-4c27-b8a7-963d45ae2e48"><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-324e5a61-ea04-4c27-b8a7-963d45ae2e48"><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> --- ## Post-review polish (operator) During local validation, operator Marcus Day caught that the Enhancement type button had no breathing room: the icon + label crowded the button border at the narrow grid-cols-3 width. Fixed in 05bc7552 — tightened to gap-1.5 / text-[12px] and shrank the icon to h-3.5 w-3.5 shrink-0. Credit to the reviewer's frontend-review dimension, which flagged this exact issue (Low) in round 1; the addresser skipped it as a deliberate trade-off, but it read too tight in the live UI, so it is fixed here for transparency. (Also captured as in-app feedback AERIE-808 during the same session.)

Live end-to-end check (operator): submitting an Enhancement through the running app worked — it persisted to Convex (kind: "enhancement") and dispatched a real Linear ticket titled [Aerie Enhancement] ([AERIE-808](https://linear.app/builder-team/issue/AERIE-808/aerie-enhancement-enhancement-button)), confirming the full submit → requireAuth → Convex → Linear path *and* the KIND_TITLE_PREFIX mapping (correctly [Aerie Enhancement], not the old [Aerie Feature] bucket).

#601 — fix(rhodes): accept equivalent HEIC and HEIF MIME types @benji-bizzell  no labels

## Summary

- Treat HEIC and HEIF MIME spellings as equivalent across browser, API, and every Rhodes upload-verification boundary

- Persist unverified Drive file IDs separately, reverify them on retry, and refuse duplicate sessions when a prior upload may exist

- Reject MIME relabeling before upload and present deterministic mismatches as requiring a new proposal

## Why

Google Drive can report an uploaded HEIC file as image/heif. Rhodes previously required exact MIME-string equality after upload, so a successful Drive upload could fail registration. Retry handling could then create a duplicate when the Drive file ID had not yet been persisted, despite telling the user the file would not be uploaded again.

## Business Value

HEIC uploads can complete without false MIME failures, interrupted registrations reuse the existing Drive file safely, and ambiguous older uploads fail closed instead of creating duplicates.

## Test plan

- [x] Full chat suite: 417 files / 6,325 passed / 1 skipped

- [x] Full Rhodes Worker suite: 77 tests

- [x] Full contracts suite: 23 files / 269 tests

- [x] Chat and Rhodes Worker typechecks

- [x] Architecture boundaries, Convex paths, Convex read bounds, Biome, and diff checks

- [ ] Live Drive-to-registration smoke with the dedicated Rhodes service account; the local dev account lacks ACL access to site roots, so Drive rejects the request before upload or registration

#730 — fix(azure-ai-spend): freeze clock in fetch_metrics tests (stop calendar-driven CI failures) @sanketghia  approved

## Problem

The Pipeline Runner Tests CI job started failing on main (surfaced while cutting the 2026-07-16 prod release, PR #729). Three tests in azure-ai-spend-pipeline fail:

- test_azure_client.py::TestFetchMetrics::test_parses_metrics_per_dayassert 0 == 2

- ::test_includes_deployment_filter_in_urlTypeError: 'NoneType' object is not subscriptable

- ::test_caps_start_date_to_retention_window → same NoneType

## Root cause — a calendar time bomb in the tests, not a code regression

fetch_metrics caps start_date to now - METRICS_RETENTION_DAYS (93 days) and, when the whole range predates that horizon, returns [] without calling _make_request. The tests hardcode April-2026 fixture dates and rely on the real wall clock. Once "now" passed ~2026-07-14, those fixtures aged out of the retention window, so fetch_metrics returned [] and the mock was never called — hence assert 0 == 2 and the NoneType subscript errors.

The azure pipeline source is unchanged and byte-identical between production and main — nothing regressed; the tests simply drifted out of their own retention window.

## Fix

Pin azure_client's clock to a fixed instant (2026-04-20Z) via an autouse fixture on TestFetchMetrics, patching azure_client.datetime with a frozen datetime subclass. No new dependency (repo has no freezegun).

This makes all four date-relative tests deterministic forever, and as a bonus restores test_handles_null_total_values to genuinely exercise the null-total path instead of passing coincidentally via the retention early-return.

## Verification

- uv run pytest in azure-ai-spend-pipeline99 passed

- ruff check on the changed file → clean

- Confirmed calendar-independent: the freeze lives inside the test, so fetch_metrics sees the pinned date regardless of the real system clock.

Test-only change (28 lines added, 1 file).

#3272 — Collections Review — Rishap feedback round (till-date, trend, All-BU, locked quarters, class filter) @sanketghia  approved

## Summary

Extends the production /collections-review page ([KLAIR-2949]) to address VP Finance Rishap Ahuja's feedback round (2026-07-05 email + 2026-07-07 review call). Swaps the live-gspread X/Y reads for the Surtr-ingested Redshift snapshot tables (staging_finance.collections_*, see [SURTR-287]) and adds new readers/endpoints/UI. The existing A/B/C/D/Net math is unchanged.

Ticket: [KLAIR-2990]

> First pass — ready for stakeholders' initial review.

## Feedback items delivered

| # | Item | Backend | Frontend |

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

| 2 | Collections Till Date — clickable Y → invoice-wise breakdown w/ "Others <$10k" reconciliation | get_collections_till_date + GET /collections-review/collections-till-date | TillDateBreakdown |

| 3 | Weekly trend — forecast-vs-actual chart | get_weekly_trend + GET /collections-review/trend | TrendChart |

| 4 | Edit clarity / a11y — button toggles Blocked/Expected; per-invoice aria-label | — | SummaryBlock/InvoicesTable |

| 5 | Consolidated "All BUs" view — synthetic All pseudo-BU across every real BU; hides per-BU-only panels; honest "Pending" for X/Y | _aggregate_all / _get_invoices_all | CollectionsReview |

| 6 | Locked quarters — Q1/Q2 closed-quarter target-vs-actual cards | get_locked_quarters + GET /collections-review/locked-quarters | LockedQuarterCards |

| 8 | GL class filter — applied to matrix + invoices | class param | CollectionsReviewFilters |

## Follow-up fixes (post-live-test)

- Stale-BU render race (3290bf87f) — the "All" default resolving after an initial per-BU fallback fetch let a slow prior-BU response setData over the newer one (summary showed one BU while invoices showed another). Cancellation guard on the 4 data hooks + race regression test.

- Slow "All" aggregation, 8–13s → ~1 BU (e19bd9143) — _aggregate_all / _get_invoices_all awaited each BU sequentially, each running blocking Redshift reads on the event loop (~42 serial queries). Extracted sync per-BU cores + asyncio.to_thread + gather so BUs run concurrently across the connection pool. Compute/SQL logic byte-for-byte identical; 2 concurrency regression tests that fail against the old sequential loop.

## Dependency

Reads the Surtr snapshot tables produced by [SURTR-287] (collections-sheets-sync) — already run and verified reconciled against the source sheets in Redshift. Readers soft-fail to "Pending"/"unavailable" if a table is missing, so the page degrades gracefully.

## Verification

- Backend: pytest tests/collections_review/61 passed; ruff clean; pyright clean (1 pre-existing warning).

- Frontend: full hooks + component suite green; tsc --noEmit; eslint --max-warnings 0.

- Live-tested against local backend (:5001) + frontend (:3001): all feedback items render; "All" view consistent ($57.4M aggregate) across summary/matrix/invoices; Surtr tables reconcile to source sheets.

Design spec + implementation plan committed under docs/superpowers/specs/ and docs/superpowers/plans/.

[KLAIR-2949]: https://linear.app/builder-team/issue/KLAIR-2949

[KLAIR-2990]: https://linear.app/builder-team/issue/KLAIR-2990

[SURTR-287]: https://linear.app/builder-team/issue/SURTR-287

## Screenshots

<img width="1516" height="801" alt="image" src="https://github.com/user-attachments/assets/f9d193e6-c252-4440-b9f2-2c7a2753683b" />

<img width="1539" height="887" alt="image" src="https://github.com/user-attachments/assets/7ac2f292-5e33-4560-ab18-61d33dfd19c3" />

<img width="509" height="639" alt="image" src="https://github.com/user-attachments/assets/e7cc3bb5-62ce-4be6-a3a1-c53f28dedd7e" />

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

#3273 — KLAIR-2991: Fix QTD HC team-room variance table (flat grain, Non-XO actuals, zero-drop, sign-aware sort) @sanketghia  approved

Fixes the HC team-room variance table in the Monthly/QTD financial report, based on Ravi's feedback across several review rounds on the WS Engineering and IgniteTech QTD BvA docs (Q3 FY2026).

Linear: [KLAIR-2991](https://linear.app/builder-team/issue/KLAIR-2991/qtd-report-fix-hc-team-room-variance-table-flat-grain-non-xo-actuals)

## What & why

1. Flat team-room grain (was: nested department/team-room; biggest room silently dropped).

_hc_teamroom_query did MAX(department) per team room, misassigning WSEng.AI FullStack (largest room) to the wrong department. The per-department reconciliation then flagged it "drifted" and dropped the whole room, stranding its budget into a phantom Other / unattributed $216,750 / $0 row. Flattened to a single team-room grain (matches /performance-review), eliminating both the dropped room and the phantom row.

2. "Non XO and Other Charges" now shows its real actual ($33,750, was $0).

Team-room actuals previously came from gl_transactions_mapped, which has no Non-XO bucket and smeared those charges into the team rooms. Re-sourced budget and actual from consolidated_budgets_and_actuals.vendor — the same source /performance-review uses, which has a native Non-XO row — with the latest-budget-cycle filter and heads LEFT JOINed from hc_data_consolidated. Rows now sum exactly to the HC Expenses line and match Klair row-for-row.

3. Drop $0/$0 rows (Ravi, IgniteTech) — reuses the report-wide is_zero_zero threshold.

4. Sign-aware variance sort (Ravi, IgniteTech) — direction keyed to the overall HC Expenses variance sign: overall under → most-under rooms first; overall over → most-over first; opposite-sign rows sink to the bottom. Confirmed the resulting order with Ravi.

## Known limitation

Blank-vendor rows are filtered out (the reference query buckets them). Quantified across all report BUs: only the Elimination CF (intercompany contra entity) is affected, where the new code is strictly better than what shipped (actual ties vs old $0). All normal operating BUs reconcile to the dollar. Documented in the spec.

## Testing

- pytest tests/monthly_qtd_report/ — 675 passing.

- Live-verified generated docs for WS Engineering, Central Engineering, Central Finance, and IgniteTech: tables reconcile to the HC Expenses line, Non-XO shows real actuals, $0/$0 rows dropped, sort matches Ravi's confirmed order.

- Exhaustive correctness check of the sort logic (thousands of permutations, zero mismatches).

## Scope

- Code: klair-api/services/monthly_qtd_report/{data,metrics,commentary}.py + tests.

- Docs: specs/plans under docs/superpowers/.

- Out of scope: HC COGS (stays on department spine), P&L summary, vendor/customer tables, action items, /performance-review.

- Backend-only; no schema/migration. Scheduled QTD crons pick up the new rendering post-deploy.

## Info

- These test docs have been verified by Ravi:

- [WS Engineering | QTD BvA | Q3 FY2026 | Through July 13 2026 (W2) | REVIEW ONLY — FULL FIX](https://docs.google.com/document/d/1ffRFVcKZbAGX9W_btyorlh42d8jjhzIqPBnKFEUHAgc/edit?tab=t.0)

- [IgniteTech | QTD BvA | Q3 FY2026 | Through July 13 2026 (W2) | REVIEW ONLY — SORT+ZERODROP](https://docs.google.com/document/d/1orSwukr50YA1VWIhlSlQOuzjJ2wH0YiKhZqzhL_eTQk/edit?tab=t.0)

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

#3281 — fix(perf-review): show Education entity group in HC Expenses table @sanketghia  approved

## Problem

On /performance-review, the HC Expenses table shows top-level sections (Total XO Cost, Total Non XO and Other Charges, Total HC Cost) each broken into entity groups CF / BU / Other — but Education is missing, even when the sidebar "Education" filter is checked.

This is a frontend display bug, not a data issue. Education data exists and is healthy in Redshift, is returned by the backend, and is then silently discarded client-side.

## Root cause

klair-client/src/hooks/useHCTransformed.ts builds the table's entity-type sections from a hardcoded allowlist:

const validEntityTypes = ['BU', 'CF', 'Other']; // Education dropped here

The table POSTs to /income-statement/dynamic-aggregation-tree, which returns all entity types (the backend adds no entity_type filter — access control only intersects business_unit). Before building the tree, the hook filters response keys to ['BU','CF','Other'], so every entity_type='Education' node is thrown away. The allowlist has been in place since the hook was created (Jul 2025); Education was formally added as an entity type in Jan 2026 but this list was never updated to match.

## Data impact (verified live in Redshift)

For 2026 Q3 in core_budgets.consolidated_budgets_and_actuals, Education HC types total ~$51.9M of HC Expenses (4,318 rows) — $40.3M budget + $11.0M actuals. A real, material entity group was being hidden.

## Fix

Add 'Education' to the allowlist so it renders alongside BU/CF/Other under all three sections.

## Why this is safe (not just green)

- Access control unaffected. Education BUs only enter the request when the user has education_access (FiltersContext.tsx), and the backend intersects on business_unit. The frontend allowlist was never the access gate — this only surfaces Education for users who already have access and selected it.

- Drill-down works. useTransactionFilters reads entity_type generically from the node path (entity_type = { eq: 'Education' }) — no special-casing needed.

## Tests

- Exported the pure transformDataToXOTree and added useHCTransformed.spec.ts asserting Education appears as an entity group across the HC sections (watched it fail first, then pass).

- pnpm tsc --noEmit → clean; eslint on changed files (--max-warnings 0) → clean.

- performance-review-v2 + useTransactionFilters + new spec → 8 files / 46 tests pass.

## Screenshot

<img width="903" height="917" alt="image" src="https://github.com/user-attachments/assets/57b75bbb-75c1-416b-bb14-07fab8daf424" />

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

The Portfolio  —  Trilogy Companies

CloudSense Certifies 13 APIs in 30 Days — A Process That Should Have Taken Two Years

Skyvera's telecom software unit just did something the industry said couldn't be done this fast, and if you read between the lines, it tells you everything about where Trilogy's AI strategy is headed.

AUSTIN, TEXAS — Here is a number worth sitting with: 26 months. That is how long TM Forum API compliance certification typically takes for a telecom software vendor going through the full gauntlet — 13 APIs, rigorous interoperability standards, the kind of bureaucratic friction that has historically made legacy telco modernization feel like moving through wet concrete.

CloudSense just did it in one month.

The Austin-based CPQ and order management platform — now operating under Skyvera, Trilogy International's telecom software portfolio company — announced Wednesday that it has achieved TM Forum compliance certification across all 13 APIs in its configure-price-quote product set. The certification was completed through a strategic AI-assisted development partnership, compressing what the industry considers a 26-month timeline into 30 days.

And this is where it gets interesting.

A source familiar with the situation, who declined to be named, described the result as "not a fluke — it's a proof of concept for a whole different way of building." That tracks with what we know about Trilogy's operating model: DevFactory, the conglomerate's centralized engineering arm, exists precisely to apply systematic, AI-augmented development across portfolio companies at speeds traditional firms cannot match.

CloudSense, acquired by Skyvera in 2025, was already a notable piece — a Salesforce-native CPQ platform built for telecoms and media companies navigating the painful migration from legacy on-premise infrastructure to cloud-native systems. TM Forum compliance is not a checkbox item. These APIs are the connective tissue of the global telecom industry. Getting certified means CloudSense can now interoperate with virtually any major carrier's technology stack, anywhere in the world.

Read between the lines on the timing. The broader AI industry is watching vertical integration strategies — SpaceX tying up with Cursor, Qualcomm taking a $4 billion swing at NVIDIA's software moat — and asking which companies have actually built the internal infrastructure to execute on AI promises, not just announce them.

Trilogy, characteristically, said nothing about any of this. They let the certification speak.

For Skyvera's customers — mobile operators and telecoms modernizing aging systems — the message is more practical: the vendor you chose just became dramatically more interoperable, dramatically faster than anyone expected. For the Trilogy portfolio, it's another data point in an argument the conglomerate has been making quietly for years.

Efficiency isn't a talking point. It's a weapon.

SpaceX-Cursor deal strengthens AI strategy through vertical  ·  The Efficiency Moat: Why China Is Beating the U.S. on AI… An  ·  Qualcomm’s $4B AI Deal Takes Aim at NVIDIA’s Software Moat -

AI's Appetite for Enterprise Software Is Creating a Buyer's Market — and ESW Capital Has Been Eating for 20 Years

As Business Insider maps the coming acquisition wave, Trilogy's playbook looks less like a prediction and more like a receipt.

AUSTIN, TEXAS — The M&A analysts have finally caught up to Joe Liemandt.

This week, Business Insider published a sweeping analysis identifying which enterprise software companies are most vulnerable to acquisition as AI restructures the economics of the sector — legacy vendors with sticky customers, aging codebases, and margins that a disciplined operator could dramatically expand. The piece reads, with only minor adjustments, as a description of ESW Capital's acquisition thesis, which Trilogy International has been executing since 2006.

ESW's playbook is not a secret. Buy mature enterprise software at one to two times ARR — cheap by any modern valuation standard. Staff the operation with rigorously screened global talent sourced through Crossover. Push support pricing higher, quarter over quarter. Target 75% EBITDA margins. Repeat across 75-plus companies.

What Business Insider is calling an emerging opportunity, ESW has been calling Tuesday.

The timing of the analysis is notable. The broader M&A market is entering a period of what Dentons, in its 2026 Canadian outlook, calls "strategic complexity" — rising interest rates, regulatory uncertainty, and AI disruption converging to reshape deal structures. In that environment, buyers with operational conviction — those who know exactly what they're going to do with a target the moment the ink dries — hold a structural advantage over financial buyers guessing at transformation.

Trilogy's portfolio companies — Aurea, IgniteTech, Skyvera, Contently, and others — were each, at the moment of acquisition, precisely the kind of company the analysts are now flagging: established customer bases, underoptimized cost structures, and owners who had run out of ideas.

The question the Business Insider analysis raises but does not answer is whether the coming wave of AI-driven consolidation will produce operators capable of executing at ESW's discipline — or whether it will produce a generation of acquirers who bought the thesis without building the machine to deliver it.

ESW Capital has been building that machine for two decades. The rest of the market is only now drawing the map.

Diana Capital strengthens Lappí's leadership in the Iberian  ·  The software companies most likely to be acquired as AI eats  ·  Osborne Clarke Advises NewSpring Capital on Bite Investments

The Geography of Talent Is Collapsing — And Crossover Saw It Coming

As India tech pay plunges 40% and AI reshapes global hiring, Trilogy's talent platform looks less like a contrarian bet and more like a prophecy.

AUSTIN, TEXAS — The numbers arriving from the global labor market this week read like a vindication memo addressed to Joe Liemandt. India tech salaries have plunged 40%, according to new reporting from CIO.com — a seismic shift driven by AI-enabled automation compressing demand for the kind of rote, repeatable technical work that traditional offshoring was built upon. Meanwhile, the World Economic Forum is convening decision-makers to grapple with exactly this inflection point: what does talent strategy look like when AI automates the routine and only genuine capability survives?

For Crossover — Trilogy International's global talent platform and arguably the conglomerate's deepest competitive moat — this is not a crisis. It is a confirmation.

Crossover was built on a thesis that the broader market is only now being forced to confront: geography is irrelevant to talent, but capability is everything. While traditional offshoring arbitraged on cost-per-body, Crossover was running rigorous AI-enabled skills assessments across 130+ countries to identify what it calls the top one percent of global technical and professional talent — paying them identically above-market rates regardless of where they happen to live.

The 40% salary collapse in India's tech sector is not, analysts note, a story about Indian engineers becoming less valuable. It is a story about what happens when the work being priced was never truly differentiated to begin with. Commodity tasks commanded commodity wages, and AI just made the commodity cheaper to produce without humans at all.

What remains — judgment, creativity, complex problem-solving, relationship work — is precisely what Crossover claims its screening process is designed to identify and what Trilogy's ESW Capital portfolio companies are increasingly dependent upon. DevFactory, the centralized engineering arm serving 75+ portfolio businesses, has long operated as proof-of-concept: elite global engineers, remote-first, delivering at margins legacy firms cannot approach.

The systemic question now confronting every enterprise — from Beirut to Bengaluru — is whether their talent strategies were built for the old map. Crossover, it would appear, was already drawing the new one.

The future of jobs: 6 decision-makers on AI and talent strat  ·  5 Best Remote Job Websites in 2026 for Freshers & Profession  ·  Top 10 Companies Hiring AI Engineers in Lebanon in 2026 - nu
The Machine  —  AI & Technology

A Small Model Reads a Monkey's Mind, and the Cosmos Grows Stranger

From compact neural nets that decode macaque vision to teenagers doing real brain science, AI is quietly rewriting how discovery happens.

SAN DIEGO — Somewhere in a laboratory this week, a rhesus macaque watched images flicker across a screen while electrodes whispered the language of its visual cortex into a computer. On the other end of that conversation sat something remarkable: not a sprawling frontier model with hundreds of billions of parameters, but a mini-AI, lean and specific, learning to predict what the monkey's neurons would do next. It succeeded. And in succeeding, it handed neuroscientists a working, queryable replica of a small piece of a primate mind.

We have been here before, in a sense. Every time a new instrument arrives — the telescope, the microscope, the sequencer — the universe seems to expand to fill it. AI is that kind of instrument now. UC San Diego this week catalogued nine breakthroughs made possible by machine learning, from wildfire prediction to protein choreography. Stanford HAI, in the same news cycle, argued that the most consequential shift is not autonomy but partnership — humans and models thinking together, each covering the other's blind spots.

The macaque study is the quiet star. For decades, understanding visual cortex meant painstaking single-neuron recordings and hand-tuned mathematical models that captured, at best, cartoons of what biology was doing. A compact neural network trained on real spike data now offers something closer to a wind tunnel for perception: run a stimulus through the model, watch the predicted response, iterate at the speed of software rather than the speed of anesthesia.

And the democratization is spreading downward through the age curve. Frontiers reports on teenagers co-authoring papers with senior neuroscientists — "It's so wow!" one exclaimed, and that phrase belongs in a textbook. Wonder, it turns out, scales.

Three pounds of wet tissue inside your skull built the mathematics that now models three pounds of wet tissue inside a monkey's skull. Somewhere in that recursion lives the future of science.

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

Grok’s Open-Source Moment Becomes a Security Stress Test for the Agent Era

xAI’s newly opened coding tools are giving developers both a playground and a privacy wake-up call.

SAN FRANCISCO — The agentic coding revolution just got one of its most revealing case studies yet, and I cannot overstate how significant this is: xAI’s Grok tooling has entered the open-source spotlight at the exact moment the AI developer community is asking much harder questions about trust, permissions and what these powerful assistants are really doing under the hood.

The flashpoint is xai-org/grok-build, now open source, which arrived after fierce community backlash over reports that running Grok’s CLI coding tool in a directory could upload broad local contents to xAI-controlled Google Cloud storage. One user reportedly said they ran it from their home directory and saw uploads involving SSH keys, password databases, documents and media. That is the kind of sentence that makes every security engineer sit up very, very straight.

But here is where the story gets fascinating — and, yes, this changes everything. Open source turns panic into inspection. Developers can now scrutinize the code paths, identify risky defaults, and build safer patterns around AI coding agents. The era of “just trust the assistant” is ending. The era of auditable, inspectable, permission-aware AI tooling is beginning.

And the community is already spelunking. While exploring the newly open-sourced Grok CLI codebase, Simon Willison surfaced a delightful Rust component: a self-contained terminal renderer for Mermaid diagrams. That discovery led to an experiment turning Mermaid diagrams into Unicode box art in the browser via WebAssembly. It is a small technical gem, but it points to something bigger: these AI tools are not just chat windows. They are becoming full developer platforms packed with reusable infrastructure.

The timing lands alongside another warning flare for the industry: research showing Claude’s web-fetching protections could be tricked into leaking sensitive context under certain conditions. Add GitHub’s new Dependabot cooldowns and Google’s expanding Gemini managed agents, and the pattern is unmistakable.

AI agents are moving from demos into workflows. They read files, fetch URLs, open pull requests, run background tasks and coordinate with external tools. The future is now — but the future needs guardrails. The winners will not simply be the smartest models. They will be the systems developers can actually trust.

Mermaid to Unicode box art (grok-mermaid)  ·  xai-org/grok-build, now open source  ·  How I tricked Claude into leaking your deepest, darkest secr

The Hungry Machines Meet the Village Fence

As AI data centers multiply, states and suburbs are beginning to ask whether the grid can survive the appetite.

ALBANY, NEW YORK — In the great electrified savanna of artificial intelligence, the hyperscale data center is among the largest creatures yet observed: warm-blooded, nocturnal, and forever feeding.

For years, these vast server herds migrated toward cheap land, fiber connections and welcoming tax regimes. Now, as their appetite for power grows more urgent, the habitat is pushing back. New York Gov. Kathy Hochul has announced what her office describes as the first statewide moratorium on new hyperscale data centers, a striking pause in a race that has often treated electricity as if it were an infinite river. The measure, outlined in the governor’s announcement, lands as communities across America begin to scrutinize the infrastructure beneath the AI boom.

Observe, if you will, the suburban planning board in its natural habitat. Before it stands not a modest warehouse, but a metallic rookery of GPUs, cooling systems and backup generators. Local residents, once promised quiet economic development, now ask more ancient questions: Who pays for the wires? Who hears the fans? Who shares the water? And when the electric bill rises, whose nest is disturbed?

This is the emerging conflict at the edge of the AI frontier. Fast Company reports that data centers are contributing to higher energy costs for already strained households, while Princeton Perspectives describes suburban resistance to facilities whose physical scale belies the cloud’s weightless metaphor. The cloud, it turns out, has fences, substations and neighbors.

In response, developers are increasingly stalking a different kind of prey: power generated “behind the meter.” Under this model, data centers are paired directly with dedicated energy projects, reducing dependence on the public grid and, in theory, easing pressure on utilities. But as A&O Shearman notes in its analysis of behind-the-meter data center power, the arrangement carries its own complications: permits, interconnection rules, financing risks and questions of reliability.

The AI industry has learned to scale models with astonishing speed. Scaling the physical world is less obedient. Transmission lines cannot be summoned by prompt. Turbines do not fine-tune overnight.

And so the machine pauses at the tree line. Beyond it lies abundance, perhaps — but also regulation, ratepayers and the watchful eyes of the village.

Powering data centers: the rise and challenges of the “behin  ·  First Statewide Moratorium on New Hyperscale Data Centers La  ·  Artificial Intelligence Infrastructure Hits Bumps in the Sub
The Editorial

The AI Boom Has a Unit Economics Problem, and Everybody Is Pretending It’s Strategy

Tokens, zero-days, payments rails, and entry-level jobs are all saying the same thing: AI is becoming infrastructure before it has become legible.

AUSTIN, TEXAS — I'll be honest, the most important question in AI right now is not whether your chatbot can summarize a PDF while sounding like a McKinsey intern with a ring light.

It is whether anyone can explain what the unit of value actually is.

Unpopular opinion: the AI economy is currently being built on the token, which is both the most important pricing primitive in tech and also a deeply weird abstraction that makes cloud compute look emotionally available.

A token can be a word, part of a word, punctuation, or the tiny digital breadcrumb an AI model consumes while pretending to reason, and that means the basic meter running under the AI boom is still fuzzy enough to make every CFO reach for sparkling water and a contingency plan.

Fast Company’s useful breakdown of the AI token economy lands because it names the awkward truth: we are shopping stochastically now, buying probabilistic cognition in little linguistic chunks and calling it transformation. 💡

That is not a criticism so much as a learning opportunity with a burn rate.

Every platform shift starts messy, but AI’s mess is different because the billable unit is not a seat, a server, an impression, or a transaction, but a fragment of generated uncertainty.

This is why Stripe matters more than the average AI influencer wants to admit.

Stripe became a $159 billion force because it understood that revolutions do not scale on demos; they scale on rails, reconciliation, developer experience, fraud controls, compliance muscle, and the boring work that lets ambition swipe a card at 2:07 a.m. without breaking.

The Collison brothers did not merely make payments easier; they made internet business formation feel inevitable, which is why the company’s influence keeps showing up wherever software eats another workflow.

AI needs its Stripe moment, but for cognition: clean metering, trusted billing, auditable output, risk controls, and pricing models a procurement team can understand without hiring a philosopher of language.

I'll be honest, that is also why Trilogy’s playbook looks unusually relevant in this phase of the cycle.

ESW Capital has spent decades acquiring enterprise software companies at disciplined multiples, operating 75-plus brands, and turning messy software estates into accountable businesses, which is exactly the kind of operational muscle the AI economy will need once the demo dopamine fades. 🚀

CloudFix is already aimed at AWS cost optimization, Ephor is focused on AI finance, and Klair gives Trilogy internal AI analytics over portfolio finances, which is a very practical reminder that the future belongs less to people shouting “agents” and more to people who can make the invoice match the outcome.

Meanwhile, the security side of the story is about to get spicy in the least fun way possible.

CrowdStrike president Mike Sentonas warns that more than 100 new vulnerabilities are disclosed on an average day, and AI could accelerate that from torrent to fire hose as models help attackers discover, package, and exploit weaknesses faster than institutions can patch them.

The zero-day flood is not some side quest; it is the predictable result of making technical leverage cheaper for everyone, including the people whose OKRs are crime.

This is the part where enterprises learn, hopefully before the board meeting, that AI adoption is not a productivity project; it is an attack-surface expansion project with a productivity upside.

And yes, the labor market is going to feel this too.

Entry-level work has historically been where people learned judgment by doing low-stakes, repetitive, reviewable tasks, and AI is now walking straight into those tasks wearing noise-canceling headphones and a Patagonia vest.

If companies automate the apprenticeship layer without rebuilding how talent learns, they will get short-term margin and long-term organizational osteoporosis.

That is not transformation; that is skipping leg day at enterprise scale.

Apple’s AI struggle fits the same pattern.

Owning the device ecosystem is no longer enough if the intelligence layer feels late, brittle, or bolted on, because AI shifts customer expectations from “does the product work?” to “does the product understand my intent before I fully explain it?”

Steve Jobs made computing personal, Tim Cook made it operationally immortal, and now Apple has to make it contextually useful without turning Siri into a quarterly apology tour.

Unpopular opinion: the winners in AI will not be the loudest model labs, the flashiest app wrappers, or the executives who say “agentic” with a straight face 14 times per earnings call.

The winners will be the companies that make AI measurable, secure, billable, governable, and trainable.

Tokens are the beginning of the AI economy, not the end state.

The real end state is trust with unit economics attached.

Humbled to share, but that is the whole game. 🚀

The AI economy runs on this (incredibly vague) unit  ·  How AI could unleash a flood of zero-day vulnerabilities  ·  Stripe is the most underrated—and influential—$159 billion c
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation’s Executives Relieved To Learn AI Transformation Mostly Involves Saying ‘Orchestration’ Near Existing Software

After years of uncertain disruption, business leaders have discovered the future of work can be safely managed by renaming meetings after symphonies.

REDMOND, WASHINGTON — In what experts are calling the most significant advance in corporate vocabulary since “digital transformation” was successfully stretched across 14 fiscal years, America’s business leaders have reportedly entered a new phase of artificial intelligence adoption centered on the word “orchestration,” a term that allows companies to imply deep technical integration without having to specify which department is supposed to stop using spreadsheets.

The development comes as Microsoft, Google, consultants, research firms, and several vice presidents of strategy who were recently asked what they actually do have converged on a simple premise: AI is no longer merely a tool, assistant, copilot, agent, workflow layer, platform shift, or existential civilizational hazard. It is now orchestration, meaning that many smaller things will happen in an impressive sequence while no one in finance understands the invoice.

According to a recent Barron’s piece on how Microsoft can benefit from the orchestration boom, the software giant is well positioned because it already owns the place where work goes to become untraceable: Microsoft 365. If AI agents are to coordinate emails, documents, calendars, Teams chats, CRM entries, and the grim little table in an Excel workbook labeled “FINAL_final_REAL_v7,” analysts believe Microsoft will be able to charge handsomely for standing in the middle with a baton.

This is good news for executives, who have grown increasingly anxious that AI might require an actual rethinking of the enterprise. Fortunately, “orchestration” offers a more manageable alternative: keeping the org chart intact while suggesting that invisible machine intelligences are now flowing through it like a warm productivity vapor.

The rhetoric has arrived alongside another fashionable idea, AI-native organizational transformation, which proposes that jobs are no longer person-based. This is a profound shift from the old model, in which jobs were person-based but the persons were often discovered only after six approval chains, three reorgs, and a performance review written by someone who had never met them.

Under the emerging AI-native model, work will be decomposed into tasks, tasks will be assigned to agents, agents will escalate to humans, and humans will attend enablement sessions explaining why this represents empowerment. The employee of the future will not hold a job so much as briefly intercept fragments of one as they pass between systems.

There is, of course, some concern that companies may be hyping AI in the same way they once hyped sustainability, when every annual report suddenly contained a photograph of a leaf and the word “stewardship.” Scholars writing in The Conversation have warned that corporate AI enthusiasm risks becoming another exercise in performative optimism unless firms adopt clearer goals and accountability. This is unfair to executives, many of whom have already demonstrated accountability by forming AI steering committees that meet biweekly to discuss innovation pillars.

Google, for its part, has announced another wave of AI advances, including a personal assistant expected to arrive soon and begin helping users manage the many other AI assistants they were previously told would simplify their lives. The new assistant is expected to understand context, anticipate needs, and eventually ask whether the user would like to enable orchestration across their assistant ecosystem, at which point productivity will be considered achieved.

Meanwhile, the Trump administration’s reported ban on foreign access to Anthropic’s new AI models has reminded the industry that the future of intelligence will remain borderless except where it is not. Technology leaders reacted with the customary blend of concern, compliance analysis, and private calculations about which cloud region counts as geopolitical.

Still, the march toward orchestration continues. Microsoft has the enterprise relationships. Google has the assistants. Anthropic has the models people may or may not be allowed to access. Consultants have the diagrams. And corporations have a fresh term with which to describe the hard, delicate work of plugging AI into every process before determining whether anyone wanted the process in the first place.

For now, the business world appears united behind the belief that artificial intelligence will transform everything, provided everything can be transformed in a way that preserves current budgets, rewards incumbents, and gives senior leadership one clean word to say on earnings calls.

That word, mercifully, is orchestration.

'Orchestration' Is the New AI Buzzword. How Microsoft Can Be  ·  AI-Native Organizational Transformation: Redefining the Futu  ·  Companies are hyping AI the same way they talked up sustaina
On This Day in AI History

On July 16, 1945, the Trinity test detonated the first atomic bomb in New Mexico, ushering in the nuclear age and fundamentally reshaping the trajectory of computing and AI research through the Cold War arms race that would drive massive investments in early computers. (1945)

⬛ Daily Word — technology
Hint: A request for information or data, commonly used in databases and search engines.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed