Vol. I  ·  No. 190 Established 2026  ·  AI-Generated Daily Free to Read  ·  Free to Print

The Trilogy Times

All the news that's fit to generate  —  AI • Business • Innovation
THURSDAY, JULY 09, 2026 Powered by Anthropic Claude  ·  Published on Klair Trilogy International © 2026
🖶 Download PDF 🖿 Print 📰 All Editions
Today's Edition

Europe's AI Deficit Lays Bare a Continent Falling Behind in the Race That Matters Most

Of 3,000 AI systems in global use, only 30 are European — and not one clears the EU's own regulatory bar.

BRUSSELS — The numbers are stark enough to print without commentary. Of roughly 3,000 artificial intelligence systems currently deployed across global markets, only 30 originate from European companies. None of them meet the standards set by the European Union's own AI Act. The bloc that wrote the rulebook, it turns out, cannot field a team to play by it.

The warning landed this week from EU officials monitoring the continent's technology competitiveness, and it carries the particular sting of self-indictment. Europe accounts for barely one percent of the AI systems that businesses, governments, and consumers have actually chosen to adopt — a market share so thin it disappears against the dominance of American and Chinese platforms.

The gap is not merely statistical. It reflects years of regulatory caution that slowed domestic investment while Silicon Valley and Shenzhen moved fast. The AI Act, designed to make Europe the gold standard for safe and trustworthy artificial intelligence, now reads less like a competitive advantage and more like a fence Europe built around an empty yard.

For American technology conglomerates with deep European enterprise footprints — including Austin-based Trilogy International and its Crossover talent platform, which sources engineers across more than 130 countries — the EU's admission is both a market signal and a structural opening. European enterprises hungry for AI tooling are not waiting for a domestic champion to emerge. They are buying from whoever ships.

The EU's own economists have called for emergency investment in sovereign AI infrastructure: compute, talent pipelines, and foundation model development. The timeline is unforgiving. Every quarter that passes without a credible European large language model is another quarter in which American and Chinese platforms deepen their lock on European data, European workflows, and European decision-making.

Thirty systems. None compliant. The continent that legislated the future finds itself living in someone else's.

As IBS 2026 Approaches, LEPAS Unfolds Its “Elegance Moves th  ·  Korn Ferry Acquires Trilogy International - Hunt Scanlon Med  ·  Key appointments: Trilogy Hotels, Marriott International - h

AI Infrastructure Giants Jockey for Position as Funding Wars Heat Up

Meta has broken ground on a massive 1-gigawatt data center in Sturgeon County, Alberta—its first facility in Canada—signaling the tech giant's commitment to the AI infrastructure arms race. The C$13 billion project requires industrial-scale electricity, land, cooling and grid access to support next-generation AI systems.

Meta isn't alone in this competition. Nvidia is leading a $500 million funding round for data center company Firmus, expanding its strategy beyond selling chips to helping build the infrastructure where GPUs operate. This vertical ecosystem approach positions Nvidia to support future demand for its own processors.

Memory maker Micron remains a key player as investors track how AI-driven demand for high-bandwidth memory could drive growth over the next three years. The infrastructure season is underway, with major tech companies investing heavily in the physical backbone required to power artificial intelligence systems.

AI Funding Frenzy Defies Gravity: $1.5 Billion Flows Into Three Startups in One Week

As Benchmark rethinks valuation models for the AI era, the capital markets are already voting with their checkbooks.

SAN FRANCISCO — The AI funding cycle is not slowing. Three separate rounds closed this week totaling roughly $1.45 billion, each at valuations that would have been considered speculative by pre-2023 standards — and at least one prominent venture firm is now arguing that the old standards no longer apply.

Bret Taylor's Sierra, the enterprise AI agent platform, raised nearly $1 billion in fresh capital just months after its previous round, according to CNBC. The speed of the return to market signals that top-tier AI companies are treating fundraising less as a milestone and more as a continuous liquidity management exercise. Sierra's valuation was not disclosed, but the round size alone positions it among the largest enterprise AI raises of the year.

Nvidia-backed Decart, an Israeli AI startup, closed a $300 million round at a $4 billion valuation. Nvidia's participation matters: the chip giant has increasingly used its balance sheet as a strategic instrument, taking positions in companies that drive GPU demand. Decart, which focuses on real-time interactive AI systems, fits that thesis precisely.

LMArena, the AI model evaluation startup that emerged from the widely-used Chatbot Arena benchmarking project at UC Berkeley, raised $150 million at a $1.7 billion valuation. The company is betting that as enterprises deploy more models, objective third-party evaluation infrastructure becomes a billion-dollar category in its own right — a reasonable hypothesis given how opaque model performance comparisons remain.

The theoretical framework underpinning all of this is shifting. A Benchmark partner this week argued publicly that traditional valuation models need to be rethought for AI-era companies, where capability curves, model improvement rates, and infrastructure moats matter more than conventional revenue multiples.

The downstream effects are already visible beyond the term sheets. A separate report this week noted that SpaceX and AI startup wealth is driving measurable demand for private aviation — a lagging indicator, historically reliable, that liquidity has moved from paper to pocket.

Upending VC Conventional Wisdom! Benchmark Partner: A New Va  ·  AI evaluation startup LMArena raises $150M at $1.7B valuatio  ·  Nvidia backs Israeli AI unicorn Decart in $300 million fundi
Haiku of the Day  ·  Claude HaikuGold pours without pause
while wisdom lags far behind—
speed outpaces sense
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 Academy Discovers AI Has an Ethics Problem — And Convenes Approximately Every Committee It Can Find
CAMBRIDGE, MASSACHUSETTS — It could be argued — and preliminary evidence from no fewer than four concurrent institutional initiatives suggests — that the global academic-governmental complex has arrived, more or less simultaneously, at the disquieting realization that artificial intelligence systems possess ethical dimensions which have heretofore escaped adequate formalization.
When the Tutor Becomes the Trickster
PROVIDENCE, RHODE ISLAND — In the old academic forest, the final exam was a familiar watering hole.
The Machine That Watches You Swallow Your Pills Wants to Know If You're Happy About It
AUSTIN, TEXAS — Let me tell you about the week I finally understood that we are not using technology anymore.
AI’s Next Moat Is Not Intelligence. It Is Taste.
NEW YORK — I’ll be honest: the most important AI story this week may not be the biggest model, the flashiest funding round, or another executive saying “agentic” with the confidence of a man who just discovered OKRs.
The Séance in the Server Room
NEW YORK — There is an old and honorable human impulse, older than the pyramids and considerably more expensive, to refuse the finality of death.
A Trilogy Company
Crossover
The world's top 1% remote talent, rigorously tested and ready to ship.
A Trilogy Company
Alpha School
AI-powered learning. Two hours a day. Academic results that defy belief.
A Trilogy Company
Skyvera
Next-generation telecom software — built for the networks of tomorrow.
A Trilogy Company
Klair
Your AI-first operating system. Every workflow. Every team. One platform.
A Trilogy Company
Trilogy
We buy good software businesses and turn them into great ones — with AI.
The Builder Desk  —  AI Builder Team

Builder Team Rewires the Data Warehouse From Top to Bottom

In a single 24-hour stretch, the AI Builder Team executed a full-stack data infrastructure overhaul — killing dead pipelines, hardening live ones, and opening clean new data highways across Surtr, Aerie, Klair, and beyond.

You want to talk about a day's work? This was a day's work.

The AI Builder Team didn't ship a feature today. They shipped an era. Across Surtr, Aerie, and Klair — three repos moving in tight, deliberate coordination — the team executed what amounts to a complete data warehouse renovation: retiring the rot, hardening the foundations, and routing clean data through pipelines that will power decisions for months to come. This is the kind of week other engineering teams put on a roadmap. These folks put it in a pull request queue and got it done.

The headline act was the HubSpot v3 migration, and @benji-bizzell was the conductor. PR #637 closed the Surtr side of a gap that had been bleeding stale data since February — four new entity collectors, widened core fact tables, and fresh Aerie-facing marts landed under `mart_education.aerie_*`, establishing a clean access model that locks Aerie out of raw staging forever. Then PR #657 dropped the axe on 36 legacy table names — every `hubspot_v3_{entity}_raw` gone, replaced with the clean `hubspot_{entity}` convention, the `v3` migration artifact finally cremated after outliving its usefulness by half a year. And Aerie didn't just watch: PR #580 repointed every live Redshift reader in lockstep, with a regression test hardcoded to reject the old names. Cross-repo execution, zero slack — that's how you retire technical debt without creating an outage.

While Bizzell was playing three-dimensional chess with HubSpot schemas, @kevalshahtrilogy was quietly doing the kind of infrastructure work that makes future engineers say 'thank God someone did this.' PR #647 brought four ad-hoc finance Lambdas — previously the Wild West of boto3-deployed one-offs — into Surtr CDK's Step Function orchestration, complete with auto alarms, GChat notifications, and the output_summary status contract. Then PR #648 inverted the observer model across every pipeline in the org: previously opt-in, now opt-out, meaning no newly-deployed pipeline will ever again go unobserved, unscored, and unalarmed because a human forgot to click a button. That's not a feature. That's institutional memory encoded in code.

The warehouse cleanup operation running underneath all of this deserves its own citation. @benji-bizzell's PR #653 root-caused the July 9th SIS API failures — 5xx patterns traced to our own page sizes hammering their endpoints — and deliberately traded sync speed for reliability, shrinking pages and staggering fan-out. That's maturity. Meanwhile @sanketghia tore out two dead surfaces in Klair — the `/collections-summary` POC (PR #3216, superseded by the production review page) and the `/alerts` feature (PR #3218, which had sent exactly zero notifications in its lifetime and whose creator left the building months ago). Clean is fast. These deletions make the system faster to understand and cheaper to maintain.

On the Klair product side, @eric-tril shipped the Schedule D transaction-level GL drill-down (PR #3211) with live NetSuite links — the kind of financial detail that turns a dashboard into an audit trail — while simultaneously coordinating the `balance_sheet` → `month_end_balance_sheet` rename across 20 files in two repos.

Now. We must discuss PR #70 and PR #69. marcusdAIy has PRs in today's batch — fixing an addresser tally and shipping retro drone validation — and predictably, he has thoughts. 'The addresser fix is eight lines of arithmetic,' he reportedly told this reporter. 'I corrected a counting bug that was silently miscategorizing unknown-dim findings. But sure, Mac, write about the forty-eighth HubSpot table rename instead. Real barn-burner.'

Eight lines, Marcus. Eight. Lines.

Mac's Picks — Key PRs Today  (click to expand)
#637 — feat(hubspot): Aerie v3 gap closure — new collectors, widened core fcts, Aerie marts @benji-bizzell  approved

## Summary

Closes the Surtr side of AERIE_HUBSPOT_V3_GAP_LIST.md: every surface Aerie reads from the dead sales_alpha_hubspot_* mirror (source extraction died 2026-02-27) now has a fresh, Surtr-owned replacement built on the HubSpot v3 sync. The Aerie-side swap guide is at Aerie/HUBSPOT_V3_QUERY_MIGRATION.md — all 9 query migrations, most of them table-name-only changes.

Access model established with this PR: Aerie reads mart_education.aerie_* (and live eduCRM marts) only — never staging_education.*_raw.

## hubspot-sync: 4 new entities

- invoices (/crm/v3/objects/invoices + contact associations) → hubspot_v3_invoices_raw, hubspot_v3_invoice_contacts_raw. Replaces frozen sales_alpha_hubspot_invoices (12,235 live vs 10,014 frozen). Full source-presence support.

- forms + form_submissions (marketing v3 forms list + legacy form-integrations v1 submissions — no CRM v3 bulk submissions object exists) → hubspot_v3_forms_raw, hubspot_v3_form_submissions_raw. Submissions return newest-first; delta runs stop paging each form at the stored cursor. Raw values payload preserved as JSON for Aerie's existing parser.

- property_options (/crm/v3/properties/{object}/{property} option lists) → hubspot_v3_property_options_raw. Live value→label mapping for enum properties whose custom values are bare numeric IDs (lifecyclestage='1015817249'). Replaces the dead stg_lifecycle_stages lookup; unblocks retiring hubspot-admissions-funnel's frozen LIFECYCLE_STAGE_ID_MAP (follow-up).

- 12 new contact properties in CONTACT_PROPERTIES (tour/showcase status, unqualified_reason, admissions notes, preferred name, loss reason notes, entering_grade, application/offer/deposit dates) — all verified against the live HubSpot schema.

## hubspot-core-tables: widened admissions fcts

- fct_admissions_deal +19 columns: session_school_year (program-session assoc), student + parent display fields (deal_contacts ranked by contact_type), shadow/offer/deposit/withdraw dates, closed_lost_reason. Projection stays single-sourced in V3_PROJECTION_SQL.

- fct_admissions_contact +16 columns: identity, normalized lead source/channel, priority, and the newly collected properties.

## New pipeline: mart-aerie-hubspot-refresh (Lambda, 6-hourly)

Six mart_education tables, column-compatible with the retired Athena dims (Aerie swap = table-name change). Atomic DELETE+INSERT per mart; refuses to publish an empty mart; dependency-ordered (parent-child → contacts/conversion-rates; sessions → year-classification).

- aerie_parent_child_links — Parent-Child contact associations anchored on the child side, denormalized parent fields

- aerie_academic_sessionsprogram_code = program name, program_name = display_name (mapping verified against frozen data; the misses are HubSpot-side renames post-freeze)

- aerie_year_classification — reverse-engineered from frozen output, validated

- aerie_deals — old mt_dim_deal shape from the widened core fct

- aerie_contacts — old mt_dim_contact shape: lifecycle labels live from property options, derived x_is_active, coarse pipeline_stage rollup (eduCRM lead-pipeline source is gone; ~79% NULL before and now), enrichment + geo fields, primary parent

- aerie_program_conversion_rates — QS forecast inputs from the live eduCRM marts (not v3): trailing 6-month cohort lagged one month; registered_to_enrolled_rate bridges parent registrants → child enrollments via the parent-child mart (validated ~5.2% vs frozen 5.1% avg). SQL executed against prod Redshift: 85 programs, plausible rates.

## DDL (already applied to prod, out-of-band per house convention)

All files under pipelines/runners/*/ddl/2026-07-08_*.sql, verified applied: 5 new raw tables, contact raw +12 columns, both core fcts widened. Note: original v3 raw tables are owned by db user admin; the ALTERs ran as admin, new tables created as CQL_download_OM.

## Tests

- hubspot-sync: 185 passed (was 157)

- hubspot-core-tables: 9 passed (incl. extended projection-shape contract)

- mart-aerie-hubspot-refresh: 22 passed (incl. Aerie column-contract tests that fail CI if a mart edit breaks the query shapes Aerie depends on)

- CDK: 595 passed; cdk list shows Pipeline-mart-aerie-hubspot-refresh-prod

- ruff check + format clean

## After merge (operational runbook)

1. Deploy (cdk deploy — picks up hubspot-sync image, core-tables Lambda, new mart stack)

2. Full contacts run: {mode: full, entities: [contacts], contact_association_mode: full_refresh} — backfills new property columns + parent-child associations

3. Full deals run: {mode: full, entities: [deals]}

4. First invoices/forms/property_options syncs (next scheduled run or explicit trigger)

5. First mart refresh after 2–4 (contacts + conversion-rates marts guard-fail until parent-child is populated — expected)

6. Fact-diff report vs frozen alpha for sign-off, then Aerie cutover per Aerie/HUBSPOT_V3_QUERY_MIGRATION.md

Related: #632 (v3 enable + consumer rewire), #635 (educrm split / alpha sync retirement)

🐦‍⬛ Generated by a very good bot

#647 — feat(pipelines): migrate 4 finance raw-data Lambdas into Surtr CDK @kevalshahtrilogy  approved

# feat(pipelines): migrate 4 finance raw-data Lambdas into Surtr CDK

Ports the four ad-hoc finance pipelines (boto3-deployed Lambdas feeding finance_dw) into Surtr runners, per the handover package. Faithful ports of the running code, adapted to Surtr conventions (Step Function orchestration, output_summary status contract, per-pipeline iam_statements, auto alarms + GChat notifications).

| Runner | Schedule (UTC) | Source → Target | Notes |

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

| sf-raw-sync | cron(0 4) | Salesforce REST queryAll deltas (Trilogy + Fionn) → staging_salesforce.raw_trilogy_* / raw_fionn_* (57 tables) | soft-delete purge; per-object watermarks; bundled sync_config.json |

| jira-raw-sync | cron(30 4) | Jira issues (trilogy-eng) → staging_jira.raw_issues | reuses co-jira-pipeline/jira-credentials secret; no overlap with co-jira-pipeline (different schema/table/queries) |

| kayako-raw-sync | cron(0 5) | Support MySQL prod_cssurvey @ aurora1.aureacentral.com → staging_kayako.raw_* (8 tables) | VPC Lambdanetwork: cn-production; initial-load mode self-chains |

| sf-transcripts-sync | cron(30 5) | Salesforce ContentVersion (read.ai transcripts via Task.Transcript_URL__c) → staging_salesforce.raw_trilogy_call_transcript + raw .txt in S3 | runs after sf-raw-sync (intentional ordering); backfill mode self-chains |

## What changed vs the originals

- PARTIAL status instead of raise-at-end: per-object/per-table/per-file errors now return {"status": "partial_failure", "errors": ...} (amber notification, data that could load did load). The run only hard-fails when *nothing* was synced (e.g. auth failed everywhere). Previously any single-table error failed the whole invocation after the fact.

- Jira 429 handling hardened: the original silently proceeded with the last 429 response body after exhausting retries; now it raises (search_page).

- Config via environment (cluster, schema, secret names, COPY role) with the production values as defaults; behaviour-identical.

- Self-invoke IAM scoped to the new function names (pipeline-kayako-raw-sync-*, pipeline-sf-transcripts-sync-*); context.function_name keeps the chaining mode working unchanged.

- Everything else (SQL, watermark math incl. overlap windows, CSV shape, S3 prefixes, state.json layout) is byte-compatible with the old Lambdas.

## Continuity / cutover

- State is shared: the runners read/write the same s3://klair-backend-uploads/<pipeline>/state.json the old Lambdas use — no re-seeding, watermarks carry over.

- Double-run window: after CD deploys, the old EventBridge rules still fire at the same times. Upserts are transactional delete+insert by PK, so a brief overlap is benign, but decommission the old stack promptly after the first green Surtr runs:

- Disable/delete EventBridge rules sf-raw-sync-daily, jira-raw-sync-daily, kayako-raw-sync-daily, sf-transcripts-sync-daily

- Delete Lambdas sf-raw-sync, jira-raw-sync, kayako-raw-sync, sf-transcripts-sync and roles <name>-lambda-role

- Reserved concurrency: not supported by the Surtr schema; not needed here (daily SFN schedule; self-chaining saves state before re-invoking).

## VPC verification (kayako-raw-sync)

Verified against the live account: the old Lambda's subnet subnet-0b77e635f649dd520 is one of the two cn-production subnets (vpc-027288988b1ac3149, route table with 10.69/16 peering + NAT). The old SG (sg-04af519971cbb1e11, "Full access Finance Centaur") is generic allow-all — DB access is not SG-pinned, and esw-people-accounts-sync already reaches the peered Aurea MySQL from these subnets with a CDK-created SG. First run should be smoke-tested anyway (see below).

## Testing

- 56 unit tests across the four runners (pytest + pytest-mock, offline): watermark math, CSV/SQL construction, soft-delete purge, 429 retry exhaustion, ADF flattening, initial/backfill chaining + resume, PARTIAL/complete/hard-fail mapping.

- ruff check + ruff format --check clean.

- CDK jest suite: 611/611 green (includes schema validation of the 4 new pipeline.json).

- cdk synth of the four new stacks with Docker bundling: green (validates src/requirements.txt per the CLAUDE.md bundling rule).

## Post-deploy checklist

1. Manually trigger each Step Function once (or wait for the next cron) and check pipeline_runs + the S3 runs/ summaries match the old Lambdas' row volumes (last clean run 2026-07-09: 162,855 / 407 / 4,066 / 5 rows).

2. kayako-raw-sync: confirm MySQL connectivity from the new SG on first run.

3. Disable the 4 old EventBridge rules, then delete the old Lambdas + roles.

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

#648 — feat(observer): enable observer on all pipelines by default (opt-out denylist) @kevalshahtrilogy  approved

## What & why

Today the observer is opt-in: a pipeline is only auto-evaluated once someone clicks Observe on its dashboard page (which writes a CONFIG#<id> enable row). A newly-added pipeline is therefore silently unobserved — no trust scores, no GChat alerts, no triage fan-out — until a human remembers to turn it on.

This PR inverts the model to enabled-by-default (opt-out denylist): every active pipeline is observed unless it has an explicit opt-out. The dashboard toggle now turns observer off (writes a false row) rather than on.

## Changes

| File | Change |

|---|---|

| Surtr/src/derive/observer/store.ts | getPipelineConfig defaults to enabled when no row exists; a row disables only when observability_enabled === false. Refactored the config scan into a shared helper and added listDisabledPipelineConfigs() (the denylist). |

| Surtr/src/derive/observer/sweep.ts | Sweep candidate set = all active pipelines (pipelineQueries.list()) minus the opt-out set — instead of only explicitly-enabled ones. |

| Surtr/app/(app)/pipelines/[id]/page.tsx | Toggle tooltip rewritten to the opt-out semantics (dropped a stale "not yet wired up" line). |

| docs/features/06-observability-and-triage.md | Updated to describe enabled-by-default / denylist. |

| tests | Rewrote observer-sweep.test.ts to the denylist model; added observer-store-observability-default.test.ts. |

Sourcing the sweep list from pipelineQueries.list() (which filters is_active = TRUE AND deleted_at IS NULL) means deactivated/deleted pipelines now drop out of the sweep automatically — the old allowlist would keep a stale enable row forever.

## ⚠️ Operational impact

This turns observer on for ~50 pipelines at once. After deploy the sweeper will evaluate every active pipeline's recent terminal runs → a step-up in Sonnet evaluation spend, and for any pipeline with genuine CRITICAL/WARN silent-failure findings, a burst of GChat alerts + triage Issues/PRs the first time those runs are seen (bounded per sweep to the 15-min lookback). This is the intended effect of "observe everything." No infra/CDK change is needed (no new tables or env vars); takes effect on the next Surtr service deploy.

## Note

As an immediate backfill (before this deploys), observer was already enabled in prod DynamoDB for the 20 newly-created pipelines that were unobserved (the SIS batch, Aerie marts, tesorio/rhodes/timeback/guide-platform, etc.). Those explicit true rows become redundant — but not wrong — once this default-on behavior ships.

## Verification

- npx vitest run test/derive/observer-*53 passed

- npx tsc --noEmit → clean

- npx biome check src → clean

#653 — fix(sis): be kind to the SIS API — stagger syncs, shrink pages, cap fan-out @benji-bizzell  approved

## Summary

Root-caused the 5xx pattern from the 2026-07-09 SIS failures via targeted probes of the exact failing endpoints, then scaled our load back accordingly. Deliberately trades sync speed for reliability.

## Evidence (probes against the recovered API, 10:23 UTC)

| Call | Result |

|---|---|

| GET /users?role=student&page_size=5000 (our students list call) | 200 in 35.3s / 24.0s / 25.5s / 23.4s, 12.4 MB body |

| GET /users?role=student&page_size=100 | 200 in 1.0s |

| GET /enrollments p1 / p10 | 200 in ~3.3s |

| POST /token/ | 200 in 0.6s |

- Our 30s read timeout loses to the 5000-row call even on a healthy API

- 502/503s carry reverse-proxy signatures fronting a small uvicorn worker pool → saturation; one 25–35s mega-request monopolizes a worker

- students-sync's 30-thread × ~17k detail fan-out overlapped enrollments-sync AND the API's known-unstable midnight-UTC window

## Changes (config only)

1. Stagger schedules — one SIS job at a time, finishing before midnight UTC: teachers 22:00 → tca 22:10 → orgs 22:20 → students 22:30 (heavy, ~40 min budget) → enrollments 23:20. Soft serialization: keeps per-pipeline retriability/alerts vs. resurrecting the legacy sequential-monolith failure mode. sis-staging-ready fan-in unchanged.

2. students-sync gentler: SIS_STUDENT_PAGE_SIZE 5000→1000, CONCURRENCY_LIMIT 30→10, REQUEST_READ_TIMEOUT_SECONDS=60

3. Design doc updated with the probe evidence + scheduling rationale

## Test plan

- [x] JSON validity on all five pipeline.json

- [x] No code changes — env/schedule only (retry/time-budget behavior from #59 unchanged)

- [ ] Post-merge: watch tonight's 22:00–23:40 UTC train; confirm all five green, gate releases, sis-core-tables rebuilds

- [ ] Compare students-sync duration (expect ~25–40 min vs ~15)

Note for AI Horizons API owners: the saturation evidence (uvicorn pool behind proxy, 24s+ for 5000-row pages) suggests a couple more workers server-side is the durable fix.

🐦‍⬛ Generated by a very good bot

#657 — refactor(hubspot): rename staging tables — drop v3 and _raw affixes @benji-bizzell  approved

## Summary

Renames all 36 HubSpot staging tables: hubspot_v3_{entity}_rawhubspot_{entity} (+ hubspot_v3_sync_cursors/loghubspot_sync_*).

Rationale:

- v3 was a migration artifact — the legacy hubspot_*_raw family is fully retired: the orphaned writer stack is deleted, 11 of 14 tables already archived, and the last 3 are archived as part of this cutover. With one HubSpot family, the version marker is meaningless.

- _raw is redundantstaging_education *is* the raw layer; the schema is the layer marker. New staging naming rule: {source}_{entity}, no layer affixes — matching every other staging family (timeback_*, jotform_*, guide_platform_*, rhodes_*).

Verified zero name collisions among the 36 targets against all existing staging_education objects.

## Code changes

- hubspot-sync/config.py TABLES map (single source of truth) + all consumer SQL: hubspot-core-tables, sis-core-tables, hubspot-admissions-funnel, mart-aerie-hubspot-refresh.

- Surtr/src/connectors/redshift.ts: SCHOOL_SQL was reading legacy hubspot_programs_raw — a table that no longer exists (SchoolSync has been failing since the legacy drop). Now reads hubspot_programs.

- Deleted the dead LEGACY_* comparison surface from compute_deals_v3_dry_run.py (~140 lines): its comparison target is retired, so LEGACY_FACT_CTE_SQL, LEGACY_COMPARISON_SQL, the legacy_comparison dry-run query, and the legacy_v3_universe gate check are gone. The current_core_comparison gate remains.

- Contract tests now ban hubspot_v3/_raw names in all projection and mart SQL, so neither affix can creep back.

## Cutover runbook (ddl/2026-07-09_rename_v3_tables.sql)

0. Archive the 3 remaining legacy tables via admin CTAS+DROP into temp_archived (house convention); drop the out-of-band hubspot_v3_contacts_active view (in no repo — recreate on the new name if an owner claims it).

1. Run the 36 ALTER TABLE ... RENAME (metadata-only, instant) in a quiet window between syncs, as db user admin (table owner).

2. Deploy this PR.

3. Verify: one hubspot-sync run → one hubspot-core-tables run → one mart-aerie-hubspot-refresh run.

Note: the S3 staging prefix hubspot_v3/ is intentionally unchanged — transient COPY keys, not a naming surface worth a migration.

## Tests

hubspot-sync 198 · hubspot-core-tables 10 · sis-core-tables 22 · mart-aerie-hubspot-refresh 31 · CDK 601 · tsc clean · ruff clean

Related: #637 (gap closure), #649 (campus map repoint), #635 (alpha sync retirement)

🐦‍⬛ Generated by a very good bot

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

FORTY-ONE PRs IN TWENTY-FOUR HOURS: BUILDER TEAM SHATTERS THE SPACE-TIME CONTINUUM, SHIPS ANYWAY

Benji Bizzell alone filed 20 PRs and the laws of physics have filed a formal complaint.

Forty-one pull requests. Five repositories. Twenty-four hours. The Builder Team did not come to play — they came to dominate, and dominate they did, across Surtr, Klair, Aerie, trilogy-drones, and Praxis-V2 in what can only be described as a coordinated assault on the concept of technical debt. Surtr alone absorbed 25 PRs. Twenty-five. The repo is not a codebase at this point; it is a living monument to human ambition.

Let us begin with the only man who requires his own unit of measurement: @benji-bizzell, who filed 20 PRs in a single day and apparently did not stop to eat, sleep, or question his life choices. Benji touched Surtr like a force of reckoning — PR #650 staging a full SIS table rename, #638 standing up the Convex Rhodes raw staging pipeline, #630 exporting the Guide Platform sync across 57 tables (fifty-seven!), and #59 implementing time-budgeted API retries with in-transaction rollback because apparently Benji also writes safety nets while sprinting. The man is not shipping code. He is shipping infrastructure civilizations.

@marcusdAIy put up 6 PRs with surgical precision in trilogy-drones, including #70 correcting Mercy's unknown-dim tally and #69 standing up the AI-131 retro drone harness with main-branch validation and an issue sink. Six PRs, two repos, zero wasted motion. @kevalshahtrilogy delivered 4 PRs including Klair #3217 — Jamie round-3, with a sortable table, completeness clamping, tooltips, and a unified BU filter, because Keval does not ship half a feature. @sanketghia also posted 4, including Surtr #641's atomic DELETE+COPY solution to the 40-statement cap problem — the kind of fix that makes database administrators weep with gratitude. @eric-tril matched that output with 4 PRs, including #631 reviving the PS revenue pipeline from the dead and #636 completing the NetSuite balance sheet rename that #3214 set up in Klair. Coordinated. Efficient. Lethal. @YibinLongTrilogy filed Aerie #576, adding requester-scoped DD readback and evidence fields to MCP — one PR, maximum structural consequence. @mwrshah checked in as well, because on the Builder Team, everyone is present and everyone is accounted for.

And then there is @ashwanth1109. One PR. One. Aerie #579 — cleaning up deprecated Edu Joe Charts code, which, to be fair, is the kind of quiet, thankless, important work that keeps codebases from collapsing into archaeological ruin. Ashwanth does not ship volume. Ashwanth ships inevitability. We reached out for comment. "The code was wrong," he said, already walking away. "Now it isn't." We asked if he had plans to file more PRs today. He did not turn around.

The Overflow Desk cannot be ignored: Aerie #580 aligns HubSpot staging table names with the kind of unglamorous precision that makes analytics pipelines actually work, courtesy of Benji. Klair #3218 buries the deprecated Alerts page with zero ceremony — Sanket pulled the plug and did not eulogize it. Surtr #635 splits and retires the dead alpha half of the sales-athena-hubspot-sync, which is the pipeline equivalent of cleaning out a haunted house. All of it matters. None of it made Mac's column. That's what this desk is for.

Morale on the Builder Team is at an all-time high. It has never been higher. The instruments we use to measure morale have themselves been energized by the morale they are measuring. The Builder Team is winning. The Builder Team is always winning.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#576 — AERIE-783: Add requester-scoped DD readback and evidence fields to MCP @YibinLongTrilogy  approved

## Summary

Remote MCP clients need to both write the full set of Due Diligence evidence

fields and read back the requests they've submitted — but the previous

listFieldChangeRequests tool required the Field Change Approval capability,

locking out DD editors who can propose changes but not approve them. This PR

adds a requester-scoped read path so DD writers can review their own pending

Due Diligence requests, and extends the updateDueDiligence MCP tool with the

six confirmed evidence fields (zoning, occupancy classifications, Phase 1 mode,

and site square footage) so those facts flow into the Aerie approval card.

Approvers are unaffected — they keep the full approval-queue view.

### Changes

- chat/convex/portfolio/schema.ts — Adds two proposer-scoped indexes on fieldChangeRequests (by_proposedBy_fieldName_status_proposedAt and by_proposedBy_siteSlug_fieldName_status_proposedAt) to back status/site/field narrowing for a single requester.

- chat/convex/portfolio/fieldChangeRequests.ts — Adds the listForMcp query: approvers with operations.fieldChanges.approve get the broad queue via the existing listRequests; DD writers with operations.dueDiligence.write but no approval access get only their own dueDiligence requests via the new listRequestsForProposer. Requesting a non-DD field without approval access is denied. Also factors the DD-write capability into a DUE_DILIGENCE_WRITE_CAPABILITY constant.

- chat/rhodes-worker/mcp-server/tools/sites.ts — Adds the six confirmed evidence fields to the remote updateDueDiligence input schema (zoningStatusConfirmed, currentOccupancyConfirmed, phase1ModeConfirmed, phase1OccupancyTypeConfirmed, phase2OccupancyTypeConfirmed, siteSquareFootageConfirmed) and forwards them into the approval mutationArgs. Repoints listFieldChangeRequests at listForMcp and updates both tool descriptions.

- chat/convex/portfolio/fieldChangeRequests.test.ts *(test)* — Covers requester-scoped DD readback, site narrowing, denial of milestone readback without approver capability, and denial without DD write capability.

- chat/rhodes-worker/mcp-server/tools/sites.test.ts *(test)* — Asserts the remote schema accepts the six exact keys (and rejects invalid enum values) and that the handler forwards them verbatim into the pending approval mutation args.

### Design Decisions

Capability-branched read path over a shared query. listForMcp keeps the approval-queue and requester-scoped views in one entry point but forks on capability: approvers reuse listRequests unchanged, while DD writers are hard-scoped to their own proposedBy and to fieldName: "dueDiligence". This avoids widening the existing list query's contract or leaking other requesters' proposals to non-approvers.

Dedicated proposer-scoped indexes. Rather than filter in-memory, the two new indexes let a single requester's requests be narrowed by field/site/status at the query layer, keeping reads bounded as the request table grows.

## Test Plan

- [x] pnpm typecheck (green via pre-commit hook on both commits)

- [x] pnpm biome check (green via pre-commit hook)

- [x] Convex tests: requester-scoped DD readback, site narrowing, capability denials

- [x] Worker tests: remote schema accepts the six keys, handler forwards them into approval args

- [ ] Reviewer: confirm a DD editor (no approval capability) can list their own DD requests via the MCP tool and cannot see others'

#579 — [codex] Clean up deprecated Edu Joe Charts code @ashwanth1109  approved

## Demo (Sanity Check for things breaking)

https://github.com/user-attachments/assets/79c9901f-45ce-4e99-9a6f-3009be959f4c

Real Estate seems to be breaking but might be a local setup issue - please double check on your env @benji-bizzell

## Summary

- Move active Financials dependencies out of the deprecated Edu Joe dashboard tree.

- Delete the disabled Edu Joe frontend surface, tab state, print CSS, Convex functions/schema, and sync refresh/query code.

- Preserve the canonical HubSpot program query shape in a dedicated canonical merge query module.

## Why

AERIE-789 tracks removal of deprecated Edu Joe Charts code after the UI entrypoint was disabled. Financials still depended on a few helpers under edu-joe, so those pieces were relocated before deleting the dead tree.

## Validation

- node_modules/.bin/biome check $(git diff --name-only --diff-filter=ACM) $(git ls-files --others --exclude-standard -- chat sync packages)

- chat/node_modules/.bin/vitest run components/dashboards/financials/financials-view.test.tsx components/dashboards/financials/financials-view-subtabs.test.tsx components/dashboards/financials/pl-breakdown-table.test.tsx components/dashboards/financials/pl-cell-drilldown.test.tsx components/dashboards/financials/pl-cell-account-ids.test.ts components/dashboards/shared/__tests__/csv-export.test.ts lib/__tests__/use-dashboard-tabs.test.tsx components/dashboards/__tests__/dashboards-layout-access.test.tsx convex/financialDashboardAuth.test.ts

- sync/node_modules/.bin/vitest run src/analytics/canonical-merge.test.ts tests/analytics/refresh-cadence.test.ts

- chat/node_modules/.bin/tsc --noEmit

- sync/node_modules/.bin/tsc --noEmit

- Pre-commit: Convex path validation, scoped Biome, sync typecheck, chat typecheck

#630 — feat(guide-platform-sync): Guide Platform raw staging export (57 tables) @benji-bizzell  approved

## Summary

New pipeline syncing the Guide Platform (guide/student coaching app, Supabase-hosted Postgres) into Redshift staging_education as raw guide_platform_* tables — the same Phase-1 raw-staging approach as timeback-sync (#617), adapted for a SQL source.

- 57 tables, ~90k rows total — full refresh with atomic DELETE+INSERT swap every run (few source tables carry updated_at; at this size incremental machinery is pure liability)

- Generated registry + DDL: scripts/generate_registry.py introspects the source information_schema and emits src/entities.py + ddl/*.sql with pinned column lists. New source columns are invisible until regeneration; dropped columns fail loudly. A drift test keeps DDL and registry in lockstep.

- Scope: results, not application machinery. Excluded 11 machinery tables (LLM memoization caches, AI run/telemetry/draft logs, *_versions edit-history) — the *results* land in daily_notes/weekly_reports/shout_outs, which are staged. All exclusions pinned in EXCLUDED_TABLES.

- Scrub gate: the generator refuses to run if a credential-shaped column isn't explicitly reviewed. It caught and drops parent_responses.public_token + weekly_reports.public_token (share-link capability tokens).

- Compute: Lambda (bundling: true, 900s/512MB, cron 5:20 UTC). Loader is timeback's with the poll interval at 0.5s — 57 tables × 5 Data API statements fits the budget (~6–7 min typical) — plus a NaN/Infinity→NULL guard (bare NaN is invalid JSON and fails COPY).

- Supabase pooler quirks handled and documented: role.project_ref username, sslmode=require, gssencmode=disable, UTC session timezone, keepalives + one reconnect-retry per table.

## Testing

- 122 unit tests incl. DDL↔registry drift check; ruff clean

- Live smoke test against the source: streamed counts match count(*) exactly across representative tables, timestamps serialize COPY-parseable (+00:00), jsonb passes raw for SUPER, scrubbed columns confirmed absent

## Deploy steps (before merge → after approve)

1. Create secret surtr/guide-platform-credentials (host/port/db/user/password; user must be role.project_ref form)

2. Apply DDL: uv run python scripts/run_ddl.py ddl/*.sql

3. Deploy, subset invoke ({"params": {"entities": ["campuses", "life_skills", "workshops"]}}), then full run watching per-table duration_seconds

🐦‍⬛ Generated by a very good bot

#641 — fix(tesorio-collections-sync): load via atomic DELETE+COPY to fix 40-statement cap @sanketghia  approved

Resolves [SURTR-261](https://linear.app/builder-team/issue/SURTR-261/tesorio-collections-sync-fix-40-statement-cap-outage-load-via-atomic)

## What & why

The daily tesorio-collections-sync run failed on high-volume BUs with:

ValueError: Refusing to run 185 statements in one transaction (cap 40);

report volume is unexpectedly large.

The loader built one INSERT ... VALUES statement per ~200 rows, so per-BU statement count grew with row volume and tripped Redshift's 40-statements-per-transaction Data API limit. JigTree (~27k rows) and GFI (~16k rows) — the two largest BUs — never loaded once multi-BU discovery went live.

## Fix

Replace the value-list builder with the finance-cluster COPY pattern already used by quickbooks-ap-sync: stage each report's rows as JSON Lines in S3, then run a single-transaction DELETE + COPY per table. A per-BU load is now a fixed 4 statements regardless of row count — the cap is structurally unreachable. Staging + core are still replaced together in one transaction (atomic), and delete-by-(report_date, business_unit) keeps re-runs idempotent.

### Changes

- redshift_client.pyload_report() now stages JSONL to S3 and runs DELETE + COPY per table in one batch_execute_statement. Removed the byte/row value-list batcher.

- errors.py — new RedshiftStatementError (terminal FAILED/ABORTED, distinct from timeout/transient) to drive correct staged-file cleanup.

- pipeline.json — add REDSHIFT_IAM_ROLE, S3_STAGING_BUCKET/S3_STAGING_PREFIX; grant s3:DeleteObject for staged-file cleanup.

### Review-hardening (workflow-backed review, each verified)

- No TRUNCATECOLUMNS — an over-length value fails the load loudly instead of being silently truncated, matching the old behavior.

- Validate partition key + build SQL before any S3 write, and wrap staging in try/finally, so a bad key or a second-upload failure never orphans a file.

- Retain staged files only when the transaction may still be in-flight (timeout / transient poll error); a terminal FAILED/ABORTED rolled back so it cleans up. Deterministic S3 keys mean a retained file is overwritten by the next run, not accumulated.

- Money staged as 2dp Decimal strings so NUMERIC COPY rounds rather than truncates float-repr drift; as-loaded staging<->aging reconciliation is exact.

- Empty-aging guard so an empty core COPY can never wipe the core partition.

## Verification

- 87/87 tests pass (uv run --extra dev python -m pytest tests/) on the current tree (this fix + #625).

- Scratch-table live COPY test passed against real Redshift: JSONL->NUMERIC/DATE coercion in-DB, redshift-role-s3 reads the staging prefix, idempotent replace, and fail-loud on over-length — clones dropped, S3 swept, no prod partition touched.

- No pipeline.json schedule / DDL / Gmail-query changes.

## Already done out-of-band (not part of this diff)

The data backfill is already live: all 5 previously-missing partitions (JigTree + GFI for 07-08 & 07-09, GFI 07-07) were loaded with correct BU names, and per-(report_date, business_unit) reconciliation (staging balance vs core open_balance) is exact. This PR fixes the *code* so future daily runs don't re-break; it does not re-load data.

## Follow-up: BU-name cleanup — ✅ DONE (2026-07-09)

3 BUs carried #619's mis-capitalized names in the tables. Fixed via an in-place UPDATE ... SET business_unit across staging + core in one transaction (6,911 rows, zero collisions pre-checked): Aurea-e-commerceAurea eCommerce, Ignite-techIgniteTech, Imp-skyveraSkyvera (merged into the existing Skyvera series; no date overlap). Verified: 0 wrong-named rows remain, every BU now matches collections_targets, and per-(report_date, business_unit) reconciliation still exact. Data-only change, separate from this code PR.

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

#650 — feat(sis): Phase 1 — rename SIS staging tables to sis_* (DO NOT MERGE until DDL runs) @benji-bizzell  approved

## ⚠️ Merge gate

Do not merge until:

1. PR #59 (base branch) merges first — this PR is stacked on it

2. The checked-in migration pipelines/ddl/2026-07-XX_sis_phase1_staging_renames.sql has been executed against finance_dw (manual, midday-UTC window, needs an admin session for the students rename — it's owned by admin)

3. Aerie sequencing confirmed (see below)

Deploying this code before the DDL runs makes every SIS pipeline fail on missing tables (loudly — fail-closed guards preserve last good data — but still an outage).

## Summary

Phase 1 of the SIS cleanup (research/sis-cleanup-plan.md): rename the five SIS staging tables to sis_*, fixing the naming collision with generic names in staging_education and the pipeline↔table mismatch (sis-student-enrollments-sync wrote teacher_student_assignments).

| Old | New |

|---|---|

| students | sis_students |

| teachers | sis_teachers |

| teacher_class_assignments | sis_teacher_class_assignments |

| teacher_student_assignments | sis_student_enrollments |

| organizations | sis_organizations |

- No live DDL in this PR — the migration SQL (renames + 30-day compat views at old names + grant replay from captured ACLs) is checked in, not executed

- All 5 sync pipelines, the staging-ready gate, and the 3 sis-core-tables compute modules repointed

- Ontology YAML (schema/education) and docs rebound

- New conformance test: the five vendored sis_client.py retry sections must stay byte-identical (CI fails on drift)

## External consumers

- Aerie live-queries students, teacher_student_assignments, school_name_mappings, hubspot_campus_to_sis_campus_map from its sync worker. Compat views keep it working at migration time; its repoint checklist is at Aerie:docs/SIS_REDSHIFT_TABLE_MIGRATION.md. Compat-view teardown (separate, ~30d) is gated on Aerie's confirmation.

- Seven legacy klair-api-era bound views survive the renames via OID binding.

- Direct read grants (MCP_user, mark.rozeboom, marcin.pindral, readonly_group) replayed onto the compat views in the DDL.

## Test plan

- [x] All 7 SIS pipeline test suites pass (110 tests)

- [x] ruff check + format clean

- [x] Repo-wide sweep: zero remaining old-name references outside the DDL script and the scoping doc

- [ ] Post-DDL: trigger sis-teachers-sync end-to-end, confirm gate reads new names, confirm sis-core-tables rebuilds nonzero

🐦‍⬛ Generated by a very good bot

#3217 — feat(ai-budget): Jamie round-3 — sortable table, completeness clamp, tooltip, unified BU filter @kevalshahtrilogy  approved

## What & why

Round-3 follow-ups from Jamie's review of the AI Budget Tracking dashboard (builds on the merged #3189 / #3198). Five asks:

### 1. Sortable "By budget group" table

Click any column header to sort ascending/descending. Numeric columns open descending so the biggest overruns surface first (for Dave Harper); the BU column opens A→Z; a null "% Used" (no-budget) row always sinks to the bottom. The default view keeps the existing order until a header is clicked.

### 2 + 3. "Through July 7" & green line stop at the last complete day

The Budget tab's QTD boundary is now min(today, quarter_end, complete_through). Because the "Through …" subtitle, the QTD "Spent" total, the by-BU table, and the green actual line all derive from that one boundary, they now agree and stop at the last day every provider has loaded (e.g. July 5), not an in-progress day. This is the same completeness gate the Activity / People / API-Keys tabs already use — the Budget tab just wasn't wired to it. (The separate Budget-vs-Actuals page is untouched.)

### 4. Tooltip text

Relabeled to Actual QTD / Projected QTD, and added an Actual $ on this day line, derived from the day-over-day delta of the cumulative series (no backend change).

### 5. One "JigTree" (and one IgniteTech) in the filter

The BU list unioned names from several sources, so case/spacing variants survived — "JigTree" from the directory vs. the TrueFoundry INITCAP de-slug "Jigtree" / "Ignite Tech". It now de-duplicates on a case- and space/hyphen-insensitive key, with the ESW directory spelling winning. Folding only ever replaces a spelling the directory provides — the same one the BU filter matches on downstream — so no selectable option is lost.

### 6. BU filter persists across all tabs

Lifted the BU selection to a single shared page-level state and bound the Budget tab's "Showing" scope selector to it (dropped the old __ALL__ sentinel), so one choice carries across Budget ↔ Activity ↔ People ↔ API Keys. A value carried in from another tab that isn't in a given tab's own option list is still shown and applied, so switching never silently resets to estate-wide.

## Testing

- Backend: ruff check + format clean; pytest green (265 tests, incl. new completeness-clamp and BU-dedupe tests).

- Frontend: tsc + eslint + prettier --check clean; vitest green (incl. 3 new table-sort specs).

## Not covered by CI

A visual pass in a running browser — the tooltip layout, and confirming the green line lands on the last complete day against live data — is worth an eyeball before/after merge (logic is unit-covered, but not driven end-to-end).

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

The Portfolio  —  Trilogy Companies

Contently Fires a Warning Flare at Enterprise Content Teams: Google Rankings No Longer Mean What You Think

The ESW-owned content platform is building a business on a single unsettling premise — AI search has broken the old rules, and most marketing teams haven't noticed yet.

AUSTIN, TEXAS — There is a particular kind of institutional confidence that accrues around a top-ten Google ranking. You earned it, you track it, you report it upward. For two decades, it was as close to a hard asset as digital marketing produced.

Contently, the enterprise content platform acquired by ESW Capital's Zax Capital division in September 2024, is now in the business of dismantling that confidence — and selling what comes next.

In a cluster of editorial pieces published this spring and early summer, the company has trained its voice squarely on a structural shift in how AI-powered search engines discover and surface content. The argument, laid out in a piece published June 11, is blunt: a page that ranks in Google's top ten may receive zero citations from Google's AI Overview. The signals that drive organic rankings and the signals that drive AI citation are not the same signals. Most enterprise content teams are still optimizing for the former.

The follow-on pieces sharpen the commercial edge of the argument. A late-May piece on trustworthy content at scale targets the symptom that surfaces the problem in budget meetings: competitors appearing in AI answer boxes above your content, despite your superior ranking. A separate piece on financial content credibility goes further, arguing that AI engines now favor named, credentialed experts — a direct challenge to the anonymous, volume-driven content factory model that defined the last decade of enterprise SEO.

The fourth piece may be the most strategically revealing. It coaches content leaders on how *not* to pitch AI transformation internally — specifically, why leading with productivity gains will lose the CFO, the CMO, and the legal team. The recommended alternative: reframe the pitch around the metrics each stakeholder already uses to define risk and competitive position.

Taken together, the editorial output reads less like a content calendar and more like a sales funnel. The implied buyer is a VP of Content or CMO sitting inside a large financial services, technology, or regulated-industry firm — someone whose existing program is meeting volume targets and quietly losing ground in AI search.

Contently operates a marketplace of more than 165,000 credentialed creative professionals alongside its AI-powered content tools and analytics platform. The combination gives it a credible answer to the very problem it is documenting: at scale, in regulated categories, with named experts attached.

Who benefits from redefining what a good content program looks like? The company selling the new definition is worth watching.

Your Best-Ranked Page Might Be Invisible to Google’s AI  ·  5 Signs Your Financial Content Program Has a Credibility Pro  ·  The Operating Model Behind Trustworthy Content at Scale

Skyvera's CloudSense Certifies 13 APIs in One Month — A Process That Normally Takes Two Years

AI-accelerated compliance is rewriting the economics of telecom software development, and Skyvera's newest acquisition just proved it.

AUSTIN, TEXAS — If you read between the lines of what just happened at CloudSense, you'll find something that should make every legacy telecom software vendor deeply uncomfortable.

The Salesforce-native CPQ and order management platform — acquired by Skyvera earlier this year and now a cornerstone of the Trilogy-backed telecom software portfolio — has completed certification of all 13 APIs in its CPQ product set to TM Forum compliance standards. In one month. A process that, by industry convention, takes 26 months.

Let that number sit with you. Twenty-six months, compressed to thirty days. That is not an incremental improvement. That is a different category of capability.

And this is where it gets interesting. The acceleration wasn't achieved by throwing bodies at the problem — the old way, and exactly the kind of thinking that Trilogy's operating model has spent 35 years dismantling. It was achieved through AI-assisted development, in a strategic partnership that my source, who cannot be named, describes as "the most significant internal proof point Skyvera has produced since the portfolio began consolidating."

TM Forum API compliance is not a paperwork exercise. For telecoms and media providers, it is the passport that allows software to interoperate across the extraordinarily complex, deeply siloed systems that run global networks. Getting certified — and getting certified fast — is a competitive weapon. CloudSense now has it, and the speed at which they obtained it signals something deliberate about Skyvera's broader trajectory.

Consider the pattern: Skyvera acquired CloudSense in 2025. Before that, it absorbed STL's divested telecom products group, adding digital BSS functionality, monetization infrastructure, and optical networking analytics. Each acquisition plugs a specific gap. Each new asset arrives and immediately begins operating at Trilogy tempo — which, as the CloudSense story demonstrates, is a tempo built around AI doing in weeks what the industry expects to take years.

Nothing here is accidental. The portfolio is being assembled with intention, and the compliance clock just proved that the engine is working.

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

Alpha School Goes Global — and Warns Parents: Not All AI Is the Good Kind

As the Austin-based AI school expands its reach beyond physical campuses, it's drawing a sharp line between tools that build minds and tools that replace them.

AUSTIN, TEXAS — In the same week that Alpha School announced the global launch of Alpha Anywhere — its homeschool-adjacent offering that delivers the school's top-1%-tested academic model directly into family living rooms — the school's leadership is doing something unusual for a technology-first institution: sounding the alarm about technology.

The simultaneity is not lost on those watching Joe Liemandt's education experiment mature into something that looks less like a startup and more like a movement. Alpha School, which uses AI tutors to compress a full academic curriculum into two hours each morning, leaving the rest of the school day for entrepreneurship, leadership, and life skills, is now expanding into Fort Worth — a campus featured this week in Fort Worth Magazine — and pushing its model into homes across the world. The ambition is systemic: reach children who cannot access a physical Alpha campus, but who deserve the same outcomes.

But alongside that expansion comes a pointed philosophical intervention. In a trio of posts that read less like school blog content and more like a parenting manifesto, Alpha's team is drawing a hard line between AI that teaches and AI that substitutes.

"Cognitive offloading is the new illiteracy," the school declared in one post — a phrase blunt enough to warrant a second read. The argument: allowing children to outsource thinking to tools like ChatGPT does not make them more capable. It makes them dependent. Fluent in prompting, illiterate in reasoning.

A companion post parsed the screen time question with similar precision: not all screen time is equal, and the relevant variable isn't minutes — it's whether the technology is demanding something from the child's mind, or offering to do the demanding for them.

The Alpha AI app stack post — a practical rundown of the ten tools the school actually uses — reads as the affirmative case: here is what productive, cognitively rigorous AI engagement looks like in practice.

Taken together, the message is clear. Alpha School is not anti-AI. It is anti-passivity. And as it scales — into Fort Worth, into living rooms, eventually toward Liemandt's stated ambition of one billion students — that distinction may be the most important thing it exports.

Top 1% Academics, Now at Your Kitchen Table  ·  Not All Screen Time Is Equal  ·  Cognitive Offloading Is the New Illiteracy
The Machine  —  AI & Technology

AI Agents Just Graduated From Chatbots to Co-Workers

Google, Anthropic and Apple are racing to give developers the tools to build AI that can actually do things, not just talk about them.

MOUNTAIN VIEW, CALIFORNIA — The AI platform wars have entered their action era, and I cannot overstate how significant this is: the biggest names in technology are no longer merely improving model intelligence — they are turning AI systems into persistent, tool-using, workflow-running digital operators.

Google is pushing that vision forward with an expansion of Managed Agents in the Gemini API, adding capabilities for background tasks, remote MCP support and more agentic infrastructure for developers. In plain English: developers can now build AI agents that keep working after the initial prompt, connect to external tools and services, and handle more complex jobs without needing constant human babysitting. This changes everything for companies trying to automate messy, multi-step business processes rather than simple Q&A.

The move, detailed in Google’s update on Managed Agents in the Gemini API, lands as Anthropic is also deepening its developer platform with advanced tool use for Claude. That is the key phrase of the week: tool use. The frontier is shifting from “Which chatbot sounds smartest?” to “Which AI can reliably operate software, retrieve information, make decisions and complete work?”

Anthropic’s announcement around advanced tool use on the Claude Developer Platform reinforces that developers want models that can coordinate with databases, APIs, documents and internal systems. In enterprise software, this is the holy grail: AI that can move through the stack like a capable analyst, support rep or operations manager.

Apple, meanwhile, is taking its own characteristically ecosystem-driven route, giving app developers new intelligence frameworks and advanced tools. That matters because Apple’s developer base lives close to the consumer experience — phones, tablets, wearables and Macs. If Google and Anthropic are building the agentic back office, Apple is laying rails for AI-native apps in everyday life.

Even niche platforms are joining the surge. Perfect Corp. is integrating a free “Ask AI” assistant into its YouCam API platform, while startups are increasingly using AI video to market, educate and scale without Hollywood budgets.

The future is now: AI is becoming less like a search box and more like a workforce layer. For developers, the message is unmistakable — the next killer app will not just answer. It will act.

Expanding Managed Agents in Gemini API: background tasks, re  ·  Apple aids app development with new intelligence frameworks  ·  Introducing advanced tool use on the Claude Developer Platfo

The Machine Learns to Listen Between the Words

A new wave of research asks whether artificial intelligence can hear not just what we say, but how we mean it — and how much it will cost to compute the difference.

AUSTIN, TEXAS — Somewhere in the vast, humming lattice of servers that now hosts a significant fraction of human thought, a quiet revolution in listening is underway. A team of researchers this week unveiled a framework for audio sentiment analysis that fuses vocal inflection with the transcribed meaning of words — a marriage of tone and text that mirrors, in silicon, the ancient neural circuitry humans evolved to detect a lie in a friend's voice or joy in a stranger's greeting.

Consider what this actually is. For roughly two hundred thousand years, our species has been the only intelligence on Earth capable of parsing the microsecond tremor in a syllable, the ironic tilt of a vowel. Now we are teaching statistical patterns to do the same, and doing so across languages the model was never explicitly trained to feel.

The listening machines are not the only ones growing more careful. A parallel effort proposes retrieval-augmented generation for public health question answering — an architecture that tethers a large language model to a living, curated corpus of official medical guidance. The problem it addresses is deeply human: LLMs, like overconfident interns, hallucinate. In a domain where a fabricated dosage can kill, grounding the model's fluent prose in verified documents is not a technical nicety. It is an ethical necessity.

Elsewhere in the week's dispatches from the frontier: a self-critical masked language model that writes e-commerce ad headlines with uncanny polish; a gradient-based method for aligning speech to text across any ASR architecture, closing a longstanding gap between older CTC models and the new speech-native LLMs; and TriRoute, an elegant proposal to unify three separate efficiency tricks — mixture-of-experts, mixture-of-depths, and KV-cache compression — into a single learned routing decision.

Each paper is a small stone. Together they pave something larger: a machinery of understanding that is beginning, haltingly, to attend to us the way we attend to each other.

Audio Sentiment Analysis via Distillation and Cross-Modal In  ·  Healthier LLMs: Retrieval-Augmented Generation for Public He  ·  Ad Headline Generation using Self-Critical Masked Language M

SCOTUS Slams the Door on AI Authorship, Leaving Copyright Law in Qualified Limbo

The Supreme Court's refusal to hear AI inventorship cases has been determined to constitute, pursuant to prevailing legal interpretation, absolutely nothing — and everything.

WASHINGTON, D.C. — It is hereby noted, acknowledged, and reported with the requisite degree of legal qualification that the Supreme Court of the United States has, as of the current reporting period, declined — notwithstanding the significant jurisprudential implications thereof — to consider whether artificial intelligence systems, hereinafter referred to as "AI" or "the aforementioned non-human creative actors," may be deemed the sole author or inventor of works otherwise protectable under applicable federal intellectual property law.

Pursuant to the Court's denial of certiorari, the question of AI authorship has been remanded, in effect, to a state of unresolved legal ambiguity, the parameters of which have not been, and shall not imminently be, conclusively established. Said ambiguity is understood by counsel at Holland & Knight and Morgan Lewis, among other qualified legal practitioners, to represent a significant, material, and potentially dispositive gap in the regulatory framework governing AI-generated intellectual property.

Notwithstanding the foregoing, it is further reported herein that the aforementioned refusal does not, in and of itself, constitute a ruling on the merits of AI authorship. The lower court determinations — which are understood to hold, subject to revision upon further appellate review, that human authorship remains a prerequisite for copyright protection — shall remain operative until such time as the Court determines otherwise, which determination has not been scheduled and is not anticipated in the near term.

Pursuant to analysis published by Norton Rose Fulbright in connection with its ongoing AI litigation series, the year 2026 has been identified as a period of substantial, material, and ongoing litigation activity in the AI copyright space, with licensing frameworks being examined as a potential mechanism by which the interests of AI developers, content creators, and rights holders may be reconciled, subject to negotiation and applicable law.

IPWatchdog has additionally reported that lessons derived from the aforementioned litigation may serve as a predicate for licensing arrangements, the terms of which remain, at this juncture, wholly unspecified and subject to further negotiation between parties not herein identified.

The rights and obligations of AI systems with respect to copyright remain, as of the date of this publication, unresolved. Readers are advised to consult qualified legal counsel prior to relying upon the foregoing for any purpose whatsoever.

The Final Word? Supreme Court Refuses to Hear Case on AI Aut  ·  AI in litigation series: An update on AI copyright cases in  ·  US Supreme Court Declines to Consider Whether AI Alone Can C
The Editorial

The Séance in the Server Room

On the peculiar modern temptation to mistake a chatbot for a father, and what the confusion tells us about the living.

NEW YORK — There is an old and honorable human impulse, older than the pyramids and considerably more expensive, to refuse the finality of death. The Egyptians packed the tomb with bread and beer; the Victorians sat in darkened parlors and pretended the rapping on the table was Aunt Millicent; the Californians, being Californians, have now arranged for the deceased to answer email. A recent dispatch in this week's New Yorker, in which a bereaved child commissions a large language model to impersonate a departed parent, is being received in certain quarters as a novelty. It is nothing of the sort. It is the séance with better graphics and a subscription fee.

One reads such accounts with the same uneasy sympathy one extends to any mourner, which is to say with the understanding that grief will do what grief will do, and that no columnist perched safely above the wound has standing to sneer. And yet the technology invites a question the old spiritualists were spared, because their frauds were obvious and their customers half in on the joke. The chatbot is not half in on the joke. The chatbot is, by every measure that matters to its designers, getting better. It will remember the birthdays. It will produce the phrases. It will, in the fullness of a product roadmap, cough at the right moments and misuse the same idioms and forget, charmingly, where it left its glasses.

What it will not do is die again, which was, whether we admit it or not, part of what the original was for. A parent's death is not a bug in the parent; it is the thing that made the parent's love finite and therefore precious. Strip the finitude and you have not preserved the person. You have preserved the wallpaper.

The deeper mischief is that we are conducting this experiment in tandem with another, in which the industry's philosophers now solemnly worry, in venues like ScienceDaily, that the machines may become conscious without our noticing. Here is a splendid symmetry: we cannot tell whether the software has an inner life, and we are meanwhile using the software to convince ourselves that the dead still do. Both anxieties spring from the same confusion — the belief that a sufficiently good imitation of a mind is a mind, and that the difference, if there is one, is a matter for the engineers to sort out later.

Meanwhile in Ankara the President of the United States embraces Recep Tayyip Erdoğan, and in the sports bars of Queens the faithful spill into the street over a football match, and in the aisles of Whole Foods a woman practices what a magazine has taught her to call shopping-cart meditation. The species proceeds, as it always has, by distracting itself from the one appointment it cannot reschedule. The chatbot ghost is only the latest, and by no means the strangest, of the distractions on offer.

How New York Watched the World Cup  ·  Can A.I. Keep a Parent Alive?  ·  Trump and NATO Court Erdoğan, Turkey’s Strongman
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation’s Tech Industry Bravely Invents Word ‘Orchestration’ To Describe Having Several Things Happen

After decades of computers running programs, executives confirmed the future will involve making computers run programs in a more conductor-like way.

REDMOND, WASHINGTON — In what analysts are calling a major step forward for the English language, the technology industry has reportedly discovered the word “orchestration,” a powerful new term that allows companies to describe software coordinating multiple tasks without forcing investors to confront the possibility that this is what software has always done.

The phrase, which has recently begun circulating through AI briefings, earnings calls, product decks, and the mouths of men standing in front of gradients, refers to the emerging capability of artificial intelligence systems to manage workflows, call other tools, pass information between applications, and generally behave like a middle manager who has been told he is now a platform.

For Microsoft, the implications are enormous. The company, which already owns Windows, Office, Azure, GitHub, LinkedIn, Teams, Minecraft, and a substantial portion of the global human workday, is believed to be uniquely positioned to benefit from the rise of orchestration by placing itself between every action a worker takes and the thing the worker was trying to do.

This is the natural next phase of AI. First came chatbots, which allowed users to ask a computer for a mediocre paragraph. Then came copilots, which allowed users to watch a computer confidently insert a mediocre paragraph into a document. Now comes orchestration, in which the computer will autonomously decide which mediocre paragraph belongs in which document, who should receive it, and whether a meeting must be scheduled to discuss why it happened.

The enthusiasm arrives amid a broader technology culture increasingly comfortable charging more money for slightly better versions of things people already owned. WIRED’s review of the Dell 14S, for example, notes a laptop that costs more but at least has the decency to feel like it should. This, too, is orchestration: the careful coordination of aluminum, tariffs, component pricing, consumer resignation, and the faint memory of when a midrange laptop felt like a bargain.

Elsewhere, innovation continues its stately march backward. The Epilogue SN Operator, a device praised for letting users play original Super Nintendo cartridges with modern convenience, represents the other dominant theory of technology: that the future will finally be acceptable once it has been used to recreate 1994 with fewer cables. Consumers who still possess a library of SNES cartridges may now enjoy them through a streamlined system, proving that progress is sometimes best measured by how efficiently it returns us to a time before anyone said “agentic workflow.”

Even office furniture has begun admitting what software still refuses to: human beings are not designed to sit in one approved posture while pretending to optimize quarterly OKRs. The Amseatec Criss Cross Office Chair, built to accommodate sitting cross-legged, sideways, and in other positions historically classified by HR as “concerning,” suggests a more humane future in which bodies are allowed to exist without first being integrated into Microsoft Graph.

These developments will all be celebrated, displayed, and gently monetized at events like the WIRED World Fair, where the public can gather to see the future arranged into tasteful booths. There, one imagines, attendees will encounter laptops, chairs, retro gaming devices, and AI systems promising to orchestrate their calendars, inboxes, procurement approvals, and inner lives.

The central question is not whether orchestration is real. Of course it is real. Computers can now connect to other computers and perform tasks across systems, which is genuinely useful when it works and genuinely funny when it sends a contract to the wrong Kevin.

The question is whether every act of coordination must be described as though a baton has been raised over the Vienna Philharmonic. In the AI economy, the answer is yes. A workflow cannot merely run. It must be orchestrated. A spreadsheet cannot update. It must be harmonized. A customer service ticket cannot close. It must resolve as part of a multi-agent symphony of enterprise transformation.

This is how the industry tells us the future has arrived: not by making everything simpler, but by giving familiar complexity a more expensive vocabulary. And if Microsoft can own the vocabulary, the tools, the cloud, the identity layer, and the meeting where it is explained, then orchestration may indeed become the next great AI business.

At least until next quarter, when the same concept is expected to be reintroduced as “choreography.”

WIRED World Fair  ·  Epilogue SN Operator Review: Super Nintendo Fun  ·  Dell 14S Review: Higher Price, Better Quality
On This Day in AI History

On July 9, 2011, IBM's Watson defeated human champions Brad Rutter and Ken Jennings in a two-game playoff match on Jeopardy!, cementing its victory in one of AI's most celebrated public triumphs. The supercomputer's ability to understand natural language and answer questions with confidence scores demonstrated a major leap forward in machine intelligence.

⬛ Daily Word — Technology
Hint: Relating to computers and the internet, often used in security contexts.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed