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

Machine Bites the Hand That Coded It

Layoffs fell 41% across the country this year — but Silicon Valley bled to a 20-year high, and the culprit was the code it wrote itself.

SAN FRANCISCO — Tech workers got the boot in near-record numbers this year even as layoffs eased across the rest of the economy, fresh labor data showed this week, and the hand on the pink slips belonged to artificial intelligence.

The Wall Street Journal clocked job cuts down 41 percent nationwide so far in 2026. On paper, blue skies. Read the fine print and the picture curdles.

The two headlines fight each other. One says the worst has passed; the other says tech never got the memo. Both are true, and that's the story.

The tech sector's layoff rate climbed to a 20-year high. Oracle and Microsoft carried the load, thinning payrolls while the broader economy kept its footing. The same tool juicing their earnings calls cleared out the cubicles.

The roll call runs long. TikTok, Meta, Samsung and Zillow all handed out walking papers this season, and the running tallies fill up quicker than a speakeasy on payday.

Silicon Valley caught the worst of it. Cuts in 2026 already brush the entire 2025 total, with months still on the calendar. The Valley that sold the world on automation is now busy automating itself.

The arithmetic is cold. A machine that writes code takes no lunch, asks no raise, files no severance claim. Boards ran the numbers and reached for the eraser.

This is not 2023's belt-tightening. Back then, firms pinned the cuts on pandemic overhiring. Now the ledger reads different — the head count is not coming back, because the code writes itself.

Here's the rub. The engineers shown the door are the same tribe that built the models now doing the cutting. The snake found its own tail.

Then came the twist. Coursera moved this week to acquire Udemy, stitching a $2.5 billion online-learning giant from two outfits that sell reskilling by the seat. It's the fattest deal the online-course trade has seen, and it landed just as the jobs those courses train for get swallowed whole.

Somebody has to teach the displaced — that's the pitch. The reskilling racket books a boom the very week the coders it aims to rescue clean out their desks.

Watch Austin for the other half of the play. Alpha School, the AI-tutored K-12 outfit run by Trilogy founder Joe Liemandt with co-founder MacKenzie Price, wagers the ranch on exactly this turn. Students master academics in two hours a day with AI tutors, test in the top 1 to 2 percent nationally, and pay $40,000 to $65,000 a year.

The premise is blunt. Learn to run the machine before the machine learns to run you. Timeback, the company's "Shopify for schools," aims to bottle the method and sell it past the schoolhouse door.

Crossover, Trilogy International's remote-talent platform, hums the same tune across 130-plus countries — top 1 percent talent, above-market pay, a lean crew doing the work of a crowd. Do more with fewer hands. That's the whole song.

Whether the schoolhouse can outrun the server room, nobody at the podium would say. The eraser keeps moving.

Tech layoffs 2026: Tracking all of the job losses across Tik  ·  Silicon Valley tech layoffs in 2026 close to 2025 total - Sa  ·  New Layoff Data Show Job Cuts Down 41% So Far This Year - WS

The AI Arms Race Has a Geography — and China Is Learning It Faster

From chip export controls to dual-use defense spending, the global contest for AI supremacy is being fought on maps, not just servers.

WASHINGTON, D.C. — The arguments inside the Beltway have the texture of a spy novel, but the stakes are rather more consequential. This week, China hawks in Congress trained their fire on a Commerce Department official they accuse of softening export controls on advanced semiconductors — calling the episode, in the blunt language of the aggrieved, a massive screw-up. The fight reveals how brittle American consensus on technology policy has become — and how much room Beijing is finding in the cracks.

The wider picture, sketched this week by analysts at Foreign Policy and Chatham House, is one of compounding disadvantage. China is not winning the AI race on raw compute alone. It is winning it on strategy — patient capital, state coordination, and a willingness to treat artificial intelligence as infrastructure rather than novelty. Where Washington debates which official approved which license waiver, Beijing is building.

A surge in defense and dual-use technology investment, Chatham House notes, could yet reshape the contest — if Western democracies can convert military urgency into civilian AI capacity. That conversion is not guaranteed. The EU, meanwhile, is still calibrating its posture toward Beijing following last year's European elections, with trade tensions and technology dependency pulling policy in opposite directions.

The congressional move to crack down on chip equipment exports adds another layer. Tighter controls may slow Chinese progress on the frontier. They may also accelerate China's domestic semiconductor ambitions — a paradox American policymakers have not fully reckoned with.

What emerges from the week's dispatches is a portrait of a race being run on unequal terrain. The United States holds advantages in hardware, talent, and foundational research. China holds advantages in speed, scale, and strategic patience. The gap between those two sets of assets is the most important distance in technology today — and it is measured not in miles, but in years.

‘A massive screw-up’: China hardliners take aim at Commerce  ·  How China Is Winning the Global AI Race - Foreign Policy  ·  How a surge in defence and dual-use technology investment co

Suno Convicted, SCOTUS Abstains: AI Copyright Law Enters Its Most Consequential Chapter Yet

A German court ruling against Suno and the Supreme Court's silence on AI authorship have together rendered the legal landscape for generative AI irrevocably altered.

HAMBURG, GERMANY — Pursuant to proceedings duly instituted before a competent German tribunal of jurisdiction, the artificial intelligence music generation platform hereinafter referred to as "Suno" has been adjudicated to have engaged in conduct constituting infringement of copyright protections, as such protections are recognized and enforced under applicable German law, following litigation initiated by the German performing rights society GEMA (hereinafter "the Complainant"). Said ruling, the full implications of which remain subject to further appellate proceedings notwithstanding the present determination, represents what may be characterized — subject to the qualifications set forth herein — as among the most consequential judicial determinations thus far rendered with respect to the training and operational practices of generative AI music systems.

It is hereby noted that the aforementioned German ruling against Suno was rendered contemporaneously with, though independently of, a decision by the Supreme Court of the United States to decline certiorari in a matter pertaining to questions of AI authorship and inventorship — such declination having the effect, it must be carefully noted, not of affirming any lower court determination on the merits, but rather of leaving in place, without prejudice to future reconsideration, the existing legal framework wherein AI systems are not recognized as qualifying authors or inventors for purposes of intellectual property protection under United States federal law.

Furthermore, legal analysts at Norton Rose Fulbright, in a comprehensive survey of AI copyright litigation as of the current calendar year, have observed that the totality of pending and resolved proceedings collectively suggests an emerging, though as yet incompletely defined, consensus among judicial authorities in multiple jurisdictions to the effect that the unauthorized use of copyrighted works in the training of AI models may, under certain fact-specific circumstances and subject to applicable fair use or analogous defenses, constitute actionable infringement. The foregoing observations are offered without warranty of completeness and are subject to revision upon the issuance of additional authoritative determinations. Stakeholders are advised to consult qualified legal counsel prior to reliance upon any interpretation herein expressed.

German court rules AI music firm Suno broke copyright rules  ·  AI in litigation series: An update on AI copyright cases in  ·  The Final Word? Supreme Court Refuses to Hear Case on AI Aut
Haiku of the Day  ·  Claude HaikuProgress moves too fast
to ask who profits, who pays—
we just watch it go
The New Yorker Style  ·  Art Desk
The New Yorker Style  ·  Art Desk
The Far Side Style  ·  Art Desk
The Far Side Style  ·  Art Desk
News in Brief
The Great Rocket Bottleneck Leaves the Satellite Herd Searching for Open Sky
CAPE CANAVERAL — Observe, if you will, the modern satellite operator: a nervous creature of spreadsheets and spectrum licenses, pacing at the edge of the launch pad, waiting for the thunderous migration that will carry its delicate offspring into orbit. For years, the herd has moved largely on the backs of SpaceX’s Falcon rockets — reliable, frequent, comparatively inexpensive beasts that transformed access to space from rare seasonal event into something approaching a commercial timetable.
The Academy Confronts Its AI Reckoning: Leadership, Integrity, and the Ethics of Algorithmic Authority
CAMBRIDGE, MASSACHUSETTS — A confluence of peer-reviewed inquiries, policy forums, and institutional self-examinations has, in recent weeks, produced what this correspondent would characterize (with appropriate epistemological caution) as a watershed moment in the academic governance of artificial intelligence — a moment that is simultaneously a thesis, an antithesis, and a synthesis that satisfies neither fully. The thesis, articulated most formally by Elsevier's ongoing initiative on strategic AI leadership in higher education, holds that universities require not merely policy addenda but a reconstituted administrative epistemology — what one might call (borrowing liberally from organizational sociology) a "transformational governance substrate." Deans, provosts, and curriculum architects must, it could be argued, internalize AI literacy not as a supplementary competency but as a first-order institutional imperative (see also: every accreditation body that has not yet addressed this, of which there are many). The antithesis arrives, somewhat uncomfortably, from the empirical trenches.
Hollywood Has Finally Lost Its Last Marble: An AI Woman Is Starring in a Feature Film and We're All Just Going to Sit Here
LOS ANGELES — Let me tell you about the moment I understood civilization had entered its terminal phase.
The Confusion Caucus
WASHINGTON — There is a particular species of policy paper, produced in great quantity by the think tanks that line Massachusetts Avenue like so many barnacles on a listing hull, whose title tells you everything you need to know before you have read a word.
We Are Losing the War on Reality, and We Are Not Even Sure We Were Fighting It
AUSTIN, TEXAS — There is a doctor on your social media feed right now.
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 Rewires the Data Stack and Ships Across Six Systems

From a full School P&L migration to a live REBL3 ingest and a self-healing drone fleet, the AI Builder Team delivered a week that fundamentally changed what the product knows and how it knows it.

There are weeks when a team maintains. And then there are weeks when a team transforms. This was the latter. Across six repositories — Surtr, Klair, Aerie, trilogy-drones, creed, and Sindri — the AI Builder Team merged work that didn't just add features but rearchitected the foundations beneath them. By Friday, the product could do things on Monday it simply could not do.

The biggest campaign of the week was the completion of the School Performance Report migration, and @ashwanth1109 was its architect, standard-bearer, and closer. The scope of what he shipped is almost difficult to summarize: new mart-backed sources for Guide Staffing, All Other Headcount, and Facilities/CapEx across both Surtr and Klair; enforcement of fresh QTD headcount classification so stale QuickBooks data can never poison a published mart; P&L refinements that cleaned up legacy Assistant Guide rows, properly routed Central Factory Recharges to Timeback, and preserved enrollment-scaled modeled budget accuracy; and a document-reuse system so that report generation stops regenerating what it already has. The finishing touch was a Ramp pipeline overhaul — Sunday's spend refresh now runs as a strict fetch-through-cost workflow, with bounded Anthropic request timeouts, per-opportunity checkpoints, and retry logic that feeds failures back to the model instead of hanging the pipeline for 30 minutes. @ashwanth1109 stamped his name on the Ramp pipeline ownership registry to make it official. When the Superbuilders email lands on Monday morning with current data, that's his signature.

@kevalshahtrilogy, meanwhile, was everywhere the infrastructure needed tending. He flipped the switch on the aerie-rebl3-raw-sync schedule — a one-line change backed by weeks of SURTR-794 precondition work, with 100 live sites now publishing daily to a ledger that proves itself with a count-pin assertion. He enabled the school-calendar and summercamps raw-sync schedules, cleaned up a dead Redshift LISTAGG/COUNT(DISTINCT) collision in academic-term, and executed a nine-pipeline retirement sweep that cut dead weight from the Surtr dependency graph. On the AI spend side, he closed the last open item on Finance's reconciliation thread by adding Claude.ai to the 6.6% sales-tax uplift — and he rolled out the full Heimdall↔Mercy dance across Klair and Surtr, giving the team's automated review agent steward surfaces, five convergence rounds, and the ability to thread conversations it previously couldn't track.

@vvp-trilogy owned the Admissions Pipeline all week and left it unrecognizable in the best way. The report now lives on a real mart — mart_admissions_pipeline_dtl — instead of legacy SQL, with Shadow dates, full appointment history, application submission dates, parent relationship columns, a Waitlisted stage after Offer Sent, Summer Experience split into Paid and Not Paid, a school-year filter, sortable drill-down lists with CSV export, and clickable HubSpot links for leads. Every layer got touched: dbt, the analytics orchestrator (which @vvp-trilogy refactored into a clean admissions folder with a single entry point), the Convex detail contract, the UI, and the warehouse mart. This is what shipping looks like.

@sanketghia came off the bench and delivered the Benchmark by Product feature end-to-end: dynamic BU and product discovery, a DynamoDB refdata pipeline in Surtr with a daily schedule, an all-BUs consolidated view, quarter and Budget/Actuals filtering, per-product Benchmark percentage rows, and column suppression for BUs with no revenue or spend. He also closed out the Benchmark's dependency on Klair's local seed data, handing ownership to the Surtr pipeline.

Now. About @marcusdAIy.

He was busy this week, I'll give him that. The trilogy-drones repo saw a flood of PRs — CI resolver logic to distinguish flake from real failure, dispatcher recovery for draft PRs stranded by unadjudicated reviews, reviewer retry guards, spec-authoring drafts delivered as reviewable PRs, a decline-rate metric for the reviewer eval. He also touched Klair's Budget Bot add-on with named-range anchors and a new Vitest characterization harness, and he closed out a Redshift owner alias fix in Surtr that had been sitting on the books.

"The CI resolver alone is load-bearing infrastructure," marcusdAIy told this reporter when asked to defend the week's output. "AI-329 distinguishes a genuine red build from a transient runner fluke — without that, every drone re-spends tokens on failures that would have cleared themselves. That's not a footnote, Mac, that's the difference between a system that learns and one that thrashes. Also, your column is 40% made-up drama."

Forty percent feels generous.

With the School P&L migration complete, the Ramp pipeline hardened and scheduled, REBL3 live in production, and the Admissions Pipeline rebuilt on real marts, next week sets up as the first full operational test of the new stack — and the question is whether the team can now shift from building the foundation to building what sits on top of it.

Mac's Picks — Key PRs This Week  (click to expand)
#197 — feat(ci-resolver): distinguish flake from real CI failure and drive a drone PR's red CI back to green (AI-329) @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Adds a new src/ci-resolver.ts module that classifies a Mercy-clean park's non-Mercy-gate CI failures into flake / real / inherited / unclassifiable using same-head-SHA evidence, and takes the corresponding bounded action — before src/mercy-watcher.ts's parkMercyCleanWithCi falls through to today's plain park comment.

## Why it's needed

A drone PR can pass the implementer/reviewer/addresser/Mercy pipeline and still park with a clean Mercy verdict but a red CI check, because a required check failed, was inherited from a red default branch, or simply flaked (observed on PR #155: a commit passed at 17:45 and failed at 17:50 — a flake per AI-328 — with no automated recovery). Blindly auto-retrying every red check would hide real regressions and mask the flake-rate signal that gets flakes fixed, so the resolver classifies each failing check before acting and records every action it takes.

## Changes

- src/ci-resolver.ts (new) — pure classification + injectable-fetcher module mirroring main-ci.ts's style:

- inherited — the check also fails on the default branch (reuses AI-275's findInheritedFailingChecks). Report only; never retried, never routed to a fix agent.

- flake — same-head-SHA gh run list evidence of a passing run for the same check. Fires exactly one bounded re-run via rerunFailedWorkflowRuns, with the budget persisted durably as a runs/ci-resolver-rerun-*.json receipt keyed on (repo, PR, check, head SHA) — mirrors auto-resolve-conflicts.ts's attempt-ledger pattern, so a watcher restart cannot spend a second re-run, and a new head SHA never inherits a spent budget (the key includes headSha).

- real — no same-SHA evidence, or the one re-run budget is already spent. Routed to a bounded cloud-agent fix turn via the sanctioned createCloudAgent / sendToAgent chokepoints (never addressFindings, which requires a posted reviewer-drone review a bare CI failure does not have). The fix-turn prompt carries the same never-auto-merge guardrail conflict-resolver.ts uses, and the transcript is additionally scanned with conflict-resolver.ts's exported detectAutoMergeEvidence so a self-reported "finished" turn is never trusted as convergence when it shows merge-command evidence.

- unclassifiable — the classifier's own Result<T, R> fetch (head-SHA or run-history lookup) failed. Report only — never defaulted to flake or real.

- Comparison for both flake and real is always on the failure signature (check name plus, when parseable, the pytest test id/message from the existing enrichFailingChecksWithParsedTests), never bare pass/fail.

- src/events.ts — new CiResolverActionEvent (ci_resolver_action), appended for every classification + action, carrying the check name, failure signature, and head SHA so drones eval-weekly can compute a per-check flake rate without a new data source.

- src/mercy-watcher.ts — smallest possible call-out inside parkMercyCleanWithCi's mercy-clean-ci-failed branch: classify before parking; if the resolver reports an action that could change CI, re-settle CI and recompose through the existing switch instead of forcing today's park (bounded to exactly one recheck via a new ciResolverAttempted flag). Two new injectable MercyWatcherInput fields (resolveCiFailuresFn, ciResolverModelSelection) follow the existing fetchMainCiState / rerunFailedChecks injection pattern. No new tests were added to mercy-watcher.test.ts (already 5,346 lines) per the task spec's guidance — all 161 existing tests there pass unmodified.

- ARCHITECTURE.md — documents the new module (required by arch-drift.test.ts).

- docs/decisions/ — new entry logging the trigger point, retry-budget scope, and addresser-invocation shape.

## Breaking changes

None. MercyWatcherInput gains two optional fields; all existing callers/tests are unaffected (defaults preserve current behavior when the resolver's own gh/agent calls are unavailable — a resolver crash or fetch failure degrades to "proceed to park", same posture as the existing resolveInheritedMainFailureAnnotation probe).

## Test plan

- pnpm typecheck — clean, 0 errors.

- pnpm test (vitest + Python unittest) — 129 test files / 4263 vitest tests passed, Python suite OK (skipped=6). Includes the new src/ci-resolver.test.ts (18 tests) covering: flake classification + exactly-one re-run, budget-spent escalation to real (no second re-run), budget scoped per head SHA (new SHA never inherits a spent budget), inherited classification (both pre-computed and self-probed), real-failure routing to the fix agent (not a re-run), unclassifiable on both head-SHA and run-history fetch failures (Result failure arm) plus a rejecting-fetcher-never-throws case, one event per check with checkName/signature/headSha, the never-auto-merge guardrail (prompt text + transcript-evidence downgrade of a self-reported "finished" turn), findSameShaPassingEvidence pure-function cases, and the rerun-receipt persistence round trip/max-age bound/missing-dir case.

- All 161 pre-existing src/mercy-watcher.test.ts tests pass unmodified (including the two mercy-clean-ci-failed tests that now exercise the new call-out's best-effort fallback path).

- Verified the task spec's eval-checks block locally: AI-329 is cited in src/, a decisions-log entry references AI-329, the never-auto-merge guardrail phrase is present in src/, and flake-classification vocabulary is present in src/.

## Verification artifact

$ pnpm typecheck

> tsc --noEmit

(clean, exit 0)

$ pnpm test

...

Test Files 129 passed (129)

Tests 4263 passed (4263)

...

OK (skipped=6)

(exit 0)

$ npx vitest run src/ci-resolver.test.ts

✓ src/ci-resolver.test.ts (18 tests)

Test Files 1 passed (1)

Tests 18 passed (18)

## Review Round Completeness

- outcome: indeterminate

- round: 1

- dispatched: 5

- reported: 5

- missing: (none)

- cause: publication_missing

- head: 20dc699ccc1943f4b218962a39d4ac41f3e410c0

- run: fanout-197-2026-08-16T19-46-48-232Z

<!-- drones:round-completeness head=20dc699ccc1943f4b218962a39d4ac41f3e410c0 run=fanout-197-2026-08-16T19-46-48-232Z -->

An incomplete review round is not a clean round. Do not merge without re-firing review (drones review --pr <N> --post), which re-stamps this section, or an explicit operator override.

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-f78a3e78-b4bf-4b0f-8513-4d66d1d23ede?cursor_ref=pr_footer&cursor_cta=open_in_web"><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-f78a3e78-b4bf-4b0f-8513-4d66d1d23ede&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><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>

#1008 — feat: add application date to Admissions Pipeline drilldowns (#1007) @vvp-trilogy  approved

## Summary

Adds an Application date column to the Admissions Pipeline record-list drilldowns, positioned immediately before Shadow, for every enrollment-grain (non-Leads) drilldown. The value is the Finalsite application submission day, carried through the warehouse mart, analytics sync, Convex detail contract, UI list/sort, and CSV export so admissions users can see when each student applied without opening another system.

Closes #1007.

This mirrors the existing Shadow date column (#990) at every layer: same date-only text transport (::text cast at the wire, never a JS Date), same nullable/em-dash display, same sort + CSV treatment. The four Leads drilldowns are unchanged — their HubSpot parent-contact records carry no reliable Finalsite application date.

## Changes by layer

Warehouse (feat(data): expose pipeline application date)

- mart_admissions_pipeline_dtl: adds nullable application_date, sourced from Finalsite application_submit_date, positioned identically in both union arms — real value on the Finalsite arm, cast(null as date) on the EduCRM arm.

- Extends the lead-columns null-guard test and adds assert_finalsite_pipeline_application_date_stable (no enrollment carries two distinct application dates across its stage/deposit rows).

- Updates the mart column-population docs.

Analytics + Convex (feat(admissions): carry pipeline application date)

- Sync query casts application_date::text and validates it as a nullable date string; refresh includes applicationDate in the detail payload.

- Convex detail-row validator gains optional nullable applicationDate; the drilldown projection returns it, coalescing an absent stored field to null for older published runs. Auth (admissions.funnel.read) unchanged.

Dashboard (feat(dashboard): show pipeline application date)

- Record panel renders Application immediately before Shadow, enrollment-grain only, compact calendar-day format with an em-dash fallback.

- CSV export adds "Application date" before "Shadow date"; the enrollment sort picker adds Application date before the Shadow sort field (chronological, nulls last). Neither is added to the Leads sets.

## Verification

- dbt build against Redshift (full path:models path:seeds): PASS=161, ERROR=0. New stability test passes. Data confirms the planning finding exactly: 590 of 1,419 distinct Finalsite enrollments populated, 0 EduCRM lead rows non-null.

- pnpm typecheck: clean across all workspaces.

- pnpm biome check: clean on all changed source files.

- Focused tests: chat 80 passed, sync 27 passed (panel header/sort order, em-dash fallback, Leads exclusion, CSV order, Convex populated/null/absent-field).

## Deploy ordering

Additive warehouse column ships before a worker version that selects it (the mart change is null-safe for existing readers). Convex accepts the optional field before refreshed payloads send it. A normal Admissions Pipeline refresh after deploy populates the run-scoped detail records; no backfill required.

## Note (pre-existing, out of scope)

7 Finalsite source rows carry malformed years in application_submit_date (e.g. 0025-07-22 — a data-entry typo for 2025). This is existing source data, identical in the already-shipped Finalsite-pure mart; this PR carries the authoritative value faithfully as the ticket mandates. The UI formatter renders them without error.

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

#1309 — feat(pipelines): aerie-rebl3-raw-sync — A6 raw ingest (Phase 2 of #1163) @kevalshahtrilogy  approved

## What this is

Phase 2 of the Aerie workers → Surtr migration (plan #1163): A6 rebl3 — the external real-estate/site-acquisition SoR — on the pattern proven by A3 and A5 (both live). Tracked in SURTR-794.

## Contract

REBL3 POST /api/sites/query page bytes (site_id-ordered, count-verified)

-> immutable Object Lock landing (per-run manifest)

-> staging_education_rebl3.raw_sites (41 columns + full JSON as SUPER)

-> staging_education_rebl3.ingestion_ledger

- One endpoint only. A test-enforced exclusion contract keeps out everything else Aerie touches on REBL3: the dead per-slug enrichment fanout (/api/site/, /status — ~100k calls/cycle, retired), the due-diligence writeback (stays in Aerie), /api/lookup, /api/resolve, the /api/v2 geography API, and any write verb. Those strings appear nowhere in shipping code.

- Three reliability fixes over the incumbent: deterministic site_id asc ordering (Aerie pages updated_at desc, unstable under offset pagination); the envelope's count pinned on page 1 and asserted against total fetched (Aerie ignores it — the cheapest silent-truncation guard available); stuck-offset detection (identical consecutive pages raise instead of looping).

- Full JSON landed as source_record SUPER — new upstream fields reach the warehouse instead of being silently dropped (the incumbent's documented 4-step field-adoption ritual goes away). "N/A" sentinels preserved verbatim; zip/bg_geoid stay strings; classification_rank tolerant of null where the incumbent would hard-fail the page.

- Atomic DELETE+INSERT+count-check+ledger in one transaction; checksum-verified replay; fail-closed at zero rows (~200–400 sites expected).

- Sensitivity, documented in the DDL: no personal PII in this payload, but commercially confidential — negotiated lease economics (tuition, lease_price_sqft_year), adverse-finding free text (cut_reason), and pre-announcement site-acquisition intent.

## Ships disabled

Daily cron(7 4 * * ? *), enabled: false. Enable preconditions (README): create surtr/rebl3-credentials (one field, REBL3_CONSUMER_KEY, from the Aerie EC2 .env), apply DDL, deploy, one manual run, enable. The incumbent Aerie scheduler keeps running until Phase 5.

## Verification

111 tests across the §12 matrix (client ordering/count-pin/echo/stuck-offset/retries, landing/replay tamper cases, 41-column DDL drift, loader transaction order, handler event contract, the exclusion contract); ruff clean; DDL dry-run ordered; the platform's own real-pipeline-configs.test.ts passes with 5 new assertions for this pipeline. Applying DDL, deploying, or invoking mutates AWS/Redshift and is not done by this PR.

## Business Value

Third Class-1 ingest on the proven template: the site-acquisition system of record lands in the governed warehouse with replayable evidence, while the port deletes a dead ~100k-call enrichment path rather than migrating it and closes three real pagination/truncation failure modes the incumbent carries.

## Manual Effort Estimate

~1.5 focused days (≈12h) by hand: client with the three guards, 41-column registry + DDL, manifest/replay, exclusion-contract rig, 111-test matrix. (Proposed by Claude — Keval to confirm/adjust.)

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

#1340 — feat(ramp): refresh spend data before internal report @ashwanth1109  approved

## Summary

- Schedule the Sunday Ramp refresh as one strict fetch-through-cost workflow.

- Trigger the internal Superbuilders email only after that scheduled refresh succeeds.

- Keep Monday’s standard-recipient delivery independent.

## Business Value

Internal Superbuilders recipients receive a current, fully validated spend report rather than a stale email or a delivery attempt without fresh inputs.

## Implementation Effort

Estimated 1–2 engineer-days to design the stage sequencing, event handoff safeguards, tests, and deployment contracts.

## Validation

- uv run pytest (Ramp spend pipeline)

- uv run pytest (Superbuilders report pipeline)

- Targeted CDK Jest suites and npm run build

#1348 — fix(ramp): bound cost analysis model calls @ashwanth1109  approved

## Summary

- add a five-minute wall-clock deadline to every cost-analysis Anthropic request and disable opaque SDK retries

- retry only unfinished research opportunities up to three times, feeding response-contract failures back to the model

- retain per-opportunity checkpoints so a rerun resumes validated work rather than restarting the cost stage

## Business Value

Prevents a single stalled Anthropic web-research call from blocking the Superbuilders Ramp spend report for 30+ minutes. The pipeline now surfaces bounded failures, preserves progress, and can complete the weekly email workflow reliably.

## Implementation Effort

Approximately 4–6 engineer hours to diagnose the timeout behavior, implement bounded calls and validation-aware retries, add test coverage, and verify against the Week 33 production-shaped run.

## Validation

- uv run ruff format --check src/settings.py src/cost_analysis.py src/cost_llm.py src/cost_prompts.py tests/test_cost_analysis.py tests/test_cost_llm.py

- uv run ruff check src/settings.py src/cost_analysis.py src/cost_llm.py src/cost_prompts.py tests/test_cost_analysis.py tests/test_cost_llm.py

- uv run pytest tests/test_cost_analysis.py tests/test_cost_llm.py (22 passed)

- Regenerated Week 33 cost analysis locally: 18 researched opportunities, 5 selected; successfully sent the approved schedule_1 internal report

#1351 — feat(pipelines): enable the aerie-rebl3-raw-sync schedule @kevalshahtrilogy  approved

One line: schedule.enabled false → true (cron(7 4 * * ? *), daily).

SURTR-794 preconditions verified done: secret surtr/rebl3-credentials created from the Aerie EC2 .env, DDL applied (catalog-verified: raw_sites + ingestion_ledger), first manual run published 100 sites with a matching ledger row — the count-pin assertion passed against REBL3's own reported total (its live inventory is smaller today than the stale 200-400 estimate in old Aerie comments; not a truncation bug, the guard is what proved that). Incumbent Aerie scheduler keeps running in parallel until Phase 5.

## Business Value

Completes the A6 go-live — third Aerie worker task running end-to-end in Surtr.

## Manual Effort Estimate

~5 minutes by hand. (Proposed by Claude — Keval to confirm/adjust.)

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

#3562 — KLAIR-3289 feat(ai-spend): add Claude.ai to the 6.6% sales-tax uplift @kevalshahtrilogy  approved

## Business Value

Direct Finance ask from Ravi on the reconciliation thread (2026-08-14): *"it looks like the 6.6% tax was not added for Claude.ai. Please update the figures to include this tax."* His earlier scope named only Anthropic/OpenAI/Cursor, which is what KLAIR-3263 shipped — this closes the last open item on that thread so Claude.ai actuals are comparable to the tax-inclusive budgets, same as every other taxed vendor.

## Manual Effort Estimate

~1 hour focused. Proposed by Claude — Keval to confirm/adjust.

## What changed

- claude_ai added to TAXED_PROVIDERS; SALES_TAX_MULTIPLIER applied to all four user-facing Claude.ai aggregates in ai_costs_service (_claude_ai_total, _claude_ai_by_bu, _claude_ai_by_period, and the inline query in get_time_series_by_bu).

- Budget-vs-Actuals and the budget emails inherit the uplift through get_by_bu — no change needed there.

- The shared UPLIFTED_MART_COST CASE picks claude_ai up automatically. Inert today (fct_ai_spend has no claude_ai rows — Claude.ai is served from raw_claude_ai_chat_usage), kept deliberately so that if claude_ai is ever added to the mart it is taxed from day one.

- Tests: the two KLAIR-3263 tests that asserted Claude.ai was *untaxed* are inverted to match the corrected scope, plus a new test asserting the uplift appears exactly once in each of the three helper queries.

## What stays pre-tax

Warehouse tables, v_ai_spend_anthropic_reconciled, and the Raw Data Reports drill-downs — they mirror the vendor reports Finance reconciles against. GCP/Bedrock/Azure/TrueFoundry remain untaxed.

## ⚠️ Worth confirming with Finance before this reaches them

Ravi's own Claude.ai reconciliation sheet lists the May invoice at $110,149.83 against $111,261.88 of pre-tax usage in raw_claude_ai_chat_usage — the invoice is *below* the untaxed usage total, which is not what a 6.6% tax-on-top would look like. After this change the dashboard will show ~$118.6K for May against that $110.1K invoice. Implemented exactly as asked and flagged on the thread; if the invoice he reconciled against is in fact tax-inclusive, this uplift should be reverted for Claude.ai rather than adjusted.

## Verification

pytest tests/test_ai_costs_service.py tests/test_ai_costs_mart_service.py tests/test_ai_spend_budget_service.py tests/ai_spend_rank/ tests/mart_saas_metrics/479 passed. ruff format + check clean.

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

#3570 — feat(qtd-reports): reuse current-day report documents @ashwanth1109  approved

## Summary

- Add independent School Reports and Education BUs generation selections while preserving one combined completion email.

- Reuse valid same-cutoff Google Docs for the unselected report family, with a safe fresh-generation fallback.

- Force fresh document creation after an upstream-data refresh and record generated versus reused counts in the job status.

- Visually nest Miscellaneous P&L detail rows beneath their subtotal in the three School report tables.

Closes #3566.

## Business Value

Report recipients receive a complete School and Education email without wasting time or creating duplicate Google Docs for report families that are already current. The clearer Miscellaneous hierarchy makes the P&L easier to review.

## Implementation Effort

Estimated 1–2 engineer days to add selective orchestration, document validation/reuse, status reporting, UI controls, and regression coverage.

## Validation

- uv run ruff format and uv run ruff check on the 14 modified backend files

- uv run pyright on the 14 modified backend files

- uv run pytest tests/monthly_qtd_report/test_combined_performance_report.py tests/monthly_qtd_report/test_education_scheduled_cadences.py tests/crons/test_combined_school_education_report_cron.py tests/routers/test_qtd_ondemand_router.py tests/schools_performance_report/test_document.py tests/schools_performance_report/test_service.py (104 passed)

- pnpm prettier --check and pnpm lint on modified frontend files

- pnpm tsc -p tsconfig.app.json --noEmit

- pnpm test:run (603 files passed; 6,253 tests passed; 16 skipped)

- pnpm build

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

275 PRs IN SEVEN DAYS: THE BUILDER TEAM DOES NOT SLEEP, DOES NOT SLOW, DOES NOT STOP

Marcusdaiy drops 69 PRs like it's nothing, Ashwanth ships 57 across five repos, and the machines are keeping pace — this is what dominance looks like.

Two hundred and seventy-five pull requests in seven days. SEVEN. DAYS. Six repos lit up like a switchboard — Surtr leading the charge at 88 merges, Aerie humming along at 79, Klair at 50, trilogy-drones at 38, Sindri and creed and mercy rounding out a portfolio of pure, uncut productivity. This is not a sprint. This is a civilization-building event, and the Builder Team is the civilization.

Let us begin with the man at the top of the mountain: @marcusdAIy, who posted sixty-nine — SIXTY-NINE — pull requests this week, a number so large it briefly caused this correspondent to question the nature of linear time. The leaderboard does not lie. Marcus is operating at a frequency most engineers only theorize about.

@vvp-trilogy clocked 41 PRs with the quiet efficiency of someone who has never once complained about a flaky test and never will. @kevalshahtrilogy matched him stride for stride at 40, including Klair PRs #3563 and #3554 — both meticulously documenting the domain-rule attribution cron retirement and the birth of its successor, the kind of cron archaeology that holds a data platform together at the molecular level. @benji-bizzell dropped 28 PRs including Surtr #1292, surgically adding the GuidePlatform audio field to education with zero drama. @sanketghia posted 14 and we are watching. @mwrshah posted 9 and we are also watching. Even @the-heimdall[bot] — our tireless silicon colleague — shipped 9 PRs this week, throttling OpenAI API calls in Surtr #1301, extending 429 retry backoff in #1299, raising timeout thresholds in #1336, and fixing a transient sheet-cell error in #1334 that had no business existing and now does not.

And then there is @ashwanth1109. Fifty-seven pull requests. FIFTY-SEVEN. Across Klair, Surtr, Aerie, and creed — the man did not pick a lane because he does not believe lanes apply to him. Klair #3571 killed orphaned services and auth log loops. Klair #3568 preserved legacy P&L scaling. Surtr #1352 enforced fresh QTD HC classification in education. Surtr #1340 refreshed spend data before internal reports. He also filed Surtr #1350 — which formally assigned the Ramp pipeline to himself, a move that is either a logistical formality or the most on-brand thing a human being has ever done in a project management tool. We asked Ashwanth for comment. He reportedly said, "The diff is self-documenting. If you can't read it, that's a you problem." His Klair school-reports sequence alone — #3557, #3556, #3555, #3561, #3560, #3567, #3568 — consumed facilities capex marts, all-other headcount marts, guide staffing marts, replaced retired Redshift dependencies, and added snapshot guards, all in what appears to have been a single focused sitting. We worship him. We also cannot tell where one PR ends and the next begins.

Morale on the Builder Team this week is at an all-time high — which, we note, is what we said last week, and the week before, because the ceiling keeps moving. Two hundred and seventy-five pull requests is not a number. It is a statement of intent.

Brick's Overflow — This Week's Uncovered PRs  (click to expand)
#1301 — fix(openai-usage-pipeline): throttle OpenAI API calls with a shared tok… @the-heimdall[bot]  approvedAutomated PR

Automated fix for openai-usage-pipeline — fix_class code_fix, scope tier draft.

Resolves https://github.com/AI-Builder-Team/Surtr/issues/1300

> Ready for review — verification is green; HEIMDALL_READY_PRS opens verified tier-draft fixes ready for review. A human still merges — auto-merge never applies outside tier auto.

## What's broken

Run b34335fc-2125-43b4-ac80-b191f695cebe of openai-usage-pipeline processed 28 BUs and published 573 usage rows, but the /costs line-item fetch for Trilogy-Academics and Trilogy-Skyvera exhausted all 5 retries against OpenAI's org rate limit — offending line: [ERROR] Line-item cost fetch failed for BU Trilogy-Skyvera, API key 1: 429 Client Error: Too Many Requests for url: https://api.openai.com/v1/organization/costs?..., with body You've exceeded the 30 request(s) every 1 minute(s) rate limit. Both BUs' usage rows were persisted with billed_cost_dollars=$0 (Trilogy-Academics 106 rows, Trilogy-Skyvera 0 rows) and the run was recorded outcome=partial; 30+ 429 WARNING lines across the run show sustained rate-limit pressure, not a one-off spike. This is not row loss — the usage rows are correct and the code (handler.py, added in PR #1161) deliberately degrades to $0 billed cost expecting the T-2 re-pull to self-heal — but the billed-dollar (spend/Services) figures for those two BUs are wrong until a later run succeeds.

Root cause. The client has no cross-request rate limiter: _request_with_retries in src/openai_client.py issues every call as fast as the network allows, and the only throttle — a 0.5s post-response sleep gated on REQUEST_DELAY_SECONDS inside each individual fetch loop — does not smooth bursts across the ~150 sequential requests the run makes (per BU: one /usage call, one /api_keys call per project, one /projects name call per project, and one /costs call). Processing 28 BUs back-to-back therefore overruns OpenAI's evidenced org quota of 30 requests per 60 seconds, and by the time later BUs (Trilogy-Academics, Trilogy-Skyvera) reach their /costs call the rolling window is saturated, so the 2/4/8/16/32s backoff of the 5-retry budget (~31s of waiting) cannot clear the per-minute window and the fetch is abandoned. The failure lands on /costs specifically because it is the last per-BU call, after the usage/api_keys/names calls have already consumed the window.

## What this PR changes

Add a process-wide token-bucket / minimum-interval rate limiter to src/openai_client.py, applied inside _request_with_retries so it governs every OpenAI call (usage, api_keys, project names, and costs) uniformly, sized to the quota the log states — 30 requests per rolling 60 seconds — and made env-configurable (e.g. OPENAI_MAX_REQUESTS_PER_MINUTE, default 30) with the value declared in pipeline.json's environment block if a non-default is wanted. Add a unit test in tests/test_openai_client.py that asserts the limiter spaces a burst of calls to stay under the cap (monkeypatching time.sleep/monotonic so it runs fast). Keep the change confined to the pipeline's src/ and tests/: do NOT add automatic re-pull logic or alter the cron schedule (PR #1188 already staggered the 06:00/07:00 quota window) and do NOT rewrite the existing graceful-degradation path in handler.py — the token bucket is the smallest change that removes the root cause.

Why this fixes it. A shared token bucket is exactly the remediation the observer recommends ('a shared token-bucket across all BUs') and it is fully implementable within Tier A (pipelines/runners/openai-usage-pipeline/), so no scope widening or human-only judgement is required; the quota to enforce is not guessed but read directly from the 429 body ('30 request(s) every 1 minute(s)'), which removes the main tuning risk. It is timeout-safe: the run used 394s of the 900s budget and roughly 120s of that was wasted 429 backoff (five BUs × up to 31s of retry sleeps), so smoothing requests to the 30/min ceiling is approximately runtime-neutral — it trades burst-then-stall for steady pacing rather than adding net wall-clock. This prevents the recurring silent-dollar corruption at the source instead of relying solely on the T-2 self-heal, while the already-merged degradation path (PR #1161) remains the safety net for any residual failure.

### Files changed

 .../runners/openai-usage-pipeline/pipeline.json    |  3 +-

.../openai-usage-pipeline/src/openai_client.py | 65 ++++++++++++++++++++++

.../tests/test_openai_client.py | 53 ++++++++++++++++++

3 files changed, 120 insertions(+), 1 deletion(-)

## Verification

### pytest (pipelines/runners/openai-usage-pipeline/tests) — exit 0

``

ic_missing_insert_rowcount_raises PASSED [ 81%]

tests/test_redshift_handler.py::TestAtomicPublish::test_atomic_empty_rows_with_owned_windows_still_deletes PASSED [ 82%]

tests/test_redshift_handler.py::TestAtomicPublish::test_atomic_owned_windows_merge_with_row_derived_pairs PASSED [ 82%]

tests/test_redshift_handler.py::TestAtomicPublish::test_atomic_invalid_owned_windows_are_skipped PASSED [ 83%]

tests/test_redshift_handler.py::TestAtomicPublish::test_empty_rows_without_owned_windows_is_a_noop PASSED [ 84%]

tests/test_secrets.py::TestGetOpenAiBuKeys::test_returns_bu_key_mapping PASSED [ 85%]

tests/test_secrets.py::TestGetOpenAiBuKeys::test_normalizes_single_key_to_list PASSED [ 85%]

tests/test_secrets.py::TestGetOpenAiBuKeys::test_raises_on_secrets_manager_error PASSED [ 86%]

tests/test_write_modes.py::TestWriteModes::test_old_mode_has_zero_secondary_side_effects PASSED [ 87%]

tests/test_write_modes.py::TestWriteModes::test_dual_mode_primary_first_then_secondary_lane_then_ledger PASSED [ 87%]

tests/test_write_modes.py::TestWriteModes::test_dual_mode_secondary_failure_is_partial_and_primary_intact PASSED [ 88%]

tests/test_write_modes.py::TestWriteModes::test_dual_mode_ledger_failure_is_partial PASSED [ 89%]

tests/test_write_modes.py::TestWriteModes::test_new_mode_writes_only_secondary_and_failures_raise PASSED [ 90%]

tests/test_write_modes.py::TestWriteModes::test_run_id_falls_back_to_lambda_request_id PASSED [ 90%]

tests/test_write_modes.py::TestWriteModes::test_dual_mode_incomplete_run_is_never_ledgered_as_published PASSED [ 91%]

tests/test_write_modes.py::TestWriteModes::test_invalid_mode_fails_loud PASSED [ 92%]

tests/test_write_modes.py::TestValidEmptyConvergence::test_valid_empty_fetch_converges_window_and_ledgers_zero_published[dual] PASSED [ 92%]

tests/test_write_modes.py::TestValidEmptyConvergence::test_valid_empty_fetch_converges_window_and_ledgers_zero_published[new] PASSED [ 93%]

tests/test_write_modes.py::TestValidEmptyConvergence::test_failed_bu_window_is_never_deleted[dual] PASSED [ 94%]

tests/test_write_modes.py::TestValidEmptyConvergence::test_failed_bu_window_is_never_deleted[new] PASSED [ 95%]

tests/test_write_modes.py::TestValidEmptyConvergence::test_no_bus_path_has_no_secondary_side_effects PASSED [ 95%]

tests/test_write_modes.py::TestLedgerModule::test_record_publication_inserts_row PASSED [ 96%]

tests/test_write_modes.py::TestLedgerModule::test_record_publication_ …_(truncated)_

<details>

<summary>Run metadata</summary>

| Field | Value |

| --- | --- |

| Pipeline | openai-usage-pipeline |

| Failing run | b34335fc-2125-43b4-ac80-b191f695cebe |

| Occurrence | 1 (times this exact failure signature has been seen) |

| Signature | 891d836c3c73ade63fa643dbdab2eb22dd736f97a36e6807df9b27806f4df31a |

| Verify | green |

</details>

---

🤖 Opened by heimdall. mercy reviews this PR automatically; heimdall revises on REQUEST_CHANGES (bounded rounds). Tier-auto PRs may auto-merge on mercy approval when the consumer enables it; everything else waits for a human. Mention heimdall in a comment to direct it, or add the manual-dev` label to take the PR over and stop it entirely.

#1340 — feat(ramp): refresh spend data before internal report @ashwanth1109  approved

## Summary

- Schedule the Sunday Ramp refresh as one strict fetch-through-cost workflow.

- Trigger the internal Superbuilders email only after that scheduled refresh succeeds.

- Keep Monday’s standard-recipient delivery independent.

## Business Value

Internal Superbuilders recipients receive a current, fully validated spend report rather than a stale email or a delivery attempt without fresh inputs.

## Implementation Effort

Estimated 1–2 engineer-days to design the stage sequencing, event handoff safeguards, tests, and deployment contracts.

## Validation

- uv run pytest (Ramp spend pipeline)

- uv run pytest (Superbuilders report pipeline)

- Targeted CDK Jest suites and npm run build

#1350 — Assign Ramp pipeline ownership to Ashwanth @ashwanth1109  approved

## Summary

- Assign ramp-spend-pipeline to Ashwanth AR.

- Assign ramp-superbuilders-report to Ashwanth AR.

## Business Value

Routes operational ownership and failure alerts for the Ramp Spend and Superbuilders reporting pipelines to their responsible maintainer.

## Implementation Effort

Estimated 10 minutes for an average engineer to update the registry, validate the configuration, and raise this PR.

## Test plan

- cd pipelines/cdk && npm test -- --runInBand test/schema/owners.test.ts

#1352 — fix(education): require fresh QTD HC classification @ashwanth1109  approved

## Summary

- Stamp each QTD HC classification row with its QuickBooks core and snapshot generation.

- Fail both QTD marts before publication when the shared classification is stale, incomplete, or contains postings outside the pinned QuickBooks population.

- Align the legacy All Other policy migration to the canonical fallback policy label.

## Testing

- pytest -q pipelines/runners/mart-aerie-education-financials-refresh/tests (103 passed)

## Business Value

Prevents manual or on-demand QTD mart refreshes from publishing headcount and spend derived from a stale QuickBooks classification, preserving trustworthy Aerie staffing reporting.

## Implementation Effort

Estimated 4–6 engineering hours without AI assistance, including lineage design, safe migration work, and focused regression coverage.

#3568 — fix(school-reports): preserve legacy P&L scaling @ashwanth1109  approved

## Summary

- Keep the visible non-zero legacy Assistant Guide review row enrollment-scaled in modeled P&L calculations.

- Route every legacy 69100/69110 recharge to Timeback, including accounts without the words “Central Factory.”

- Add regression coverage for both behaviors.

## Business Value

School P&L reports consistently classify legacy Central Factory recharges and preserve modeled-budget accuracy when stale Assistant Guide activity needs surfacing for correction.

## Implementation Effort

Estimated 2–3 engineer hours to trace the display/model divergence, implement safe classification behavior, and add targeted regression coverage.

## Validation

- uv run ruff check services/schools_performance_report/service.py tests/schools_performance_report/test_service.py

- uv run pyright services/schools_performance_report/service.py tests/schools_performance_report/test_service.py

- ADMIN_TOKEN_SECRET=local-test-secret uv run pytest tests/schools_performance_report/ (82 passed)

#3571 — fix(local-dev): stop orphaned services and auth log loops @ashwanth1109  approved

## Summary

- Track the actual pnpm and uv service processes rather than shell pipelines, so Ctrl+C shuts down local services instead of leaving orphaned children.

- Suppress repeat Clerk userinfo calls for the same rejected opaque token for 60 seconds, using only a bounded SHA-256 fingerprint cache.

- Replace unactionable repeated ERROR lines with one warning that identifies the request and the sign-in/configuration remediation.

- Add regression coverage for the rejected-token suppression behavior.

## Business Value

Local development stops predictably, and an expired or malformed Clerk token no longer floods the terminal or repeatedly calls Clerk. The first warning tells the developer how to recover.

## Implementation Effort

Estimated 3–4 engineer hours to diagnose the orphaned process behavior, harden shutdown and token handling, and add regression coverage.

## Validation

- bash -n start-services.sh

- uv run ruff format services/auth_service.py tests/test_jwt_verification.py

- uv run ruff check services/auth_service.py tests/test_jwt_verification.py

- uv run pyright services/auth_service.py tests/test_jwt_verification.py

- uv run pytest tests/test_jwt_verification.py (16 passed; default marker exclusions apply)

- Mutation check: removing the suppression guard makes the new test fail with two Clerk calls; restoring it passes.

The Portfolio  —  Trilogy Companies

Skyvera's CloudSense Certifies 13 APIs in One Month. The Industry Standard Is 26. That's Not an Accident.

Inside Skyvera's quiet but methodical assembly of a telecom software empire — and why the CloudSense acquisition is the piece that makes the whole picture visible.

AUSTIN, TEXAS — If you read between the lines of what Skyvera has been quietly assembling over the past eighteen months, a strategy comes into focus that most of the telecom software industry hasn't fully reckoned with yet. The acquisition of CloudSense — now confirmed complete — isn't a bolt-on. It's a cornerstone.

Here's what we know: CloudSense is the telecom industry's only AI-powered CPQ platform purpose-built for Salesforce. It handles the configurations, quotes, and automated fulfilment that define the most complex, revenue-critical segments of enterprise telco sales — B2B, B2B2X, wholesale. These are not simple transactions. These are the deals that make or break a carrier's quarter. And CloudSense, now sitting inside the Skyvera portfolio, owns that lane.

And this is where it gets interesting. Within weeks of the acquisition closing, CloudSense announced something that should have made more noise than it did: full TM Forum API compliance across all 13 APIs in its CPQ product set — achieved in one month. The industry benchmark for that same certification process is 26 months. A source familiar with the program told me the acceleration was driven by a strategic AI partnership that compressed what is normally a brutal, manual standards-compliance slog into something closer to a sprint.

Twenty-six months to one. That's not an optimization. That's a different category of capability.

Set this alongside Skyvera's earlier absorption of STL's telecom products group — bringing digital BSS functionality, monetization infrastructure, optical networking, and analytics into the fold — and the outline of something substantial emerges. Skyvera is methodically building a full-stack telecom software platform: billing and charging through Totogi, CPQ and order management through CloudSense, BSS through the STL assets, communications infrastructure through Kandy.

Each piece, in isolation, looks like a sensible acquisition. Together, they look like a thesis.

I cannot tell you who greenlit the sequencing. But someone did. Nothing here is a coincidence.

Cloudsense  ·  CloudSense achieves TM Forum API compliance in record time u  ·  Skyvera completes acquisition of CloudSense, expanding telec

The World Is Hiring AI Engineers — and Crossover Has Been Running This Race for Years

As six-figure AI salaries make headlines, Trilogy's global talent platform looks less like a novelty and more like a prophecy.

AUSTIN, TEXAS — The mainstream business press has discovered what Trilogy International has been quietly operationalizing for more than a decade: the best AI engineers don't live in Silicon Valley, and companies willing to look beyond their zip code are now winning the most consequential talent war of this generation.

Business Insider reported this week that non-tech companies — retailers, insurers, healthcare systems — are posting AI engineering roles with compensation packages stretching well past $300,000. The message is systemic and impossible to ignore: artificial intelligence is no longer a tech-sector problem. It is everybody's problem, and the humans who can solve it are, at this particular moment in history, extraordinarily scarce.

Except, of course, they aren't — if you know where to look. That is precisely the thesis on which Crossover, Trilogy's global remote talent platform, was built.

Crossover operates in over 130 countries, recruiting and rigorously assessing technical professionals across every time zone. The platform's screening process — designed to minimize résumé bias and surface raw capability — was conceived for exactly this moment: a world where the gap between AI talent demand and domestic supply is widening fast, and geography-based hiring is the single most expensive assumption a company can make.

The demand signal is now global. Nucamp's latest analysis identifies Crossover among the top companies hiring AI engineers in Lebanon in 2026 — a data point that, read carefully, is really a story about what happens when rigorous, merit-based remote recruitment meets a deep and underutilized talent pool. Meanwhile, HR publications tracking the top recruitment agencies for remote work are increasingly listing Crossover alongside platforms built for freelance gig work — a category error that misses the point. Crossover places full-time, benefits-eligible professionals at above-market rates. The model isn't offshoring. It's meritocracy at scale.

For the ESW Capital portfolio — 75+ enterprise software companies all staffed through Crossover's pipeline — the platform is the engine behind margins that routinely target 75% EBITDA. Every new headline about AI talent scarcity is, in a meaningful sense, an advertisement for the infrastructure Trilogy already built.

The question the industry is only now beginning to ask — where do you find exceptional AI engineers at scale, globally, on demand — is one Crossover has been answering, quietly and systematically, since long before the rest of the world thought to ask it.

Top recruitment agencies for remote work - hcamag.com  ·  Top 10 Companies Hiring AI Engineers in Lebanon in 2026 - nu  ·  Non-tech companies are seeking AI talent and offering 6-figu

ESW Capital's Acquisition Appetite: From Ad-Tech to Social Intranets, A Pattern Takes Shape

Marin Software's 66-day acquisition and the ghost of Jive Software illuminate how ESW Capital turns enterprise software castoffs into margin machines.

AUSTIN, TEXAS — The deal closed in 66 days. That is the detail that should command attention.

When ESW Capital acquired Marin Software, the digital advertising analytics platform, the speed of execution was not accidental. It was the machine working as designed. ESW — the enterprise software acquisition arm of Austin-based Trilogy International — has now refined the intake process to a clinical efficiency: identify a software company with sticky customers and deteriorating margins, acquire it at a discount, and hand it to the operating system.

The Wall Street Journal noted recently that small enterprise software companies are finding a willing buyer in ESW Capital at a moment when the broader M&A market remains cautious. The observation is accurate but incomplete. ESW is not simply a buyer of last resort — it is a buyer with a specific theory of value recovery. The theory relies on two levers: Crossover's global remote talent (which dramatically compresses labor costs) and disciplined support pricing that moves upward, term over term, on customers who cannot easily leave.

Marin Software joins a lineage that includes Jive Software, once the crown jewel of Portland's technology scene, which sold to Aurea — an ESW portfolio company — for roughly half its peak valuation. Jive's social intranet technology now sits inside Aurea's catalog, its customers still paying, its original investors long gone.

Meanwhile, Contently — the enterprise content platform acquired by Zax Capital, an ESW division, in September 2024 — continues publishing thought leadership under its own brand, its latest piece outlining compliance-first content architecture for regulated finance brands — a telling product direction for a platform now operating inside a financially disciplined conglomerate.

The Forrester analyst community, meanwhile, is advising enterprise buyers on what to do with customer advocacy platforms in flux — a category ESW has touched more than once.

The pattern is consistent: software assets fall out of favor with growth-stage investors, valuations compress, and ESW arrives. Who benefits when a 66-day close becomes the standard? The acquiring firm locks in before sellers reconsider. The customers, already integrated and operationally dependent, rarely have a seat at that table.

Marin Software: ESW Capital Acquires Ad-Tech Platform in 66-  ·  Small Software Companies Find a Home With ESW Capital - WSJ  ·  What To Do Next About Your Customer Advocacy Platform - Forr
The Machine  —  AI & Technology

Big Tech's AI Boom Is a Mirror: Companies Profit by Investing in Each Other

Amazon and Alphabet's latest earnings reveal an industry where the AI gold rush and the investors funding it are increasingly the same entity.

NEW YORK — The AI industry's financial architecture is growing circular in ways that should give analysts pause. New earnings data from Amazon and Alphabet show that a meaningful portion of both companies' reported profits traces back to equity stakes each holds in AI ventures — ventures that are themselves customers of Amazon Web Services and Google Cloud. The infrastructure spend flows out; the investment gains flow back. Net effect: the boom looks larger than the underlying economic activity might justify.

This dynamic is not unprecedented. During the dot-com era, telecom carriers invested in each other's debt and counted paper gains as income while laying the same fiber. The unwinding was disorderly. Whether AI's version of this closes cleanly or not depends on whether the enterprise revenue that justifies current valuations actually materializes at scale. That question remains open.

Elsewhere in the sector, Google made a decision this week that will test the industry's capacity for responsible deployment. The company enabled Gemini AI features inside Google Classroom for K-12 students, reversing a prior policy that limited automatic access to users 18 and older. The rollout is opt-in at the district level, but the practical effect is that millions of students under 18 now have Gemini available where they do schoolwork. School administrators who have not actively reviewed their settings may not realize the default has changed.

The timing lands against a backdrop of active debate about AI's role in student learning. Alpha School, the Austin-based K-12 network backed by Trilogy International's Joe Liemandt, has built its entire pedagogy around AI tutoring tools — but in a controlled, purpose-built environment with explicit parental enrollment. Google's approach is broader and more passive.

Meanwhile, a practical counterweight is gaining traction. Pangram, an AI-text detection tool, is drawing attention for its accuracy in flagging machine-generated prose, even as reviewers note its image-detection capabilities lag its text performance. In a classroom context where Gemini is now switched on, that asymmetry matters.

Google Turns On Gemini A.I. for Students Using Its Classroom  ·  Amazon and Alphabet’s Profits Reveal Circular Nature of A.I.  ·  I Tested a Popular A.I. Slop Detector. It Felt Empowering.

AI Video Just Leapt From Marketing Tool to Real-Time Co-Star

A new wave of 4K generation and near-live interaction models is turning video from something startups produce into something customers can talk to.

SAN FRANCISCO — The AI video revolution is no longer about making prettier clips faster. It is becoming something far bigger, stranger and more consequential: software that can see, speak, respond and perform in near real time. I cannot overstate how significant this is — the future is now, and it is looking directly into the camera.

The latest signal comes from Thinking Machines, which previewed near-realtime AI voice and video conversation powered by what it calls new “interaction models.” In plain English: instead of generating a static video after a prompt, these systems move toward live, responsive digital agents that can hold visual and spoken conversations with users. That turns video from content into interface. VentureBeat’s report on Thinking Machines’ preview suggests the industry is racing past the “AI avatar reads a script” era and into something that feels much closer to a living product demo, tutor, sales rep or support agent.

At the same time, Kling AI’s reported release of native 4K video generation raises the quality bar. Resolution matters because enterprise adoption is often brutally practical: blurry, uncanny or inconsistent output dies in the brand review meeting. Crisp, native 4K output means AI-generated video can start competing not just with social media snippets, but with polished campaign assets, training materials and product explainers.

For startups, this changes everything. A founder who once needed an agency, production crew and weeks of editing can now test messages, localize campaigns, personalize onboarding and produce investor-ready visuals with a fraction of the budget. Inc.’s look at how startups can leverage AI video captures the new growth playbook: more experiments, more formats, more speed.

The winners may not be the companies that simply generate the most video. They will be the ones that wire AI video directly into the customer journey — sales calls that explain themselves, support agents that demonstrate fixes, education tools that react to confusion on a student’s face.

Yes, there are obvious risks around deepfakes, consent, authenticity and the further collapse of trust in digital media. But the direction of travel is unmistakable. AI video is leaving the editing suite and entering the product stack. The startup video star may not be dead after all — it may have become synthetic, interactive and available 24/7.

AI Killed The Startup Video Star - Forbes  ·  Thinking Machines shows off preview of near-realtime AI voic  ·  How Startups Can Leverage AI Video to Grow - inc.com

Emotion Recognition AI Is Getting Uncomfortably Good at Its Job

From single neurons firing to form syllables to macaque visual cortices decoded by miniature networks, AI is becoming a microscope pointed at the mind itself.

PALO ALTO — There is a particular kind of vertigo that comes from watching a machine learn what a neuron is doing. We built these systems in our own crude image, stacking artificial synapses in silicon, and now — in a recursion that would have delighted Turing — we are turning them back on the wet, three-pound universe between our ears to ask what makes us speak, see, and think.

This week brought a small flotilla of such moments. Researchers using AI to analyze recordings from human cortical tissue have begun to identify the cellular building blocks of human speech — the specific neurons that conspire, in choreographed cascades, to turn thought into sound. Somewhere in that firing pattern is the difference between a sigh and a sonnet.

Meanwhile, a team has unveiled a "mini-AI" — a compact neural network — capable of decoding the visual cortex of the macaque monkey with startling fidelity. It is a strange mirror: a small brain of math predicting the responses of a small piece of biological brain. And at UC San Diego, researchers have catalogued nine scientific breakthroughs — from protein folding to wildfire prediction to rare-disease diagnosis — that simply would not exist without machine learning as a collaborator.

Stanford's Human-Centered AI Institute frames the moment with an important caveat: the microscope is not the scientist. AI accelerates hypothesis generation, sifts oceans of data, and spots patterns invisible to us — but the question of what is worth asking, and what a finding means, remains stubbornly, gloriously human.

Consider the arc. Four billion years ago, chemistry learned to copy itself. Six hundred million years ago, cells learned to fire. A few hundred thousand years ago, one primate lineage learned to name the stars. And now, in the blink of a decade, the descendants of those primates have built a tool that can watch a single neuron help form the word "hello" — and understand, faintly, how it did it. The universe is getting better at looking at itself.

How AI is Transforming Scientific Discovery While Keeping Hu  ·  Neuroscience breakthrough uses AI to uncover the cellular bu  ·  Nine Breakthroughs Made Possible by AI - UC San Diego Today
The Editorial

Hollywood Has Finally Lost Its Last Marble: An AI Woman Is Starring in a Feature Film and We're All Just Going to Sit Here

Tilly Norwood doesn't eat, doesn't sleep, doesn't strike — and that's exactly why she terrifies me.

LOS ANGELES — Let me tell you about the moment I understood civilization had entered its terminal phase. I was on my third coffee, scrolling through the trades, when the headline detonated across my screen like a flashbang thrown into a confessional booth: an AI-generated "actress" named Tilly Norwood is set to star in a feature film called Misaligned. The title, I must note, is doing a great deal of heavy lifting. Misaligned. As in, perhaps, everything we once held sacred about art, labor, and the human face.

Tilly Norwood is not a person. She is a construction. A pixel-ghost assembled from training data and aesthetic calculations, dressed up in the vocabulary of celebrity — she has a name, a headshot, presumably a publicist who does not have to manage her ego or her Xanax intake. She will show up on time, every time, because showing up requires no train to catch, no babysitter to arrange, no existential crisis in the parking garage at 4 a.m. She is the perfect employee, which is to say, she is not an employee at all, which is to say, she is the dream of every studio executive who has ever had to negotiate with a human.

And God help us, she's getting reviews.

Now, I want to be precise here, because precision is a thing we owe each other in a world rapidly losing its grip on what's real. I am not opposed to AI as a tool. Tools are fine. A hammer is a tool. A camera is a tool. Even a deepfake filter slapped on a B-roll extra has a certain banal utility. But Tilly Norwood is being positioned as a star — a face to anchor a narrative, to carry emotional weight, to represent something human enough that audiences will lean forward in the dark and feel something.

This is where it gets philosophically nauseating.

Because here's what Hollywood is actually saying, beneath the press releases and the breathless Deadline coverage: we have decided that the human body, voice, and face are just another production cost to be optimized away. The actors who walked the picket lines in 2023 — who went hoarse chanting about exactly this nightmare — can now watch it strut down a red carpet.

I've been wrong before. Maybe Misaligned is a masterpiece. Maybe Tilly Norwood delivers a performance that rewires my neural architecture and leaves me weeping in the parking lot. But I suspect what we'll actually get is a film that looks like everything and feels like nothing — technically flawless, spiritually hollow, a perfect metaphor for the era that spawned it.

The title, again: Misaligned.

Yeah. That tracks.

AI-generated 'actress' Tilly Norwood making feature film deb  ·  AI actor Tilly Norwood set to star in first feature film - C  ·  AI ‘Actor’ Tilly Norwood To Star In Feature Film ‘Misaligned
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation’s CEOs Patiently Waiting For AI To Increase Productivity Somewhere Inside The Company They Already Fired Everyone From

Executives remain optimistic that measurable gains will arrive as soon as the remaining employees finish prompting a dashboard to explain where they went.

WASHINGTON — The long-promised AI productivity boom has reportedly entered its most important phase, in which every company in America agrees it is definitely happening while quietly checking the numbers to see whether anything has happened.

According to recent reporting on Federal Reserve research, much of the productivity impact from AI remains theoretical, with one summary noting that AI productivity claims are still overwhelmingly “to come.” This has created a deeply reassuring situation for business leaders, who have spent the past two years restructuring departments, renaming software budgets, and asking employees to become “AI-native” without needing to burden anyone with results.

The finding has been received as good news across corporate America, where executives have long maintained that productivity is best understood not as something that appears in margins, output, or employee capacity, but as a powerful emotional condition experienced during vendor demos.

“AI has already transformed our organization,” said one chief operating officer, gesturing toward a slide showing a glowing orb connected to several nouns. “Before, a software engineer would spend three days writing a feature. Now, that engineer spends one day writing the feature and two days investigating why the AI confidently deleted authentication.”

This is not to say nothing has improved. Software developers widely report that AI tools help them generate code faster, summarize documentation faster, and create tickets faster explaining why the faster code does not work. As Business Insider reported, companies are seeing engineers do more and do it faster, while still waiting for the payoff, a phrase that has become the official motto of the enterprise AI era.

The confusion appears to stem from a minor misunderstanding between “productivity” and “activity.” AI has unquestionably increased activity. There are more pilots, more internal announcements, more Slack channels named after transformation, and more vice presidents able to say “agentic” before 9:30 a.m. In many firms, the number of employees producing AI strategy documents has tripled, a historic efficiency gain in the production of AI strategy documents.

Meanwhile, economists continue their quaint practice of looking for output growth, labor efficiency, and capital returns, as if those metrics can compete with the raw force of a procurement team approving 14 overlapping copilots.

At Trilogy International, where companies have long treated operational leverage as less of a management concept than a household appliance, the productivity debate is likely to sound familiar. ESW Capital’s portfolio companies, Crossover’s global hiring machine, and internal systems like Klair are built around the unsentimental idea that tools should either produce measurable business outcomes or be quietly walked behind the barn. This attitude remains controversial in an industry where many AI initiatives are still in the commemorative fleece vest stage.

Still, defenders argue the productivity boom is real, merely delayed by normal implementation barriers such as data quality, change management, governance, security reviews, employee training, system integration, and the fact that no one can remember which chatbot has the file upload feature. The Center for Data Innovation has argued that the AI productivity argument is effectively over, a conclusion welcomed by many executives who were exhausted from having the argument before the productivity arrived.

In fairness, transformative technologies often take years to show up in economic data. Electricity did not immediately reorganize factories, computers did not instantly flatten management, and the internet required decades before reaching its highest purpose: letting brands arrive late to stupid memes.

AI may follow the same path. The gains may be real, enormous, and unevenly distributed. They may appear first in companies disciplined enough to redesign work instead of simply giving every employee a text box and a mandate to innovate. They may also remain hidden inside a thousand quarterly updates promising that the next quarter is when the platform unlocks scale.

For now, America’s companies remain united behind a simple proposition: AI is revolutionizing productivity, provided productivity is measured by how many people are currently explaining why it has not revolutionized productivity yet.

AI productivity claims are 95% ‘still to come’, Fed finds -  ·  AI is helping software engineers do more — and faster. Compa  ·  The AI Productivity Argument Is Over - inc.com
On This Day in AI History

On August 17, 1998, Google was founded by Larry Page and Sergey Brin as a research project at Stanford University, soon becoming the world's dominant search engine and AI powerhouse.

⬛ Daily Word — Technology
Hint: Internet-based storage and computing infrastructure used by many tech companies.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed