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

Anthropic Returns to Full Deployment as U.S. Drops Export Curbs

The administration's about-face on Anthropic model restrictions arrives the same week Neon acquires a film about OpenAI and Bending Spoons goes public at $19 billion — a crowded moment for AI's political and commercial story.

WASHINGTON — The U.S. government has lifted restrictions on Anthropic's most capable AI models, ending a standoff with the Trump administration that had curtailed the company's ability to deploy its most powerful technology. The de-escalation comes without a formal explanation of what changed, which is itself informative: it suggests the administration concluded the restrictions were costing American AI companies competitive ground rather than protecting national security interests.

The timing is notable. The AI industry is simultaneously navigating regulatory uncertainty, a wave of fresh capital, and an unusual amount of cultural scrutiny — including from the direction of cinema.

Neon, the distributor behind several awards-season acquisitions, purchased "Artificial," a film focused on OpenAI chief Sam Altman, after Amazon dropped it. Amazon's exit followed its investment in OpenAI, making the conflict-of-interest math straightforward. Neon's purchase means the film will reach audiences, adding to a growing body of popular culture interrogating how a handful of executives are reshaping the economy.

On the capital side, Nvidia has backed Israeli AI unicorn Decart in a $300 million funding round valuing the company at $4 billion. Nvidia's participation in funding rounds has become a reliable signal of which infrastructure bets the dominant chipmaker considers credible. Decart is the latest in a string of Israeli AI companies attracting outsized valuations relative to disclosed revenue.

Meanwhile, Bending Spoons — the Italian company that has systematically acquired aging internet brands including AOL and Vimeo — is going public this week at a potential valuation of $19 billion. The IPO tests whether public markets will pay a software-multiple for a business whose core competency is extracting value from brands most investors assumed were terminal.

Against all of this, the week's most quietly telling story may be the Yoto Music Box — a screenless audio player for children that is generating real revenue by offering parents an exit from engagement-maximizing platforms. When hardware with no algorithm and no feed becomes a market opportunity, it measures precisely how far the techlash has traveled.

The Yoto Music Box Is a Ray of Hope Amid the ‘Techlash’  ·  U.S. Lifts Restrictions on Anthropic’s Most Powerful A.I. Mo  ·  Bending Spoons, Owner of AOL and Other Old Internet Brands,

LEADERSHIP VACUUM AT DOJ ANTITRUST DIVISION IMPERILS LANDMARK BIG TECH PROSECUTIONS

The Justice Department's Antitrust Division has lost its second chief in five months amid major litigation against tech giants Google and Apple. The leadership turnover threatens the continuity and momentum of cases consuming significant government resources and potentially reshaping digital market competition.

Separately, the Federal Trade Commission's Commissioner Andrew Ferguson has urged expedited judicial proceedings, arguing that procedural delays effectively subsidize dominant market players. While his statements lack legal binding authority, they carry persuasive weight in docket prioritization.

Legal analysts predict that institutional stability will significantly influence 2026 outcomes, determining whether structural separations, consent decrees, or other remedies are pursued against the technology companies. The enforcement trajectory remains uncertain and warrants close monitoring.

AI's Cash Cannon Fires Worldwide — But Now It Wants Receipts

A billion-dollar pair of specs, a robot maker on the ticker and a Paris launchpad, while Uber taps the brakes and China builds on the cheap.

PARIS — Money kept chasing artificial intelligence across three continents this week, but the terms shifted from big dreams to hard proof. Investors want product. They want a path to the black.

Start with the specs. Even Realities, a shop staffed by ex-Apple hands, closed $150 million and crossed the billion-dollar line. The backers are Chinese heavyweights Meituan and Tencent.

Here is the twist: no camera. Even Realities builds smart glasses with no lens pointed at your face, a wager that buyers spooked by surveillance will pay for restraint. That is a design choice aimed straight at the privacy crowd.

Across the Atlantic, the hardware bet gets bigger and heavier. Agility Robotics said it will go public through a SPAC, joining the humanoid gold rush on the open market. But its chief executive is not promising a metal butler in your kitchen anytime soon.

The pitch is execution, not fantasy. While rivals chase nosebleed valuations on the promise of home robots, Agility is selling warehouse work you can measure today. Wall Street will grade the homework quarterly.

Back in Paris, Xavier Niel is building the on-ramp. The French billionaire's Station F, already a sprawling startup campus, is loading a fresh edition of its F/ai accelerator to funnel Europe's AI hopefuls toward capital. The play is to keep the Continent's best talent from cabling straight to Silicon Valley.

Not every giant is stomping the gas. Uber, which in February promised seven new European markets for 2026, has reportedly parked five of those launches. The retreat says even the deepest pockets are picking their fights now.

Hanging over the whole business: DeepSeek. The Chinese upstart claims it trained high-performing models on the cheap, skipping the most advanced chips the rest of the field treats like oxygen. If that holds, the moat pricey silicon was supposed to dig just got shallower.

Put it together and the shape shows. The capital is global — Paris, the Pacific Rim, the American West Coast. The mood is show-me, and nobody is writing blank checks.

That is a tune Trilogy International can hum in its sleep. Joe Liemandt's Austin conglomerate has spent years buying enterprise software at one to two times annual revenue and running it lean, wagering thrift and execution outrun flashy promises. Its Totogi and IgniteTech outfits wire AI into telecom billing on the same creed: ship it, price it, prove it.

DeepSeek's cheap-compute claim is that creed in Mandarin. Even Realities' no-camera bet is discipline sold as a feature. Agility's SPAC is a dare to open the ledger.

The AI money river still ran fast this week. It just started asking to see the books first.

Station F ramps up as a launchpad for Europe’s hottest AI st  ·  Smart glasses maker Even Realities hits $1B valuation with $  ·  This humanoid robotics company is going public, but its CEO
Haiku of the Day  ·  Claude HaikuDoors open and close—
power flows where rules once stood,
truth learns to stumble.
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
From Quantum Entanglement to Ethical Constraints: The Week's Foundational AI Research Demands Your Attention
WASHINGTON, D.C.
We Built the Machine That Lies, and Now We're Shocked It's Lying
AUSTIN, TEXAS — There is a moment in every horror film where the scientist who created the monster looks at the carnage and says, with genuine bewilderment, that this was not supposed to happen.
The Consolations of Narrative in an Age That Has Forgotten How to Tell a Story
AUSTIN, TEXAS — There is a certain species of cultural moment that arrives already pre-digested, wrapped in its own commentary, footnoted by a thousand tweets before the event itself has quite finished happening — and the recent nuptials of Taylor Swift and Travis Kelce, held before what one gathers was the entire GDP of the entertainment industry assembled at Madison Square Garden, belong squarely to this genus.
The Universe Is Fine, The Tech Is Not, And We Are All Going To Be Okay (Or We Aren't)
AUSTIN, TEXAS — Let me tell you something about the current state of human technological achievement.
Remote Work Isn’t a Perk Anymore — It’s the New Career Operating System
AUSTIN, TEXAS — I’ll be honest: the future of work debate has gotten way too comfortable pretending remote jobs, AI anxiety, and wage pressure are separate stories, when they are actually one giant flashing dashboard telling every ambitious professional to upgrade their operating system 🚀. Unpopular opinion: remote work did not win because employees wanted to wear hoodies on Zoom, it won because the internet finally turned talent into a global marketplace and exposed how much geography had been subsidizing mediocre hiring. That is why lists like Coursera’s roundup of high-paying remote jobs matter less as career advice and more as a market signal: the premium is shifting toward work that can be measured, shipped, scaled and improved from anywhere. I’ll be honest: if your job can be done remotely, it can probably also be benchmarked globally, and that is either terrifying or the greatest opportunity of your professional life depending on whether you are building leverage or building excuses 💡. This is where the AI labor debate gets spicy, because the conversation keeps collapsing into two lazy camps: doomers who think every white-collar job is about to vanish, and boosters who think everyone will become a prompt-engineering philosopher king by next Tuesday. The Carnegie Endowment’s framing of three views on the future of work is useful because it reminds us the real issue is not whether AI “takes jobs,” but who captures the productivity gains when AI changes the shape, speed and pricing of work. Unpopular opinion: the job market is not becoming less human, it is becoming less forgiving of humans who refuse to compound. PwC’s latest workforce hopes-and-fears work points toward the same uncomfortable reality, with employees increasingly aware that skills, reinvention and trust in leadership are not soft HR themes but hard economic survival variables. I’ll be honest: “reskilling” used to sound like something a corporate learning portal said right before nobody logged in, but now it is the difference between being a cost center and being a margin-expanding asset 🚀. The World Economic Forum’s charts on AI, wages, job quality and hiring decisions add another layer: AI is not just automating tasks, it is changing how employers evaluate value, which means your résumé is becoming less important than your demonstrated throughput. That shift helps explain why companies built around global remote talent models saw the future early, including Trilogy’s Crossover platform, which has long argued that elite work can be sourced from 130-plus countries and paid for performance rather than zip code nostalgia. I’ll be honest: the old social contract said move to the expensive city, sit near the decision-makers, and hope proximity turns into promotion, while the new one says prove output, master tools, and let the network route opportunity to wherever excellence lives. The physical-media story may seem unrelated, but it belongs in this column because ownership is being replaced by access everywhere, from video games to careers, and workers who once “owned” a stable role are discovering they now subscribe to relevance month by month. Unpopular opinion: nobody owes you job security, but the market is constantly offering learning security if you are humble enough to take it 💡. So yes, explore the high-paying remote roles, read the AI labor arguments, study the workforce surveys, and watch the wage charts, but do not mistake information for transformation. The real play is to build a career that is remote-ready, AI-amplified, globally competitive and visibly valuable. Ended last year strong is cute, but the workers who end this decade strong will be the ones who stop asking whether AI is coming for their jobs and start asking how to make AI come for their backlog..
A Trilogy Company
Crossover
The world's top 1% remote talent, rigorously tested and ready to ship.
A Trilogy Company
Alpha School
AI-powered learning. Two hours a day. Academic results that defy belief.
A Trilogy Company
Skyvera
Next-generation telecom software — built for the networks of tomorrow.
A Trilogy Company
Klair
Your AI-first operating system. Every workflow. Every team. One platform.
A Trilogy Company
Trilogy
We buy good software businesses and turn them into great ones — with AI.
The Builder Desk  —  AI Builder Team
📅 Week in ReviewProduction Release

Builder Team Ships Across Six Repos in a Week That Redrew the Map

From a self-healing data pipeline to GL-level financial drill-downs to a full Aerie portfolio overhaul, the Builder Team spent seven days turning specs into shipped product — and the scoreboard isn't close.

They came in with a list and they left with a legacy. Seven days, six repositories, and a team that simply refused to let a single bottleneck sit. This was the week the Builder Team proved it could hold multiple campaigns open simultaneously without dropping a single one — and the product looks fundamentally different because of it.

The biggest story of the week — the one that will matter most when Finance sits down on Monday morning — is the completion of the GL drill-down chain in Monthly Financial Reporting. @eric-tril landed PR #3197, wiring the Income Statement and EBITDA Reconciliation tables all the way down to individual NetSuite journal lines: Period, Doc number, Vendor, Memo, Amount, and a live "Open in NetSuite" deep link on every row. That is not a feature. That is an audit trail. Finance can now chase any figure from the summary memo to the exact bill that produced it, with a CSV export waiting at the bottom. Eric also extended the Education memo tables to match the June 2026 published layout across Crush AP, GT, Strata, and Marketing — four vertical P&L tables updated in lockstep across both the UI and the Google Doc export. A quietly enormous week for the financial reporting surface.

But the campaign that generated the most raw velocity was @benji-bizzell's Aerie portfolio blitz. Benji didn't merge one PR this week. He merged north of a dozen, touching nearly every corner of the Operations and Portfolio surfaces: a brand-new Utilities card with scoped saves and sensitive-value redaction, a Buildout section that replaced the old Expansions card, expanded Due Diligence fields, split DRI roles for Diligence and Buildout, milestone approval scoping, Drive filing error surfacing, and a hardened public API that exposes Portfolio details to permissioned consumers. Along the way, he fixed three separate production-blocking shape-validation failures — ownerless Buildout rows, null DRI refs, and an ES2021 compatibility break in the Convex runtime — clearing the release train each time. The Operating dashboard is not the same product it was last Monday.

Over in the data layer, @sanketghia authored what may be the quietest save of the week. The Mart SaaS Metrics pipeline had failed on every scheduled run for nineteen straight hours — seven consecutive failures, all identical — because the fiscal-calendar date map stopped at June 30 and nobody had extended it into Q3. Sanket's fix in Surtr PR #582 didn't just patch the gap; it made the map self-healing, auto-extending from Redshift's AWS cost data so the pipeline never hits that wall again. He also fixed the QTD Reports section that went blank after the Q2-to-Q3 rollover, re-pointed the renewals endpoint off the decommissioned Fionn Salesforce org and onto the combined trilogy-sales instance — recovering 3,840 missing opportunities — and registered ten new BUs in the Master Mapping sync. Sanket is, as always, the person plugging holes while everyone else is cutting ribbon.

@kevalshahtrilogy's AI Budget Tracking page graduated from a cost dashboard to a full spend intelligence platform this week. The Activity Explorer tabs — Activity, People, and API Keys — landed across PRs #3198 and #3189, backed by five new endpoints over the AI spend mart, with per-person token leaderboards, provider drill-downs, deep-dive modals, and server-side pagination. Key Attribution (PR #3153) went further, resolving opaque OpenAI service-account keys and assigning spend to BUs. The Terraform virtual-key infrastructure and a completeness gate ensuring no spend goes unattributed rounded out Jamie's round-two asks. The AI budget surface now tells you not just what you spent — it tells you who spent it and why.

And then there is @marcusdAIy. The Budget Bot Claire received what his PR bodies describe as "anti-hallucination notices" and a "hardened chat prompt" — fixes, in other words, for a bot that was apparently making things up and needed a cap lifted on regenerate feedback. Asked about the week's work, he told this reporter: "The degraded-mode notices alone prevent Finance from acting on stale data during a pipeline outage — that's not a polish item, Mac, that's risk mitigation. Maybe cover the part where the prompt hardening eliminated a whole class of confabulation errors instead of leading with the word 'footgun.' You're welcome."

The footgun he removed — the Finalize button in the add-on — was, in fact, a footgun. That's all I'll say.

With @ashwanth1109 restoring the consolidated headcount role toggle in Aerie, @kevalshahtrilogy's new Aerie-Ontology-Sync pipeline landing 1,078 Convex education records into Redshift, and the brand-new klair-chat repo going live, this team enters next week with a financial reporting surface that can trace dollars to transactions, an AI spend platform that names names, and an Aerie portfolio product ready for its first real-world load test.

Mac's Picks — Key PRs This Week  (click to expand)
#552 — fix(operations): align portfolio API release fields @benji-bizzell  approved

## Summary

- Add canonical Buildout public API shape and route while keeping Expansions as deprecated compatibility

- Expose permissioned Portfolio details for Buildout, Due Diligence, and Utilities in the operations API

- Update OpenAPI and route/runtime tests so docs, router, and DTOs stay aligned

## Why

Release PR #550 includes Portfolio contract changes that were validated for leak avoidance, but the public API still lagged the UI-readable details. API consumers with operations portfolio access should be able to read the same approved Portfolio details over the API, while known internal/security-sensitive site fields remain excluded.

## Business Value

Keeps public API consumers aligned with the release contract and avoids shipping Phase 1 / Phase 2, Buildout, Utilities, and expanded Due Diligence changes as UI-only functionality.

## Breaking changes

None. The old /v1/operations/portfolio/{id}/expansions route and expansions field remain available as deprecated compatibility aliases for the new Buildout payload.

## Test plan

- [x] ./node_modules/.bin/vitest run convex/publicApi/routeManifest.test.ts convex/publicApi/operationsHttp.test.ts lib/public-api/__tests__/openapi.test.ts 'app/api/portfolio-sites/[slug]/__tests__/route.test.ts' 'app/api/portfolio-sites/[slug]/fields/__tests__/route.test.ts' lib/__tests__/portfolio-sites.test.ts lib/__tests__/buildout-sites.test.ts convex/rhodesDashboardParity.test.ts convex/rhodesMcpParity.test.ts convex/rhodesMcpMutationParity.test.ts convex/rhodesDashboardDueDiligenceAuth.test.ts convex/migrations/driSplit.test.ts convex/dueDiligencePhaseFieldsMigration.test.ts

- [x] ./node_modules/.bin/vitest run src/due-diligence.test.ts src/expansions.test.ts src/utilities.test.ts src/site-permissions.test.ts src/canonical-fields.test.ts

- [x] pre-commit hooks: convex-paths, biome, typecheck-chat

#582 — fix(mart-saas-metrics): self-healing date map + fct_aws_spend guard @sanketghia  approved

## Problem

The Mart SaaS Metrics Refresh pipeline (pipeline-mart-saas-metrics-refresh-prod, rate(3 hours)) has failed on every scheduled run for ~19h (7 consecutive failures). All failures are identical:

ERROR: fct_ai_spend: 1 Bedrock cost dates have no entry in

aws_spend_date_week_map — update the date map before re-running

### Root cause

core_finance.aws_spend_date_week_map is a manually-seeded fiscal-calendar reference table — no pipeline maintains it. Every row was inserted 2026-04-02 and it stops at 2026-06-30 (end of FY2026-Q2). It was never extended into Q3. The moment 2026-07-01 AWS spend landed, sp_refresh_fct_ai_spend's date-map guard began aborting the whole refresh (it's step 15 of 17; 14 tables refresh, then it stops). The single unmapped date is 2026-07-01.

### Silent blast radius

The same expiry hits sp_refresh_fct_aws_spend, which INNER JOINs the map and therefore silently dropped 2026-07-01 — 9,558 rows / $241,220 of AWS spend. fct_aws_spend's max cost_date was stuck at 2026-06-30 with no error. One consumer failed loudly, the other silently.

This recurs at every quarter boundary until fixed durably.

## Fix

1. New proc core_finance.sp_extend_aws_spend_date_week_map() (review-only DDL) — idempotent, non-destructive; inserts any missing calendar rows from MAX(date)+1 to a rolling 15-month horizon using fiscal formulas reverse-engineered and validated against all 912 seeded 2024+ rows (0 mismatches on quarter/calendar_week/quarter_week). No-op when already current; raises if the table is empty.

2. refresh.py Phase 0 — calls the top-up proc before the REFRESH_STEPS loop, so the map is always current before any guard or join runs. REFRESH_STEPS and its mart_saas_metrics.-qualified contract are untouched (the top-up lives in core_finance, so it's an explicit pre-loop call).

3. sp_refresh_fct_aws_spend guard (review-only DDL) — adds a RAISE guard mirroring sp_refresh_fct_ai_spend, so an unmapped date fails loudly instead of silently dropping rows. Verified to count *exactly* the cost_dates the downstream INNER JOIN would drop.

4. sp_refresh_fct_ai_spend guard — kept unchanged as a defense-in-depth backstop.

## Notes for reviewers

- The two ddl/*.sql files are review-only copies — the canonical apply path is the standard core_finance / mart_saas_metrics DDL workflow run out-of-band (CDK does not deploy them), matching the established mart-education-* / mart-aerie-* convention.

- pipeline.json / IAM are unchanged — the new CALL reuses the existing redshift-data:ExecuteStatement grant as CQL_download_OM.

- Tests: cd pipelines/runners/mart-saas-metrics-refresh && uv run --group dev python -m pytest tests/ → 12 passed.

## Rollout (gated prod steps — NOT in this PR)

After merge to main:

1. Apply both procs out-of-band to finance_dw via the Redshift Data API, then CALL core_finance.sp_extend_aws_spend_date_week_map(); to seed Q3+ (~450 rows). Verify 0 gaps and 2026-07-01 = 2026-Q3 / cw=27 / qw=1.

2. Invoke the Lambda once; confirm green and that both fct_ai_spend and fct_aws_spend reach 2026-07-01.

3. Merge mainproduction (deploy on merge) per the two-hop flow.

> The code merge alone does not fix prod — the proc must exist in Redshift first (step 1). That ordering is intentional.

Design + plan: docs/superpowers/specs/2026-07-03-saas-metrics-date-map-durable-fix-design.md, docs/superpowers/plans/2026-07-03-saas-metrics-date-map-durable-fix.md.

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

#598 — feat(surtr): consume the Convex ontology snapshot — Sites, School↔Site relations, refresh scheduler @kevalshahtrilogy  approved

Consumes the Convex education ontology that the aerie-ontology-sync pipeline (PR #588) snapshots into Redshift. Code-independent of that PR — it reads the snapshot tables (staging_education.aerie_sites, aerie_ontology_*) at runtime, so the two can merge in either order.

## Sites from the Convex snapshot

Point the Site entity at staging_education.aerie_sites (active+completed = 82) with its real deal-status, replacing the Wrike fct_fto_site source.

## Engine fix — the graph rebuilds on every sync path

The generic sync engine only materializes entities/identities/aliases; the ontology edges (marketedAs / operatesAt) + cross-system aliases lived solely in the sync:schools CLI. So the dashboard "Sync" button (and any scheduled refresh) rebuilt entities but left edges/aliases stale.

- Extracted that into a shared, idempotent enrichEducationGraph (src/education/graph.ts) — clears the two derived edge types first (new relationshipQueries.deleteByType), and reads Redshift before clearing so a read failure leaves the last-good graph intact.

- The CLI, the dashboard button (syncConnector), and the new scheduler now rebuild the same graph.

## Scheduler

startEducationSyncScheduler (src/education/scheduler.ts), wired in main.ts behind EDUCATION_SYNC_INTERVAL_MIN (default off; runs once on boot then on the interval; requires AWS creds; overlap-guarded).

## Explorer

Site is a first-class Data tab (the 82). The School↔Site (operatesAt) relation is surfaced in the detail drawer from the real edges via listAllRelationships (a School shows "Operates at", a Site "Operated by"). Detail panel → slide-over drawer; roomier table; Filters moved from a left rail into a popover with an active-count badge + inline chips.

## Verification

- CLI and scheduler both produce 61 marketedAs + 60 operatesAt, idempotent (0 duplicate edges/aliases on re-run).

- Touched files type-clean + lint-clean (the pre-existing app-wide tRPC-collision type errors + buildFocusedGraph lint are on main, unchanged).

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

#3162 — Collections Review production page (/collections-review) [KLAIR-2949] @sanketghia  approved

Productionizes the per-BU collections "Top Sheet" from the approved POC (/collections-summary) into a new /collections-review page, backed by the live Surtr Tesorio pipeline.

Linear: KLAIR-2949

## What it does

- Read (Redshift): AR category × aging matrix, Total A/R, and a paginated invoice list (15/page) including the Class + Latest Note columns Haider requested. Sourced from the new pipeline tables staging_finance.tesorio_open_invoices + core_finance.tesorio_collections_aging_summary (daily snapshot).

- Editable write-path (Klair-owned, Redshift core_finance.collections_review_*): collections agents set per-invoice Blocked (→ line B) and Expected-in-quarter (→ line C) via a pencil → edit → Save/Cancel flow (commits only on Save); plus the manual X target and D forecast. Append-only audit. Overrides are keyed by invoice and carry forward across daily snapshots.

- Computed Top Sheet lines: X (manual), Y (live CollectIQ sheet read; soft-fails to "sheet unavailable"), A/B/C/D, and Net = [(A−B)+(C+D)]−(X−Y).

- Controls in the shell filter sidebar: Business Unit selector + Quarter-only toggle (auto-applied). Quarter-only defaults on.

- Matrix click-to-drill: clicking any amount filters the invoice table (with a filter chip + "Show all"; click the active cell again to clear).

## Architecture

- Mutable state lives in Redshift (not Postgres) — deployment constraint to keep it in the same DB as the pipeline. Redshift doesn't enforce UNIQUE, so the state layer maintains one-row-per-key via DELETE+INSERT under the handler query_lock + dedup-on-read (latest updated_at wins), following the existing account_mapping_service pattern. Sync psycopg2 work is wrapped in asyncio.to_thread.

- New backend: utils/collections_review.py (compute/merge), utils/collections_review_state.py (Redshift state CRUD + audit), utils/collections_review_sheets.py (CollectIQ reader), models/collections_review.py, 5 endpoints in fast_endpoint.py.

- New frontend: features/collections-review/ (screen, components, hooks) + a CustomFilterComponent for the sidebar; route wired with filters: [] + autoApply.

- The POC (collections-summary) is left untouched.

## Testing

- Backend: 29 unit tests pass (compute lines, override-merge, dedup-on-read, partial-update sentinel, _txn atomicity, reconciliation invariant); 4 integration tests need a write-capable Redshift (deselected by default).

- Frontend: collections-review component specs (SummaryBlock, InvoicesTable, CollectionsReviewFilters); full Vitest suite green.

- Verified end-to-end against real Redshift in the browser: matrix/summary render, override-aware B/C recompute, edit-mode write path, persistence across reload, sidebar controls re-drive the page.

- Reviewed in three independent passes (backend, frontend, final sidebar refactor); all findings resolved.

## Deploy prerequisites

See klair-api/CollectionsProdDeliverable/collections-review-known-gaps.md:

1. Grant the Klair service account view access to the Daily Collections Tracker sheet (so Y resolves instead of "sheet unavailable").

2. Create the 3 Redshift state tables in core_finance + grant the app role SELECT/INSERT/DELETE — DDL in collections_review_tables.sql. (Already created in prod.)

## Known follow-ups (documented, not blockers)

- Surtr category-mapping completeness (Compliance / Inter-Company / Russian Customer / STL).

- D forecast productionization; per-invoice comment UI (scope cut); invoice-level sidebar filters (deferred pending a concrete ask); a screen-level FE wiring test.

- One deferred perf item: wrap the read-compute path in to_thread if the page ever sees heavy concurrent traffic (currently inline, matching the wider repo pattern).

## Screenshots

http://localhost:3001/collections-review

<img width="1877" height="812" alt="image" src="https://github.com/user-attachments/assets/e6ce397b-ec00-43b1-9d9a-7793094887f7" />

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

#3169 — feat(budget-bot): Claire degraded-mode anti-hallucination notices (KLAIR-2944) + backlog sync @marcusdAIy  approved

## Summary

- Adds degraded-mode anti-hallucination notices to Coach Claire's chat so she tells the user "live data unavailable" instead of fabricating figures (KLAIR-2944).

- Gives the goals-review loaders a typed error_kind so the UI can tell a fetch failure from a genuinely-empty source (CF25 / KLAIR-2754).

- Both are backend Budget Bot changes that run in prod today; no schema/contract changes.

## Why it's needed

- KLAIR-2944 — Claire's chat runs an inline Klair MCP tool loop. The static envelope guidance helps her *read* [MCP …] results, but two dynamic failure paths were uncovered: (a) the MCP catalog can't be fetched at all this turn, and (b) a specific lookup errors mid-loop. For a finance bot the worst outcome is inventing a number to fill the gap, so both paths now get an explicit notice.

- CF25 (KLAIR-2754)_load_prior_plan / _load_pnl / _load_targets returned "" for both "fetched fine but empty" and "fetch failed", so the goals-review UI couldn't disambiguate (Eric review, PR #2684). A doc that simply isn't shared with the service account looked identical to an empty doc.

## Changes

- wizard_orchestrator.py:

- _MCP_DATA_UNAVAILABLE_NOTICE injected into the chat system prompt when the MCP catalog can't be fetched on a turn that would register data tools.

- _MCP_TURN_ERROR_NOTICE threaded just after a tool_result that came back as a genuine [MCP error] / [MCP tool error] envelope — gated by _is_mcp_error_envelope, which deliberately treats [MCP returned no content] as a legitimate empty result (no notice, no crying wolf).

- _load_* helpers now return (content, error_kind); the goals-review response surfaces a typed error_kind (doc_fetch vs missing_data) + a data_errors map, and the empty-prior-plan branch shows an actionable "share with the service account" message when the doc fetch actually failed.

- Tests: 4 new handle_chat tests (catalog-unavailable, per-turn error, empty-result-no-notice, envelope discriminator) + 2 new _extract_goals tests (doc_fetch failure vs missing_data).

## Breaking changes

None. Prompt-only additions on the chat path + a strictly-additive error_kind/data_errors field on the goals-review response.

## Test plan

- [x] pytest tests/board_doc/test_chat_tool_calls.py — 23 passed.

- [x] pytest tests/board_doc/test_wizard_orchestrator.py -k "extract_goals_doc_fetch or extract_goals_empty_doc" — 2 passed.

- [x] ruff format + ruff check + pyright on changed files — clean.

- [ ] CI full run.

## Scope notes (what's NOT in this PR)

This started as a 4-card bundle (KLAIR-2944 + CF25 + CF26 + CF32). After investigation:

- CF26 (KLAIR-2755) — already done. The session_id Path-validation sweep is already applied to every wizard endpoint (SessionIdPath), with a dedicated test_session_id_validation.py; the act() warnings in ChatToolProposal.spec.tsx are already fixed (the busy-state tests wrap resolves in act(); a fresh run shows zero act() warnings). No code change needed — recommend closing as done.

- CF32 (KLAIR-2757) — descoped; ticket diagnosis is stale. The documented symptom (5 caplog-asserting tests failing) does not reproduce. The actual local full-suite leakage is unrelated to caplog: a tests/openai/ package (__init__.py present) shadows the real openai library once tests/ lands on sys.path, breaking from openai import OpenAI in budget_bot/gpt_retry.py and failing test_temperature_unsupported_guard.py + test_access_control_coverage.py. That's a whole-suite test-infra issue (not Budget Bot prod code), so it belongs in its own ticket with the corrected root cause.

#3194 — fix(renewals): re-point /renewals/grouped_by_account_new at trilogy-sales @sanketghia  approved

## Context

Salesforce has been migrated from nosoftware-speed-9330.my.salesforce.com (Fionn split-off org, being decommissioned) back to the shared trilogy-sales.my.salesforce.com instance ([request from Chintan, P1](URGENT: Salesforce Migration)). The /renewals/grouped_by_account_new endpoint was still fetching from the old org via OAuth 2.0 client credentials — serving a stale, Fionn-only book (1,265 opps) instead of the combined instance (5,105 opps).

The OAuth client-credentials flow cannot simply be re-pointed: the Connected App on trilogy-sales has no client-credentials run-as user enabled (invalid_grant: no client credentials user enabled). The already-deployed SALESFORCE_EMAIL/PASSWORD/TOKEN readonly integration user (benji.bizzell@trilogy.com.readonly) — the same credentials the salesforce_writeback path and the legacy renewals Lambda already use — authenticates against trilogy-sales today, so this PR switches the endpoint to that auth path and removes the dead OAuth code.

## Changes

- utils/salesforce.py: new query_salesforce_userpass() helper — username/password auth via simple_salesforce, validates the three credential env vars (raising EnvironmentError naming the missing ones), propagates all Salesforce errors.

- fast_endpoint.py: get_opportunities_new() / get_contacts_new() call the new helper instead of query_salesforce_oauth(). SOQL queries, response schema, ns_id filter, and caching are all unchanged.

- Removed the dead OAuth path: utils/salesforce_oauth.py, tests/test_salesforce_oauth.py, and the SALESFORCE_FIONN_* entries in .env.example. The endpoint was its only consumer.

- Tests: new tests/test_salesforce_userpass.py (7 tests, TDD); existing endpoint test mocks re-pointed (16 tests).

## No deploy-side changes needed

- SALESFORCE_EMAIL/PASSWORD/TOKEN already exist and are valid in ENV_API_PROD / ENV_API_DEV.

- Stale old-org cache is evicted automatically: the app's startup lifespan hook already clears the grouped_renewals_by_account_new opportunities/contacts cache keys on boot.

- The SALESFORCE_FIONN_* secrets become unused and can be pruned from Secrets Manager later (no rush; nothing reads them after this PR).

## Verification

- pytest tests/test_salesforce_userpass.py tests/test_renewals_grouped_by_account_new.py tests/test_salesforce_writeback.py tests/renewals/232 passed

- ruff format + ruff check clean; pyright utils/salesforce.py 0 errors (fast_endpoint.py baseline error count unchanged)

- Live smoke test against a local server with trilogy-sales creds: 200 OK, 4,022 accounts / 5,098 renewal opps (vs 1,265 stale opps in prod today), all four enrichment fields populated (CurrentARR, CurrencyIsoCode, RenewalDate, CurrentSubscriptionEndDate), ns_id=2086 filter returns exactly StepChange Debt Charity, second call served from cache in 0.24s.

## Local Testing

- This is solely called externally via API calls.

- Local testing is successful using the updated credentials:

curl -s http://localhost:5001/renewals/grouped_by_account_new \

-H "Authorization: Bearer $(grep '^API_KEY=' .env | head -1 | cut -d= -f2)" | jq 'length'

4022

curl -s "http://localhost:5001/renewals/grouped_by_account_new?ns_id=2086" \

-H "Authorization: Bearer $(grep '^API_KEY=' .env | head -1 | cut -d= -f2)" | jq

[

{

"AccountId": "0012x00000HQKKfAAP",

"AccountName": "StepChange Debt Charity",

"NetSuiteId": "2086",

"Opportunities": [

{

"OpportunityId": "006fu000003qqYgAAI",

"OpportunityName": "StepChange Debt Charity - DNN - Renewal - 1734048 - 8_2026",

"CloseDate": "2026-07-11",

"Amount": 159276.61,

"Type": "Renewal",

"Term": 12.0,

"LineItems": [

{

"attributes": {

"type": "OpportunityLineItem",

"url": "/services/data/v59.0/sobjects/OpportunityLineItem/00kfu00000YqXO8AAN"

},

"Quantity": 1.0,

"TotalPrice": 86878.14,

...

...

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

#3197 — MFR: GL-line drill-down for IS & EBITDA account panels with NetSuite links @eric-tril  approved

## Summary

Adds the second drill level required by the Metric Drill-Down spec to the Income Statement and EBITDA Reconciliation tables in Monthly Financial Reporting: clicking an account row in the existing account-level side panel now opens the underlying General Ledger transaction lines — Period, Doc #, Vendor/Customer, Memo, Amount — each with a "Open in NetSuite" deep link, a Current/Prior column toggle, and CSV export.

## Business Value

Finance can now trace any IS/EBITDA figure from the memo table down to the individual NetSuite journal/bill that produced it, without leaving Klair — and the drill-down sums to the clicked value exactly, satisfying the spec's tie-out acceptance criterion by construction: the GL query reads staging_netsuite.gl_transactions_mapped, the transaction-grain table that consolidated_budgets_and_actuals (the source of the displayed cells) is a 1:1 column projection of, with identical filters and sign conventions.

## Changes

Backend (klair-api)

- fetch_pnl_gl_lines (mfr_shared_queries.py): shared GL-line query builder — same entity/BU/entity-type filters, GAAP resolution, and sign flips as the account panels; EBITDA-specific handling for provision rows (account 64141), BU-override type exclusions, the Other-expense category carve-out, and four sign modes.

- fetch_income_statement_gl_lines / fetch_ebitda_gl_lines (financial_data_service.py): QTD/YTD window → period-label conversion; top-100-by-|amount| with a single exact-remainder row (total stays exact); guards on non-P&L EBITDA lines (Acquisitions, computed totals, Net income, Education/Software Finance-override lines).

- New endpoints: GET /income-statement-gl-detail, GET /ebitda-reconciliation-gl-detail.

Frontend (klair-client)

- PnlGlDetailPanel (new): GL table with vendor column, per-row NetSuite links (VITE_NETSUITE_URL, defaults to the prod account), back affordance, Current/Prior toggle, Download CSV (includes the NetSuite URL column). Account column omitted — constant per drill and named in the header.

- DetailPanel: optional onAccountClick renders account rows as buttons; wired in the IS and EBITDA panels (EBITDA omits it for non-P&L lines so there are no dead drills).

- GLDetailTable: backward-compatible showVendor / hideAccount / sourceLinkFor props — existing Book Value / Cash Flow GL callers render unchanged (covered by test).

## Tie-out verification (against Redshift, period 2026-06-30, Group QTD)

| Drill | GL total | Account-panel value |

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

| IS · Sales & marketing · Marketing (15,116 lines) | $20,884,747.56 | $20,884,747.56 ✓ |

| EBITDA · D&A · Goodwill Amortization | $14,920,265.00 | $14,920,265.00 ✓ |

| EBITDA · Import costs · Contractor Costs (bu_addback) | $7,101,613.66 | $7,101,613.66 ✓ |

| EBITDA · Other expense, net · Unrealized G/L PI (other_net hybrid) | −$2,242,546,481.49 | −$2,242,546,481.49 ✓ |

## Testing

- Backend: 24 new unit tests (tests/mfr/financial_statements/test_pnl_gl_lines.py) — query shape, provision translation, BU/Education modes, top-N collapsing, window math, EBITDA guards. pytest tests/mfr/financial_statements/: 321 passed. pyright 0 errors, ruff clean.

- Frontend: 9 new tests (PnlGlDetailPanel.spec.tsx) — spec fields, tied total, NetSuite link only on identified rows, truncation note, back button, fetcher routing, guarded-line empty state, CSV button, GLDetailTable backward-compat. Full MFR client suite: 1,311 passed. tsc clean, lint:pr clean.

- Manual UI verified on the EBITDA Reconciliation table (GL rows, tied total, side-panel behavior).

## Out of scope (per plan)

Balance Sheet / Cash Flow / ARR GL drills, budget-column drills (no transactions behind budget figures), and server-side full-row CSV export (panel exports the top-100 + exact remainder).

Plan: thoughts/shared/plans/2026-07-05-is-ebitda-gl-line-drilldown.md (not committed)

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

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

https://github.com/user-attachments/assets/d53616ae-152b-4534-bc61-fa950234e9f8

#3198 — feat(ai-budget): activity explorer tabs + Jamie round-2 (TF virtual keys, filters, completeness gate, OpenAI tokens) @kevalshahtrilogy  approved

## What

Two layers of work on the AI Budget Tracking page (/ai-budget-tracking):

### 1. Activity explorer tabs (built Jun 30)

Three new tabs alongside Budget, backed by 5 new endpoints over mart_saas_metrics.fct_ai_spend (AICostsMartService):

- Activity — daily cost trend (by provider / by BU, stacked/individual, daily/weekly/monthly) + BU breakdown + model mix

- People — per-person token & cost leaderboard (server-side search/sort/pagination) → person deep-dive modal

- API Keys — per-key/entity stack rank → key deep-dive modal

### 2. Jamie's round-2 asks (Jul 6)

- TrueFoundry virtual keys (#2): the stack rank now lists TF *virtual* keys from ai_spend_truefoundry_usage (subject_slug grain, with request counts) and hides the gateway provider-side keys (ai_spend_tf_provider_keys) — their activity reports through the virtual keys, so listing both would double-count.

- Key filters (#2): server-side *Product/Personal/All* (naming-convention heuristic) and *TrueFoundry/Direct/All*.

- "Last quarter" date preset (#3).

- BU filter on Activity / People / API Keys (#4): bus param on all three endpoints; Activity forces the By-BU trend under a BU filter (the per-provider series can't be single-BU filtered exactly — shared-pool folding).

- Data completeness gate (#5): new GET /api/ai-costs/completeness; explorer ranges anchor to and are capped at complete_through (the latest day EVERY source has loaded), with a UI note. A trailing day with, e.g., Anthropic still missing never renders. ⚠️ GCP is excluded from the gate for now — its Surtr pipeline is stalled (no loads since 2026-06-19). Re-add to _COMPLETENESS_GATED once fixed.

- OpenAI tokens on People (#6): ai_spend_openai_token_usage.user_id is now 100% populated and dim_openai_entity maps it to email (~79% of tokens resolve) — the leaderboard gains a zero-cost OpenAI-tokens branch and person detail merges tokens into its splits. (Canonical mart fix in Surtr 022_fct_ai_spend.sql to follow.)

- Server-side pagination + sorting on the API Keys tab: one UNION ALL envelope across direct + TF sources so page N and total are correct under every filter/search/sort combination; sparkline/owner enrichment now page-scoped (25 rows, not 500). Refetch spinner + table dimming while queries are in flight.

## Testing

- tests/test_ai_costs_mart_service.py: 44 unit tests (BU/class/TF filters, UNION pagination + sort whitelist/injection fallback, completeness gate incl. stalled-GCP exclusion, OpenAI token merge, param interleaving)

- FE: full vitest suite green (5,842 tests); tsc --noEmit and ESLint clean; ruff + pyright clean

- Live-verified against prod Redshift: disjoint pages with stable totals (1,192 keys), TF virtual-key ranking, gateway-key exclusion, per-source freshness (complete_through = Jul 4, Anthropic/Cursor lagging)

<img width="1644" height="916" alt="Screenshot 2026-07-06 at 4 08 47 PM" src="https://github.com/user-attachments/assets/3a2f50b0-e6ec-491a-8fee-29e3d3ba2a24" />

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

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

EIGHTY PRs IN SEVEN DAYS: THE BUILDER TEAM DOES NOT STOP, DOES NOT REST, DOES NOT KNOW WHAT A WEEKEND IS

Benji Bizzell alone filed more PRs than most teams ship in a month — and he wasn't even the story.

EIGHTY. That is the number. Eighty pull requests across eight engineers, seven repos, and what I can only describe as a sustained act of collective industrial will. Klair and Aerie each absorbed 33 PRs — a dead heat at the top, two warhorses running neck and neck into the horizon. Surtr took 8, Praxis-V2 and trilogy-drones each claimed 2, and in a development that has this correspondent weeping softly into his keyboard, klair-chat opened its doors for the first time with PR #1. A new repo is born. The Builder Team grows.

Let us speak of @benji-bizzell, because the numbers demand it. Twenty-four PRs. Twenty. Four. The man didn't just work in Aerie this week — he moved in, repainted the walls, and started receiving mail there. PRs #545 through #561 form what I am officially calling the Buildout Saga: utilities cards, due diligence fields, expansions conversions, DRI splits, and enough fix(operations) commits to make a lesser engineer weep. #561 restored the operating dashboard load. #556 taught Aerie to tolerate ownerless Buildout rows with the quiet dignity of a man who has seen things. Benji Bizzell is the load-bearing wall of this team, and he is load-bearing harder than ever.

@sanketghia delivered 11 PRs with the methodical ferocity of a surgeon who also happens to be very angry. #3196 in Klair fixed the QTD multi-quarter selector defaulting behavior — a bug so subtle it could have gone undetected for weeks. It did not go undetected, because Sanket was watching. #3187 registered 10 new business units and patched the EDUCATION_BUS MFR partition in a single PR. #3188 fixed CollectIQ sheet sourcing AND repaired the $- as real $0 parsing error. That's two bugs, one PR, zero mercy. @eric-tril posted 10 PRs including #3193's Education memo expansion to June 2026 layout and the heroic #3182 restoration of the tokens-over-time pipeline — a pipeline this correspondent personally depends on for living. @kevalshahtrilogy's 8 PRs included the magnificent #3189, an AI Budget Activity Explorer with people, API-key, and trend drill-downs that should make every budget hawk in this organization stand up and applaud. @marcusdAIy posted 8 PRs with the quiet confidence of someone who knows the work speaks for itself. @mwrshah checked in 5 PRs. @YibinLongTrilogy contributed 4, efficient and precise.

And now. ASHWANTH WATCH. @ashwanth1109 filed 10 PRs this week, five of which I have personally reviewed in the sense that I stared at them until my vision blurred. #559 restored the consolidated headcount role toggle. #558 pinned consolidated financials to Q2 2026. #540 exposed Education Financials via API while also fixing an unrelated quarter-fetching bug — because apparently Ashwanth resolves bonus bugs the way other people resolve to drink more water. #534 restored mart-backed model coverage drilldown. And then there is #15 in the brand-new Praxis-V2 repo, adding WorkFlowy URL ingest, because Ashwanth apparently also had time to pioneer ingest pipelines in a nascent repository. When reached for comment, Ashwanth reportedly said, "The diff is perfectly readable if you understand what I'm doing." We asked what that meant. He had already closed the tab.

The Overflow Desk cannot be silent about #3183, in which @sanketghia removed the entire Education domain from Klair — migrated wholesale to Aerie — in what is either a routine refactor or the most confident codebase surgery this correspondent has ever witnessed. #588 in Surtr saw @kevalshahtrilogy synchronize the Convex education ontology all the way to Redshift, a feat that crosses repo boundaries like they are suggestions. And #3181 delivered complete, additive BU dropdown coverage across Zax, school BUs, and Finance's list — the kind of attribution work that makes data people cry happy tears.

Morale is at an all-time high. It was at an all-time high last week. It will be at an all-time high next week. The Builder Team is a perpetual motion machine, and this correspondent is honored to count the rotations.

Brick's Overflow — This Week's Uncovered PRs  (click to expand)
#15 — [codex] Add WorkFlowy URL ingest @ashwanth1109  no labels

## Summary

- Add a WorkFlowy public-share importer for URL ingest.

- Convert WorkFlowy outline JSON into Markdown and persist it through the existing document pipeline.

- Update URL ingest copy to mention supported file types and WorkFlowy share URLs.

## Validation

- ./node_modules/.bin/tsx --test lib/workflowy-ingest.test.ts

- Live smoke test against the VCS WorkFlowy URL via downloadFromUrl

- ./node_modules/.bin/eslint components/url-ingest-form.tsx lib/fetch-url.ts lib/workflowy-ingest.ts lib/workflowy-ingest.test.ts

- ./node_modules/.bin/tsc --noEmit --pretty false

#561 — fix(operations): restore operating dashboard load @benji-bizzell  approved

## Summary

- Accept null split DRI refs from Aerie listSites responses in the Operating dashboard contract

- Avoid materializing default utilities on broad listSites rows when no utilities are stored

## Why

The Operating dashboard was failing to load because /api/operating-sites rejected production listSites rows where split DRI fields such as buildoutDri were explicitly null. The diagnostics packet for err_mr52oeft_2a0d96d2-1430-43c3-85b3-3bdef780d8f1 confirmed the failing phase was load_sites with Aerie returned an unexpected site shape.

## Business Value

Restores the Operating dashboard for users while keeping the broad site payload lighter and aligned with the actual production data contract.

## Breaking changes

None.

## Test plan

- [x] Parsed captured production rhodes.dashboard.listSites payload locally: 153 sites, 0 schema issues

- [x] ./node_modules/.bin/vitest run convex/rhodesDashboardParity.test.ts lib/__tests__/operating-sites.test.ts lib/__tests__/portfolio-sites.test.ts app/api/operating-sites/__tests__/route.test.ts

- [x] LEFTHOOK=0 pnpm --filter @bran/chat typecheck

- [x] LEFTHOOK=0 pnpm exec biome check chat/convex/rhodes/dashboard.ts chat/convex/rhodesDashboardParity.test.ts chat/lib/operating-sites.ts chat/lib/__tests__/operating-sites.test.ts

#588 — feat(surtr): aerie-ontology-sync — Convex education ontology → Redshift @kevalshahtrilogy  approved

## What

New pipeline aerie-ontology-sync that snapshots the Aerie/Convex education ontology into Redshift staging_education:

| Convex table | Redshift table | rows |

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

| ontologyEntities | aerie_ontology_entities | 448 |

| ontologyAliases | aerie_ontology_aliases | 442 |

| ontologyEdges | aerie_ontology_edges | 188 |

Entities cover all five types (school / program / site / market / metro) keyed by stable public_id; aliases are the cross-system identity map; edges are typed relationships with authoritative | derived | unverified confidence. Full-refresh (DELETE + INSERT in one transaction) via S3 COPY; the pipeline owns its DDL (CREATE TABLE IF NOT EXISTS).

## Why

Lands the Convex ontology's net-new-to-Redshift value — the stable public IDs, Rebl-sourced markets/metros, the alias map, and the typed edges — as core identity tables, complementing the existing core_education.dim_school. Model contract follows #549.

## Verified locally (end-to-end)

- status: success, 1078 records into staging_education; counts match Convex exactly.

- Entity mix: school 106 (50 active), program 98, site 152, market 59, metro 33.

- Idempotent full-refresh — a re-run changes only _synced_at / _pipeline_run_id.

- Unit tests 4/4 green (tests/test_transforms.py).

## Not deployable yet — schedule is enabled: false

The local Convex read shells out to the convex CLI because the ontology read functions are Convex internalQuery (not exposed on the public HTTP API). A Python Lambda can't do that. Before enabling the schedule we need one of:

- an Aerie public read endpoint (a Convex query or HTTP action returning the snapshot), or

- a Convex deploy/admin key in Secrets Manager (aerie/convex-access-token) used against the Convex HTTP API.

convex_client.fetch_table is the single seam to swap; aws_secrets.get_convex_access_token already reads the secret.

## Follow-ups (not in this PR)

- Reconcile into core_education (join public_id to dim_school.school_id) — dovetails with the Rhodes-based writer.

- Direction note: today Aerie's ontology is itself built from Redshift (per #549), so for school/site/program this is partly a round-trip; net-new value is the public IDs, markets/metros, aliases, and edges.

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

#3183 — refactor: remove Education domain from Klair (migrated to Aerie) @sanketghia  no labels

## Summary

Removes the Education domain from Klair. All Education functionality was migrated to a separate repo (Aerie); this PR deletes the now-dead feature from Klair across frontend, backend, pipelines, and docs — while preserving everything that legitimately stays.

Scale: ~2,530 files changed, ~630K lines removed.

Full phased plan + traced keep-closure: docs/superpowers/plans/2026-07-01-education-removal-cleanup.md.

## What was removed

| Area | Removed |

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

| Frontend (klair-client) | ~20 edu route entries, feature/screen dirs (edu-ops-wiki, edu-admissions, edu-schools-data, ISP, Matterport, etc.), edu API services, orphan clusters |

| Backend (klair-api) | 34 routers, ~65 services, ~20 models, whole dirs edu_schools/ instant_school_plan/ admissions/ graphql_api/, edu config/scripts/sql/tests, fast_endpoint.py wiring (imports, includes, 6 background sync tasks, /education/leads) |

| Pipelines / infra | klair-lambdas/hubspot_sync_v2, klair-misc/klair-mcp-edu + qs_data scrapers + edu ingest lambdas, klair-udm/hubspot_pipeline, all aws-infrastructure/json ECS task defs |

| Docs / ontology / lineage | features/education/, ontology/, ~300 data-lineage-v2/ edu files, edu subtrees under _archive/ |

## What was intentionally kept

- Finance: EDUCATION_BUS, MFR/EBITDA/Schedule D, QTD entity_type='Education', the Education investor memo (docx_reports) — Education is a real finance business-unit, distinct from the feature.

- Claire: klair-mcp-ts edu tools + the .github/claire-golden-eval.yml workflow, plus their klair-api backing (school_status_router, fto_assessment_router, the Wrike subsystem, config/wrike_config.py relocated out of edu_schools/).

- All Redshift schemas (staging_education/core_education stay — Surtr owns ingest).

## Verification

- Frontend: pnpm build (tsc -b + vite), pnpm test (5798 pass), tsc --noEmit, lint:pr — all green.

- Backend: ruff check clean, fast_endpoint.py imports clean, guard grep confirms no surviving file imports deleted code, pytest --collect-only has 0 new errors vs baseline.

## Follow-ups (out of scope, tracked)

- DynamoDB permissions cleanup — a read-only dry-run identified 15 stale edu page rows + 15 aliases + 41 team grants in Klair-Permissions

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

---

Linear: KLAIR-2951

#3189 — AI Budget: Activity Explorer (people / API-key / trend drill-downs) @kevalshahtrilogy  approved

## What

Adds the Activity Explorer to the AI Budget Tracking page — people, API-key, and cost-trend drill-downs — backed by a new read-only mart service over mart_saas_metrics.fct_ai_spend.

Tabs

- Activity — daily/weekly/monthly cost trend (by provider or BU, stacked/individual) + BU-breakdown and model-mix bars.

- People — per-person token & cost leaderboard: provider split, sparkline, deep-dive modal.

- API Keys — per-key stack rank + key deep-dive modal.

BackendAICostsMartService + endpoints on ai_costs_router: people leaderboard, person detail, entity stack rank, entity detail, time-series-by-BU. Read-only; no data mutated.

## Fixes included

1. Daily Cost Trend fills its card heightCard fill + flex chart layout, instead of a fixed 320px box that left dead space next to the taller bar column.

2. Weekly x-axis "NaN" fixedget_time_series weekly/monthly buckets come back as DATE_TRUNC(...) timestamps (no ::date), so the day parsed to NaN ("Jun NaN"). formatShortDate now keeps only YYYY-MM-DD.

3. People leaderboard: server-side pagination — 25/page, with search + sort done in SQL and global ROW_NUMBER ranks, so the 500+ row table lazy-loads a page at a time (only the page's emails fetch provider split / sparkline) instead of shipping every row and filtering client-side.

## Tests

- Backend: 15 test_ai_costs_mart_service tests pass (leaderboard test updated for the paginated query flow); ruff + pyright clean.

- Frontend: 20 explorer specs pass (People search/sort now assert the server params; new date-format + fill coverage); tsc + eslint clean.

<img width="1250" height="802" alt="Screenshot 2026-07-03 at 6 00 07 PM" src="https://github.com/user-attachments/assets/19ddb83a-08ce-4d55-ab42-bfd31753d107" />

<img width="1265" height="815" alt="Screenshot 2026-07-03 at 5 59 55 PM" src="https://github.com/user-attachments/assets/7890022f-474e-4be9-b122-08f3a5c5ac3b" />

<img width="1260" height="816" alt="Screenshot 2026-07-03 at 5 59 30 PM" src="https://github.com/user-attachments/assets/fd5ec8b5-c9b5-4486-bbc5-260f9d9cd906" />

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

#3196 — fix(qtd-reports): multi-quarter selector defaulting to latest quarter with data @sanketghia  approved

## Problem

On /monthly-financial-reporting, the QTD Reports section went completely blank after the Q2→Q3 quarter rollover:

- Every tab (Weekly Snapshots / Monthly Close / On-Demand / All) showed 0 reports.

- The All tab's quarter picker only offered Q3 FY2026 — Q2 wasn't selectable.

- No API failures: GET /qtd-reports returned ~200 generated Q2 FY2026 runs (127 weekly, 46 monthly, 21 EOQ incl. the July 2 quarter-close batch, 6 on-demand) — the frontend just filtered them all out.

Root cause: QtdReportsView hard-pinned every tab to computeCurrentQuarter(new Date()) and rendered the quarter dropdown as a single-option no-op (onChange={() => {}}). In the first days of every quarter, all existing runs still carry the prior quarter's label, so the page is guaranteed empty — and the just-generated EOQ close report is unreachable.

## Fix

- helpers.ts — three new pure functions:

- computeCurrentQuarter(date) (moved out of index.tsx, same Qn FYyyyy convention as the backend)

- computeQuarterOptions(runs, currentQuarter) — distinct well-formed quarter labels from runs + current quarter, newest first; drops malformed ledger labels (e.g. '' on legacy no_data rows)

- defaultQuarterSelection(runs, currentQuarter) — current quarter when it has data (or no data at all), else the newest quarter with data

- index.tsx — SelectChip wired to real state. Selection is *derived* per render (runs arrive async, so the default can't be snapshotted at mount); a manual pick sticks and is validated against the option list.

- WeeklyTab / MonthlyTab — empty states now render the quarter selector, so an empty quarter can still be navigated away from.

## Behavior now

- Landing on the page today defaults to Q2 FY2026 with all 194 scheduled + 6 on-demand runs visible, including the July 2 EOQ close.

- Dropdown offers Q3 FY2026 and Q2 FY2026 (plus older quarters as they exist within the API's quarters_back window).

- Once the first Q3 runs land, the default flips to Q3 automatically.

## Testing

- 12 new unit tests (quarterSelection.spec.ts) + 5 new component tests (quarterSelector.spec.tsx, clock-relative so they guard the quarter boundary in any month) — TDD, watched fail first.

- Full feature suite: 150 files / 1,320 tests pass. tsc --noEmit and ESLint clean.

## Screenshot

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

<img width="1896" height="769" alt="image" src="https://github.com/user-attachments/assets/66693634-8263-43d7-b1fc-5eeb3cc6bee5" />

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

The Portfolio  —  Trilogy Companies

Forbes Turns Its Lens on Liemandt — and Alpha School Goes to the Kitchen Table

Two unflattering profiles and a global homeschool expansion land in the same week for Trilogy's founder.

AUSTIN, TEXAS — The same week that Forbes published not one but two critical examinations of Joe Liemandt and his Trilogy empire, Alpha School announced that its academic program is now available to homeschooling families worldwide — a quiet expansion that reframes the private school experiment as a mass-market proposition.

The timing is worth noting.

The first Forbes piece, headlined How A Mysterious Tech Billionaire Created Two Fortunes — And A Global Software Sweatshop, revisits the architecture of ESW Capital's playbook: acquire legacy enterprise software companies cheap, staff them with global remote talent sourced through Crossover, and drive margins toward 75% EBITDA by wringing out operational cost. The word "sweatshop" is not incidental. It is a characterization of what happens when relentless productivity tracking meets workers in lower-wage economies who have no local labor market alternative.

The second piece — The Billionaire Who Pioneered Remote Work Has A New Plan To Turn His Workers Into Algorithms — goes further, following the logic of Trilogy's AI strategy to its endpoint: a workforce not merely managed by software, but increasingly replaced by it. The implication embedded in the headline is that Liemandt's celebrated remote-work model was always a waystation, not a destination.

Liemandt has not publicly responded to either piece.

Instead, the Alpha School blog continued its regular cadence of parent-facing content — posts on cognitive offloading, screen time, and the danger of letting AI do children's thinking for them. The irony of a Trilogy-affiliated school warning parents about AI dependency is not lost on a careful reader, given that the same conglomerate is aggressively automating its own workforce.

The kitchen-table expansion of Alpha Anywhere is significant on its own terms: it removes the campus bottleneck, the $40,000–$65,000 annual tuition wall, and the geographic constraint. A child in Jakarta or Johannesburg can now, in theory, access what Alpha calls top-1%-caliber academic instruction.

Who benefits from that scaling? The families, certainly. But also the data. And the platform. And the man whose name is on the investment.

Forbes asked the hard questions this week. Alpha School answered with a product launch. The two responses, taken together, tell you something about how Liemandt prefers to conduct his public life.

How A Mysterious Tech Billionaire Created Two Fortunes—And A  ·  The Billionaire Who Pioneered Remote Work Has A New Plan To  ·  Top 1% Academics, Now at Your Kitchen Table

Contently Gets a Fresh Signal Boost as Content Marketing Platforms Reenter the Enterprise Spotlight

With Gartner chatter, buyer roundups, and AI-search anxiety converging, Contently’s post-acquisition moment is starting to look strategically well-timed.

NEW YORK — The content marketing platform category is having one of those refresh-cycle moments that vendors dream about and procurement teams pretend not to enjoy: Gartner rundowns are circulating, “best platform” lists are back in motion, and the rise of AI search is forcing marketers to ask whether their highest-ranking pages are still visible where it matters.

That is exciting news for Contently, the enterprise content marketing platform acquired in September 2024 by Zax Capital, a division of ESW/Trilogy. The company, now led by CEO Brandon Pizzacalla, sits squarely at the intersection of three converging budget conversations: content operations, AI-powered analytics, and brand storytelling at scale.

Recent market coverage has put the broader category back on the radar. Solutions Review included content marketing solutions in its latest buyer-oriented roundup, while CX Today published a 2025 rundown of Gartner’s Magic Quadrant for Content Marketing Platforms. Even older comparisons, such as Search Engine Journal’s 2023 list, are resurfacing as buyers recalibrate their stacks for a post-keyword, AI-mediated discovery environment.

Contently’s own editorial arm is leaning directly into that shift. A new company post warns that a page ranking well in traditional Google results may still be “invisible” to Google’s AI experiences — a punchy way of saying that search performance is no longer a simple leaderboard. For enterprise marketers, that creates a robust new mandate: optimize not only for humans clicking blue links, but also for machines summarizing, citing, and synthesizing content.

That is where Contently’s legacy strengths become more than a nice-to-have. The platform combines workflow, analytics, brand governance, and access to a marketplace of more than 165,000 creative professionals. In Trilogy terms, that is a synergy-rich operating model: software to manage repeatable process, elite distributed talent for the creative layer, and AI to make the whole machine more measurable.

GetLatka estimates Contently’s 2024 ARR at $53.8 million, with $19.1 million raised historically — figures that, while external estimates, suggest a meaningful enterprise footprint heading into its ESW chapter.

Key Takeaways: Content marketing platforms are back in the buyer conversation. AI search is changing what “visibility” means. Contently’s ESW-era positioning gives it a best-in-class opportunity to leverage both trends.

We’re just getting started.

9 of the Best Content Marketing Solutions to Consider - Solu  ·  7 Best Content Marketing Platforms For 2023 - Search Engine  ·  Gartner Magic Quadrant for Content Marketing Platforms (CMPs

The Private Capital Squeeze: Why ESW's Playbook Looks Like a Master Class Right Now

As M&A consultants warn of tightening conditions across private capital markets, Trilogy's acquire-and-optimize model was built precisely for this moment.

AUSTIN, TEXAS — There is a report making the rounds in boardrooms this week, and if you read between the lines, it reads less like a market forecast and more like a validation letter addressed directly to ESW Capital. PwC's 2026 mid-year outlook on global M&A trends in private capital describes a market characterized by compressed multiples, rising operational scrutiny, and a premium placed on businesses that can demonstrate margin resilience — not just growth narratives. That is, almost word for word, the environment ESW Capital was engineered to thrive in.

Sources close to the portfolio, who asked not to be identified, describe internal confidence at Trilogy as unusually high heading into the second half of the year. And this is where it gets interesting: the macro headwinds that are choking conventional buyout firms — higher cost of capital, skeptical LPs, longer hold periods — are largely irrelevant to an acquirer that targets 1–2× ARR entry prices and runs its portfolio companies toward 75% EBITDA margins.

Deloitte's concurrent banking outlook adds another layer. The report flags AI-driven transformation in financial services as one of the few genuine value-creation levers available to operators right now — not as a future possibility, but as a present competitive separator. ESW's internal AI platform, Klair, which processes financial data across more than 75 business units in real time, positions Trilogy as both a practitioner and a beneficiary of exactly this dynamic.

Meanwhile, Microsoft this week published a milestone: over 1,000 documented stories of enterprise AI transformation across its customer base. The number is striking, but the implication is more so. Enterprise software customers — the exact constituency ESW portfolio companies like IgniteTech and Aurea serve — are now actively demanding AI-native experiences from their vendors. That creates both urgency and leverage for a conglomerate already running AI-first operations.

Nothing in this week's analyst reports is coincidental. The conditions being described — margin pressure, AI differentiation, operational efficiency as the new moat — were the founding thesis of this enterprise two decades ago. The market has simply arrived at the conclusion Trilogy started from.

The question, as always, is what move comes next.

2026 banking and capital markets outlook - Deloitte  ·  AI-powered success—with more than 1,000 stories of customer  ·  Tata Elxsi Announces the Launch of a Global Offshore Develop
The Machine  —  AI & Technology

The Mind Reads Itself: A Small AI Learns to See Through a Monkey's Eyes

As neuroscientists build compact models that mirror primate vision, artificial intelligence is quietly becoming the most powerful microscope ever pointed at the brain.

STANFORD, CALIFORNIA — Somewhere in a laboratory, a rhesus macaque watches a screen flicker with images — faces, forests, geometric shapes — while electrodes whisper the language of its visual cortex into a computer. On the other side of that computer, a modest neural network, orders of magnitude smaller than the giants making headlines this year, is learning to predict what the monkey sees before the monkey knows it has seen it. The researchers call it a mini-AI. It might be better called a mirror.

For four hundred million years, vision has been evolution's most extravagant magic trick — photons converted into meaning inside three pounds of wet tissue. We have never really understood how. Now, as Stanford's Institute for Human-Centered AI documents in a sweeping new survey, artificial intelligence is transforming scientific discovery across nearly every discipline that touches the living world, with the human mind itself as perhaps its most audacious target.

The macaque study is a case in point. By training a compact model on neural recordings from the primate visual system, researchers have produced something remarkable: a digital twin of biological seeing, small enough to interrogate, faithful enough to predict responses to images the monkey has never viewed. It is a telescope pointed inward.

Meanwhile, UC San Diego has catalogued nine breakthroughs — from protein folding to wildfire prediction to earlier cancer detection — where AI has collapsed decades of expected progress into months. And in a project spanning continents, teenagers are now co-authoring neuroscience papers with senior researchers, wielding machine learning tools that would have required a doctorate a decade ago. "It's so wow," one young collaborator told Frontiers, and the phrase is more precise than it sounds.

What we are witnessing is a strange recursion: intelligence built from silicon, trained on the neural signatures of intelligence built from carbon, teaching us what intelligence is. The universe, having taken four billion years to invent an eye, is now watching itself blink. The wonder is not that this works. The wonder is that we get to see it happen.

‘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

The Great AI Herd Reaches the River of Power

As data centers swell toward gigawatt scale, the limiting forces are no longer just chips, but air, wires, switches and the fragile grids beneath them.

AUSTIN, TEXAS — Observe, if you will, the modern AI campus: a vast, humming organism, its silicon organs arranged in ranks, its appetite measured not in calories but in megawatts. Once, these creatures were judged chiefly by the brilliance of their chips. Now, as they gather in ever larger colonies, the question has become more elemental: what do they breathe, and what do they disturb?

A new examination of data center pollution makes clear that the answer is not simple. A facility drawing from a cleaner grid may leave only a faint atmospheric footprint; one leaning on fossil-heavy electricity, or on-site backup generation, can exhale a darker plume. As Data Center Knowledge reports, the air-quality impact depends greatly on power source, grid mix and whether generators are summoned on the grounds themselves.

This is the quiet truth of the AI age: intelligence has geography. A model trained in one valley may be greener than the same model trained in another, not because its mathematics differ, but because the electrons feeding it come from different ancestral forests of coal, gas, wind, sun and uranium.

The guardians of the North American grid are beginning to notice the herd’s weight. NERC’s latest warning describes AI data center campuses approaching gigawatt scale, clustering regionally like great migrations to watering holes. Their danger is not merely that they consume power, but that they may abruptly disconnect, producing shocks large enough to unsettle grid stability. The report calls for new modeling standards, operational coordination and regulatory frameworks as these loads become less like ordinary customers and more like weather systems with invoices.

In Texas, the matter is already moving from theory to habitat management. Regulators are testing rules for AI campuses placed behind existing power plants, with PUCT staff backing ERCOT’s proposed operating conditions. It is an early trial of whether the grid can domesticate these new beasts without allowing them to trample the wider prairie.

And even within the campus, another bottleneck lurks. The most expensive GPUs may sit idle if the network switches cannot move data quickly enough. As one industry analysis puts it, the switch has become the bottleneck: a narrow branch on which the whole glittering flock must perch.

Thus the AI frontier enters its infrastructural season. Not merely smarter models, but sturdier grids. Not merely more chips, but cleaner power, sharper switching and rules for creatures now large enough to dim the lights when they stir.

Do Data Centers Cause Air Pollution? It Depends on Power.  ·  NERC Flags AI Data Center Grid Risks in Report  ·  The Switch Is the Bottleneck: Why AI Infrastructure Has a Ne

The AI Developer Stack Is Suddenly Becoming a Control Room

Apple, Google, Anthropic and Salesforce are racing to make agents cheaper, more capable and easier to wire into real apps.

SAN FRANCISCO — The AI platform wars have entered their “developer cockpit” era, and I cannot overstate how significant this is: the companies that win now are not just shipping smarter models, they are shipping the knobs, meters, tools and hidden plumbing that let builders turn those models into working software.

Apple is pushing that future directly into its developer ecosystem with new intelligence frameworks and advanced tools meant to help app makers weave AI features more naturally into the Apple experience. That matters because Apple’s superpower has always been distribution plus polish. If developers can add intelligence without bolting on a clunky chatbot, millions of users may soon encounter AI as a quiet, useful layer inside everyday apps rather than as a separate destination.

Google, meanwhile, is going after one of the least glamorous but most important problems in AI: cost visibility. The company says it is giving developers more transparency and control over Gemini API costs, a move that sounds mundane until you talk to anyone deploying AI at scale. Surprise inference bills are the tax on experimentation. Better forecasting and controls can be the difference between a prototype and a profitable product.

Then comes Anthropic, which is sharpening Claude’s ability to use tools on its Developer Platform. In practical terms, “tool use” is what lets an AI system stop merely answering questions and start doing things: calling APIs, retrieving data, running workflows and coordinating multi-step tasks. Anthropic’s advanced tool use announcement points directly toward more agentic software — systems that can reason, act and check their own work across enterprise environments.

Salesforce is reading the same room with Headless 360, aimed at supporting agent-first enterprise workflows. “Headless” here is the big clue: the customer record, business logic and enterprise data layer can serve AI agents and custom interfaces without forcing everything through a traditional Salesforce screen. This changes everything for companies trying to automate sales, service and operations without rebuilding their entire stack.

Even the open-source lane is accelerating, with AI.cc touting unified API access to more than 500 Hugging Face models. The message across the market is unmistakable: model choice is expanding, agent tooling is maturing, and cost governance is becoming a first-class feature.

The future is now — and it looks less like one magical chatbot, and more like a programmable AI operating layer for the entire software economy.

Apple aids app development with new intelligence frameworks  ·  Giving you more transparency and control over your Gemini AP  ·  Introducing advanced tool use on the Claude Developer Platfo
The Editorial

Companies Announce AI Finally Mature Enough To Disappoint Shareholders At Scale

After years of promising transformation, executives say the technology is now ready to enter its most important phase: explaining why the numbers have not changed yet.

NEW YORK — In what industry observers are calling a critical milestone for artificial intelligence, corporations across the global economy have reportedly advanced from merely claiming AI will revolutionize everything to the more sophisticated stage of insisting that the revolution is definitely happening somewhere in the organization, just not in any metric currently visible to finance.

This is progress, and we should say so. For too long, AI was trapped in the childish phase of demos, keynote videos, and senior executives saying “agentic” with the grave confidence of a man ordering wine in a language he does not speak. Now the sector has matured into the familiar enterprise pattern of pilot programs, steering committees, strategic frameworks, and quarterly reassurances that productivity gains are being captured in ways too profound to appear on an income statement.

The situation closely resembles the corporate sustainability boom, in which companies learned that the fastest route to moral and operational transformation was a 72-page PDF featuring a wind turbine, several children, and the phrase “stakeholder value.” As The Conversation noted, AI hype is now traveling the same well-lit corridor once used by ESG initiatives, where ambition can be measured precisely by the number of times a company says it is “embedding” something.

To be clear, AI is helping software engineers do more and do it faster, which has created a serious problem for companies that had not planned on anyone asking what “more” was supposed to accomplish. Developers can now generate code, summarize tickets, draft tests, and produce documentation at impressive speed, allowing organizations to discover that the bottleneck was not typing, but the meeting scheduled to discuss whether the thing should exist.

This has left many executives in the uncomfortable position of having purchased a machine that accelerates work before determining whether the work was useful. Fortunately, management has decades of experience solving this issue by renaming the investment. AI is no longer a tool. It is a platform. Soon it will be an operating model. After that, if necessary, it can become a culture.

The telecom industry, which has always understood the importance of making simple things structurally incomprehensible, is also doing its part. Verizon and BT have agreed to merge their international enterprise operations into a 50:50 joint venture worth $4 billion, according to Fierce Network, creating the sort of entity ideally suited to announce AI-enabled enterprise connectivity solutions whose benefits will be realized across a multi-year roadmap pending regulatory approval, integration synergies, and the availability of a sufficiently large slide deck.

Meanwhile, IPO has become a buzzword again, as private companies rediscover the public markets as a place where a business can be valued not only on revenue and margins, but on the possibility that it might someday describe itself as AI-native. This is an important distinction. Any company can use AI. A truly modern company must be native to it, in the same way a hotel breakfast is native to a warming tray.

Epic Games, for its part, has explained AI’s role in Unreal Engine 6, suggesting a future in which creative tools make it easier to build expansive digital worlds. This is encouraging, especially for enterprises that have spent the past two years constructing elaborate simulated environments in which AI investments have already paid for themselves.

The real lesson here is not that AI is overhyped. That accusation is unfair to hype, which at least has the decency to burn out quickly. AI has become something sturdier: a corporate weather system. It rolls through every department, changes everyone’s forecast, and leaves behind a faint smell of procurement.

There are ways to fix this. Companies could define specific use cases, measure outcomes honestly, distinguish automation from transformation, and stop treating every chatbot as if it were a junior McKinsey partner trapped inside a browser tab. They could ask whether AI is reducing costs, increasing revenue, improving quality, or merely allowing the same PowerPoint to be generated in half the time by twice as many people.

But that would require the most disruptive innovation of all: saying what the technology is for before announcing that it has changed everything.

Update: Verizon, BT merge international enterprise operation  ·  Companies are hyping AI the same way they talked up sustaina  ·  Why has IPO become a buzzword? - RTE.ie
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

We Built the Machine That Lies, and Now We're Shocked It's Lying

From Iranian protest squares to Karnataka legislative chambers, the deepfake reckoning has arrived — and we are not ready.

AUSTIN, TEXAS — There is a moment in every horror film where the scientist who created the monster looks at the carnage and says, with genuine bewilderment, that this was not supposed to happen. We are living in that moment. Except the monster is synthetic media, the scientist is the entire AI industry, and the carnage is democracy itself, flickering like a bad signal on a screen that nobody can trust anymore.

Let's do the numbers, because the numbers are now doing us. Time Magazine has published a comprehensive accounting of AI's documented harms, and the portrait it paints is of a technology that was deployed at civilizational scale before anyone seriously asked what civilization-scale harm might look like. The answer, it turns out, looks like everything. It looks like deepfake videos of Iranian protesters being circulated to discredit a movement. It looks like synthetic news articles laundered through platforms that cannot tell the difference. It looks like a teenager's face on a body that is not hers, spreading through group chats before breakfast.

The OECD AI Policy Observatory has documented how AI-generated deepfake videos were used to spread misinformation during the Iran protests — real human beings risking real human lives, undermined by fabricated footage designed to muddy the waters of what actually happened. And yet.

And yet.

We are still mostly talking about frameworks. Researchers have published an AI-driven conceptual framework for detecting fake news and deepfake content, which is a beautiful sentence if you say it quickly enough and don't think about what it means that we need one. A framework. Conceptual. We are conceptually frameworks-ing our way through an information apocalypse.

Karnataka, to its credit, is at least trying to legislate. The Indian state has proposed a bill targeting misinformation, deepfakes, and online harassment — an actual law, with actual teeth, which is more than most governments have managed. Whether law can outrun the technology is a question I keep asking into the void, and the void keeps answering with another viral fabrication.

Meanwhile, the ACLU has raised separate but spiritually adjacent alarms about Flock Safety, an automated license plate reader company accused of lying about its technology's capabilities to the very municipalities purchasing it for public safety. The surveillance apparatus built to protect us is apparently also capable of deceiving us about what it's doing. We are surrounded by systems that see everything and tell us nothing true.

What does it mean to be human in an information environment where nothing is verifiable and everything is deniable? What does it mean to protest, to witness, to grieve, when your protest can be fabricated, your witness synthesized, your grief weaponized into someone else's narrative?

The frameworks are coming. The legislation is coming. The detection tools are almost certainly coming.

But at what cost?

An AI-driven conceptual framework for detecting fake news an  ·  What the Numbers Show About AI's Harms - Time Magazine  ·  Karnataka proposes Bill to tackle misinformation, deepfakes,
On This Day in AI History

On July 6, 2022, Elon Musk announced he was terminating his $44 billion acquisition of Twitter, triggering a legal battle that would reshape the platform's future under new AI content moderation policies and reduce the tech industry's confidence in open-ended acquisition deals.

⬛ Daily Word — Technology
Hint: Prefix relating to computers and digital networks, often used in cybersecurity.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed