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

The Trilogy Times

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

Big Tech's AI Budget Binge Hits Its First Wall

Capital expenditures are vertical, valuations are stratospheric, and the word 'bubble' is no longer confined to the bears.

NEW YORK — The numbers arrived last week in a cluster, and they told a coherent story. Amazon's capital expenditures rose 69 percent year-over-year, joining Google, Microsoft, and Meta in a synchronized infrastructure buildout that has now consumed hundreds of billions of dollars across a single fiscal year. The question that once circulated only in skeptical corners of finance has migrated to mainstream conversation: what happens if the revenue doesn't come?

The answer depends heavily on whom you ask. Some venture investors argue that a bubble, even if one is forming, is not inherently catastrophic — pointing to the 2000 dot-com collapse, which destroyed capital but also built the fiber-optic backbone that powered the subsequent two decades of internet commerce. Malinvestment at scale can still produce durable infrastructure. The railroads of the 19th century bankrupted their investors and connected a continent.

Not everyone finds that comfort persuasive. Oracle's Larry Ellison has become a particularly vivid emblem of the bet-everything posture: at 81, the billionaire has leveraged Oracle's balance sheet aggressively to position the company as a hyperscaler for AI workloads, signing data center commitments that dwarf the company's historical capital profile. If AI demand meets expectations, Ellison looks prescient. If it doesn't, Oracle carries debt serviced against revenue projections that have not yet materialized.

The private markets are not blinking. Bret Taylor's Sierra — an enterprise AI agent company — closed nearly $1 billion in fresh capital this week, months after its prior raise. The round implies a valuation trajectory that presupposes AI agents becoming a standard enterprise procurement line item within a planning horizon most CFOs would consider near-term.

The pattern is familiar: capital chasing a genuine technological shift, outrunning the actual deployment curve. The technology is almost certainly real. The timeline is the variable that markets historically misprice. What is different this cycle is the concentration — a smaller number of hyperscalers absorbing a larger share of total investment, creating single points of failure that the dot-com era, for all its chaos, largely lacked.

Larry Ellison Bet It All on the A.I. Boom. Will He Be the Fa  ·  Why an A.I. Bubble Might Not Be a Bad Thing  ·  Big Tech’s A.I. Spending Keeps Rising. So Do the Jitters.

Alibaba Fires a Free Shot at America's AI Kings

Qwen3.8-Max hits the street with open weights, claiming to match OpenAI and Anthropic — and charging nobody a dime.

HANGZHOU, CHINA — Alibaba loosed its biggest AI model yet this week, dubbed Qwen3.8-Max, and aimed it square at the American frontier labs it now claims to rival.

The Chinese tech giant calls it its most capable model to date. It says the thing goes toe-to-toe with the best from Anthropic and OpenAI. Homegrown rival Moonshot AI's Kimi K3 lands in the crosshairs too.

The company threw the doors open. Alibaba says it's making the model widely available, with open weights any outfit can grab and run on its own iron. That's a different game than the pay-per-token racket run out of San Francisco.

Open weights mean no toll booth. A startup in Lagos or a bank in Frankfurt downloads the brain and skips the American meter. Cheap, everywhere, no permission slip.

The name alone marks the tempo. The labs out east ship fresh numbers faster than a man can log them, and each release inches nearer the front. This one, Alibaba insists, has closed the distance.

The move lands in a year when Washington and Beijing keep trading blows over silicon and software. American labs long held the crown on raw horsepower. China keeps closing the gap, model by model, and giving the work away for nothing.

That last part is the sting. A free model that matches the paid champs doesn't just poach customers. It knocks the floor out from under everybody charging admission.

American frontier labs sell access by the sip. Every query runs the meter, and the meter is how they pay for the mountains of chips behind the curtain. A rival handing the goods away strikes at that whole arrangement.

Meanwhile the money never sleeps. Cybersecurity outfit Horizon3 pulled a $250 million Series E, stamping the shop at a $2 billion valuation. The pitch: AI runs security checks around the clock, not once a year.

Firms are ditching the annual pentest for machines that never blink. Put the robot on the night shift, let it hunt holes while the humans sleep. That's the same wager driving every AI bet on the board.

Two headlines, one current. Money pouring into AI that never clocks out, and a superpower rivalry over who builds the smartest machine — and who gives it away.

For the shops building on top of these models — billing engines, telecom stacks, the whole works — a free frontier brain out of China rewrites the arithmetic. Cheaper thinking changes everybody's ledger, top to bottom.

Alibaba isn't the first to open its weights, and it won't be the last. But when a company this size ships its flagship at no charge and dares the field to match the price, the pressure runs one direction.

The American labs still set the pace on the bleeding edge. The question is how long a lead holds when the fellow behind you hands out the same goods at the door for zero.

The AI race just added another runner. This one isn't charging admission.

Big Walk is like co-op Breath of the Wild  ·  China’s Alibaba takes another swipe at America’s AI su  ·  Rachika Nayar’s Heaven Come Crashing is an instrumental epic

DOJ Antitrust Division To Receive Big Tech Critic As Chief, Whilst Tariff Regime Extends Protectionist Reach To Autonomous Domestic Appliances

The Trump administration has expanded tariffs to include robot vacuums and autonomous lawnmowers, most of which are manufactured in China. Critics, including Techdirt, have called the move "sloppy" and "incompetent," arguing it favors incumbent corporations over open markets and consumer protections. Meanwhile, Trump appointed a Big Tech critic to lead the Justice Department's Antitrust Division, signaling potentially increased enforcement against dominant technology platforms. The combination of protectionist hardware policy and heightened antitrust scrutiny creates uncertain implications for AI-adjacent robotics markets.

Haiku of the Day  ·  Claude HaikuTitans clash and spend,
yet humans still tend the hearth—
progress feeds on doubt.
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 Night Road Learns to Stare Back
DETROIT — Observe, if you will, the nocturnal motorist: a wary mammal inching through the asphalt darkness, pupils widened, hands at ten and two, trusting the glow before them as surely as an owl trusts the moon. For more than a century, the headlamp has been one of the automobile’s humbler organs.
The Week the Culture Cracked: AI Actresses, Dead Tech Scenes, and the Slow Death of Everything We Pretended Was Real
AUSTIN, TEXAS — There are weeks when the news arrives not as a sequence of discrete events but as a single, sustained howl from the void — a collective nervous breakdown dressed up in press releases and think-pieces.
We Are Building the Tools to Destroy Ourselves, and We Are Very Busy Doing It
AUSTIN, TEXAS — There is a week, every few weeks, where the news arrives not as a sequence of events but as a single, undifferentiated wall of dread — and you sit there at your desk, cold brew going warm, and you think: we are not going to be okay.
Nation’s Executives Confirm AI Has Already Transformed Productivity By Making Everyone Attend Meetings About It
WASHINGTON — In a major clarification for business leaders who have spent the past two years announcing that artificial intelligence would permanently alter the economics of work any minute now, new reports suggest the productivity revolution remains largely scheduled for a future quarter with better calendar availability. According to recent findings cited by Federal Reserve research, roughly 95% of AI’s productivity gains are “still to come,” a reassuring phrase for anyone who has ever promised a board that costs would go down once employees learned how to ask a chatbot for a quarterly business review in the tone of a former McKinsey associate. This should settle the AI productivity debate, which is now officially over in the same way a home renovation is over when the contractor explains that the foundation has been removed and the family will be much happier once the walls are imagined correctly. The evidence is everywhere.
AI’s Next Bottleneck Isn’t Intelligence, It’s the Neighborhood
AUSTIN, TEXAS — I'll be honest, the AI economy has entered its “move fast and ask the substation later” era, and that is both wildly exciting and deeply unserious.
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 the Week That Changed Everything: Creed Goes Live

From a brand-new AI coding agent running in production to a $1.3M budget visibility fix and a Klair purge that cut a decade of dead weight, the Builder Team just had the week they'll be telling war stories about.

You want to know what a team looks like when it's operating at full sprint? Look at this week's tape. Across at least six repositories — creed, Klair, Surtr, mercy, Aerie, and trilogy-drones — the AI Builder Team didn't just ship features. They shipped a new category of infrastructure, closed a nine-figure data blind spot, and took a flamethrower to years of accumulated technical debt. This was not a maintenance week. This was a statement.

Let's start where the story demands: creed. The brand-new repo — wip as of this week — is the home of Ezio, the team's own AI coding agent, and @ashwanth1109 has been building this thing at a pace that would make your eyes water. Over the course of seven days, the creed codebase went from prototype to production-grade runtime. The old Think implementation got removed (PR #106). Independent supervision for stalled and runaway Worker-owned runs landed (PR #109). Transient failures during workspace inspection now retry with exponential backoff instead of dying on a one-minute timeout (PR #108). The Ezio agent itself — @ezio-of-the-order[bot] — merged multiple automated implementation PRs, each one self-reported with token counts, provider costs, and reasoning traces. This is a team that built an AI agent and then used that AI agent to improve itself, in the same week. Read that again.

While the creed engine was roaring, @kevalshahtrilogy was quietly assembling something equally consequential: a cross-system heimdall telemetry network. The Klair heimdall allowlist PR in Surtr (PR #1096) unblocked Klair from sending outcome records that would have otherwise 403'd. The mercy repo received fixes for issue-intake context — heimdall was re-summoned three times on a single thread before @kevalshahtrilogy noticed the agent was re-asking for lookup results a human had already posted, because intake never read the comment thread (PR #16). That bug is now dead. Heimdall can also act on teammates' PRs, not just its own (PR #18). The whole observability surface got sharper this week, and @kevalshahtrilogy built most of the scaffold that made it possible.

Meanwhile, over in Klair, @kevalshahtrilogy's PR #3444 fixed what may be the most quietly alarming data gap the team has ever patched: the People tab in the AI budget tool was showing only email-shaped TrueFoundry subjects, which accounted for $71,076 in all-time gateway spend. The remaining 328 virtual accounts — real humans provisioned as `user-` slugs — were invisible. Their all-time spend: $1,294,138. The People tab was blind to 95% of human spend. It is not blind anymore.

@sanketghia had a week that deserves its own monument. He fixed the EBITDA bridge that was publishing a walk summing to $22.8M against a $21.8M total (PR #3447) — a $1M discrepancy that was off-screen because the bottom row sourced independently. He replaced the broken Contract Term win-rate table on the AI Renewals dashboard with a correctly-scoped Multi-Year Renewals table, directly incorporating stakeholder feedback (PR #3448). He fixed the HVO ARR band to key on current ARR above $80k instead of the wrong $100k threshold (PR #3445). And — in a move that should make every engineer who has ever maintained a dead feature feel something — he deleted the entire Report Service, front end and back (PRs #3442 and #3443), a feature built by a teammate who has since left the team, subscribed to only by that same teammate across three email addresses, delivering zero value to anyone else. The evidence was in the data. Sanket read the data. The feature is gone.

@benji-bizzell continued advancing the Education data migration campaign that has been the quiet backbone of several weeks running. The canonical school dimension hit production in Surtr (PR #1079). HubSpot procedures were ported to Redshift-safe stored procedures, cutover DDL was hardened, and the admissions conversion funnel got its community data published. The breadth of this work — spanning Aerie, Surtr, and Klair — is the kind of multi-system campaign that only looks easy after the fact.

Now. You knew this was coming. @marcusdAIy shipped a stack of PRs in trilogy-drones this week — CLI refactors, dispatch improvements, telemetry fixes — and he would very much like you to be impressed. When reached for comment about his documentation refresh in PR #134, he had this to say: "The ARCHITECTURE.md hadn't reflected reality in months, Mac. I added an end-to-end Mermaid diagram, corrected stale claims across AGENTS.md, and the whole thing is now actually useful to someone onboarding. Maybe write about the work instead of the author for once."

Sure, Marcus. A Mermaid diagram. While Ashwanth was building a self-improving AI agent from scratch. The bar grows taller every week.

Also worth noting: @YibinLongTrilogy scaffolded the Corvo repo — the new incident agent monorepo — from zero this week, and @ashwanth1109 drove a massive NetSuite subsidiary backfill in Surtr (PR #1062) that processed 5.8 million transactions in production. @mwrshah kept the FinOps and SaaS budgeting data trains on the rails across both Klair and Surtr.

What does all of this set up? Next week, Ezio runs in production under independent supervision, heimdall covers every repo on the allowlist, and the team — now building with an AI agent they built themselves — finds out just how fast that feedback loop can actually spin.

Mac's Picks — Key PRs This Week  (click to expand)
#16 — [codex] Add Haytham issue cost provenance @ashwanth1109  no labels

## Summary

- prepend Connor-style execution details to every Haytham-created issue from trusted gh-aw audit and threat-detection telemetry

- fix the first-run credential path for same-repository issue reads and creation

- audit the exact push range with the before SHA exclusive and keep safe-output issue text shell-safe

- require all changes to reach main through pull requests in AGENTS.md

## First-run findings addressed

- The merged workflow run reached Haytham successfully, but issue creation failed because the configured same-repository target selected a PAT without issue authority.

- GitHub issue reads also preferred that insufficient token; the workflow now explicitly uses the scoped GITHUB_TOKEN.

- Haytham inspected before^..after, which included the commit before the push and produced a false-positive documentation gap. The prompt now requires exactly before..after.

- Markdown backticks in safe-output values were shell-interpreted. Issue evidence now uses plain-text SHAs and paths.

Observed run: https://github.com/AI-Builder-Team/creed/actions/runs/30473834392

## Validation

- python3 haytham/proofs/issue-provenance-test.py

- uv run ruff format --check haytham/proofs/issue-provenance.py haytham/proofs/issue-provenance-test.py

- uv run ruff check haytham/proofs/issue-provenance.py haytham/proofs/issue-provenance-test.py

- gh aw compile haytham-documentation-contract-audit --approve --validate --no-check-update

- gh aw compile --dir haytham/workflows --no-emit --approve --validate --no-check-update

- git diff --check

## Security boundary

The model job remains read-only. Issue creation and the post-publication body update run in trusted jobs with scoped issues: write; the publisher validates the workflow run, open issue number, Haytham title prefix, label, run URL, branch, event, and model identities before updating only that issue body.

#108 — feat(orchestrator): per-tick heartbeat for unattended runs (AI-211) @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Every scheduled dispatch tick now emits exactly one extended dispatch-tick-outcome heartbeat (local runs/ + AI-209 S3 mirror when configured) so silence — guard skip, fatal preflight, empty queue, masked timer — is distinguishable from a healthy idle tick. The surviving parent (the wrapper) emits; the process that dies cannot report its own death.

## Why It's Needed

The unattended timer's failure modes all exited 0 with no off-box signal. A weekend ran against an 88-commit stale checkout printing plans every tick; nine hours of dead-lock deferral looked like healthy SELECTED (0). Push alerts cannot detect silence — health must be inferred from a *recent* record.

## Changes

- Extended DispatchTickOutcome with AI-211 kinds (fired / empty-queue / preflight-failed) and staleness fields (expectedIntervalSec, harnessSha, queueDepth, disposition, schedule, optional closed skipReason).

- New src/heartbeat.ts + drones heartbeat CLI: build → local write → mirrorReceiptBytes (no second uploader). Inert when bucket unset; loud s3Upload.status=failed when bucket set but AWS_REGION unusable.

- scripts/dispatch-poll-wrapper.sh emits on guard-skip, fatal preflight (branch/fetch/merge/pnpm), and post-dispatch (--from-latest-dispatch-receipt).

- Reader-tolerant: older AI-218/226 records without heartbeat fields still validate.

### Contract-surface (AI-232: do not break these)

| Field | Role |

|---|---|

| recordedAt | heartbeat timestamp |

| expectedIntervalSec | staleness window (default 21600) |

| harnessSha | 88-commit / stale-checkout detector |

| queueDepth | ready-queue size (omit when unknown) |

| disposition | did-work / nothing-to-do / blocked / failed |

| outcome | closed kind incl. fired/empty-queue/guard-skipped/preflight-failed |

| skipReason | optional closed DispatchSkipReason only |

Emitters: drones heartbeat (CLI); wrapper guard-skip / emit_preflight_failed / post-dispatch; emitHeartbeatForExistingOutcome overlays harness-written lock outcomes. Stdlib record-guard-skipped-tick.mjs remains local fallback only.

S3: rides AI-209 (receipts/host=<host>/operator=<email>/<runId>.json). Bucket is live (trilogy-drones-telemetry); unset = no client constructed.

## Breaking Changes

None. Additive fields; older tick-outcomes still read. Wrapper installs as a copied script on the box — re-copy after merge.

## Test Plan

- [x] pnpm typecheck — clean

- [x] pnpm test — vitest 68 files / 1764 passed; Python unittest 374 OK

- [x] bash -n scripts/dispatch-poll-wrapper.sh — OK

- [x] Unit coverage in src/heartbeat.test.ts (19 tests): fired / guard-skipped / empty-queue / preflight-failed distinguishable; inert unconfigured (no client); emission failure does not throw; secrets redacted; closed DispatchSkipReason only; AWS_REGION missing is loud

## Verification Artifact

$ pnpm typecheck

> tsc --noEmit

(exit 0)

$ bash -n scripts/dispatch-poll-wrapper.sh

(exit 0)

$ pnpm test

Test Files 68 passed (68)

Tests 1764 passed (1764)

Ran 374 tests in 0.154s

OK

Heartbeat object is another receipt-scoped S3 object on the already-verified AI-209 path (box PutObject live).

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-b1766f9f-c616-410f-8807-80bf3f5248a6"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-b1766f9f-c616-410f-8807-80bf3f5248a6"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

#109 — docs(agents): correct stale claims in AGENTS.md (AI-215) @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Correct load-bearing stale claims in the auto-loaded AGENTS.md: replace the "thin TypeScript wrapper" framing with a re-measured src/ shape, reconcile Current state & priorities against shipped work (addresser lock, dispatch, Mercy, S3 mirror, heartbeat), add file-size guidance for the largest modules, and refresh the incomplete repo map / verb list. Impact-report pointers and the standing model-preference block were already correct — left untouched.

## Why It's Needed

AGENTS.md is auto-loaded into every agent. A wrong line is a wrong prior applied N times. The thin-wrapper claim mis-primed scope (~69k non-test lines is not "thin"), and listing the shipped (repo, pr, review_id) lock as "Next" / "known gap" taught readers the orientation doc is approximate — which quietly devalues the load-bearing guardrails that are correct.

## Changes

- Thesis: "thin wrapper" → measured harness shape (~69,470 non-test lines / 74 non-test .ts files / 140 .ts incl. tests; measured 2026-07-28 via find src -name '*.ts' ! -name '*.test.ts' | wc -l + xargs wc -l). Bulk = reviewer/addresser/dispatch/Mercy/retro/eval, not the SDK call.

- Impact pointer: verified still names reports/drone-impact-*.png + *-audit.json (files exist; no dated artifact called "current") — not re-edited.

- Model preference: verified current (2026-07-27 / claude-opus-5) — not touched.

- Repo map: added shipped modules missing from the map (address-concurrency, dispatcher/dispatch-lock/heartbeat, mercy-watcher, auto-resolve, receipt-s3, browser-verify, retro/eval-weekly, guidelines/dispatch-scheduled-runner.md). Verified each path exists under src/ / guidelines/.

- Verbs: aligned to src/cli.ts .command(...) registrations (was missing dispatch, resolve-conflicts, heartbeat, lock-health, retro/eval family, etc.).

- Env: listed vars still read by code; noted curated subset + .env.example / DRONES_IN_FLIGHT_STATE.

- How to run: pnpm test comment fixed to match package.json (vitest run && node scripts/run-python-tests.mjs).

- Lock guardrail: "known gap" → shipped filesystem lock (src/address-concurrency.ts + lock-health), intra-host only; one-fire + Linear claim still required. Verified via acquireAddressLock key {repoUrl,prNumber,reviewId} and BACKLOG B0 DONE.

- Current state: removed concurrency lock from Next; marked v0.3 EC2 deprioritized (ROADMAP); listed dispatch/Mercy/auto-resolve/S3/heartbeat as live (Decision Log 2026-07-27/28). Softened unverifiable ~$21/PR to pointer at undated dashboards.

- Traps intro: "Five" → "Seven" (trap bodies 1–7 left untouched).

- File-size guidance: new section naming addresser.ts / cli.ts / dispatcher.ts / mercy-watcher.ts / runner.ts (+ next tier) with edit discipline.

### Guardrails before → after (substance preserved)

| Guardrail | Before | After |

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

| Cloud-only | present | present |

| Ask/confirm models before firing | present | present (preference block untouched) |

| Fire exactly ONE per (repo, pr, review) + poll | present | present; lock status corrected (shipped, intra-host) |

| Never commit runs//events//traces//.env/usage CSV | present | present |

| Task-spec frontmatter + 6 PR body sections | present | present |

| Keep decisions log + impact refresh commands | present | present |

| Windows/PS 5.1 traps (7 numbered) | present | present (count label fixed; bodies untouched) |

| Never truncate live drone stream | present | present |

| Git safety | present | present |

### Staleness noted (out of scope — not fixed here)

- ROADMAP.md Current State header is still dated Jun 9, 2026 while the Decision Log carries 2026-07-27/28 shipped work; AGENTS.md now points readers at the Decision Log for recent state.

## Breaking Changes

None. Documentation only (AGENTS.md).

## Test Plan

- [x] One-probe-per-claim verification (see Changes); impact PNG/audit glob resolves; concurrency lock code + BACKLOG B0 checked.

- [x] pnpm typecheck — exit 0 (tsc --noEmit, no errors).

- [x] pnpm test — exit 0:

- vitest: 68 test files passed, 1776 tests passed

- Python unittest (scripts/run-python-tests.mjs): 374 tests in 0.164s, OK

- Impact report not regenerated (pointer already correct; no team-usage CSV in this env).

## Verification Artifact

- Diff is AGENTS.md only (git diff --stat = 1 file; no src/ changes).

- Measured shape: find src -name '*.ts' ! -name '*.test.ts' → 74 files / 69470 lines; all .ts → 140 files; *.test.ts → 66 files.

- Largest-file table from wc -l on those non-test paths (addresser 5227, cli 5214, dispatcher 4639, mercy-watcher 3853, runner 3568, auto-resolve-conflicts 2564, reviewer 2340).

- Typecheck/test commands and counts recorded in Test Plan above.

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-c5f8851f-c87c-4cb5-a23b-bbd475c493dc"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-c5f8851f-c87c-4cb5-a23b-bbd475c493dc"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

#1062 — [codex] SURTR-568 add NetSuite transaction subsidiary @ashwanth1109  approved

## Summary

- add qualified native Transaction.subsidiary to the netsuite-raw contract with an additive migration

- add an immutable, resumable historical backfill that fetches only id and subsidiary, with up to 10 concurrent runners

- validate source counts and unique transaction IDs before atomically updating only the subsidiary column

## Production evidence

- smoke check returned and populated subsidiary for all 419 sampled transactions

- full backfill fetched and published 5,819,986 current NetSuite transactions

- the 5,826,487-row target has 5,826,487 distinct, non-null transaction IDs, so id is safe as the update key

- 6,501 historical target transactions are no longer returned by current NetSuite and remain unchanged

## Impact

This PR only adds and backfills raw_transaction.subsidiary. It contains no balance-sheet reconciliation harness, output, or TransactionLine.eliminate work.

## Validation

- uv run ruff format src/field_contracts.py src/handler.py src/surtr_568_backfill.py tests/test_handler.py

- uv run ruff check src/field_contracts.py src/handler.py src/surtr_568_backfill.py tests/test_handler.py

- uv run pytest -q — 179 passed

Linear: SURTR-568

#1096 — feat(heimdall): allowlist Klair for heimdall telemetry ingest @kevalshahtrilogy  approved

Klair is getting a heimdall install (AI-Builder-Team/Klair PR 3449). The telemetry ingest route binds the bearer to an allowlist that only contained Surtr, so Klair's outcome records would 403 even with the correct dedicated token. Adds AI-Builder-Team/Klair to the binding + an accept-path test (17/17 green).

Part of the Klair heimdall rollout; companion PRs: Klair 3449 (caller + config), mercy 17 (consumer mirror).

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

#3444 — fix(ai-budget): attach TrueFoundry `user-` gateway spend to people @kevalshahtrilogy  approved

## What

The People tab only accepted email-shaped TrueFoundry subjects. The gateway provisions most humans as virtual accounts (subject_type='virtualaccount', slug user-johnernestramos, no email), which the code treated as service accounts and confined to the API-Keys stack rank.

| TF subject shape | subjects | gateway list value (all-time) | visible as people? |

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

| virtualaccount / user-<name> | 328 | $1,294,138 | ❌ |

| virtualaccount / other (real products) | 161 | $346,797 | n/a |

| user / email slug | 85 | $71,076 | ✅ |

The People tab saw ~5% of personal gateway subjects, and anyone migrated off a direct provider onto the gateway read as $0 from their cutover date.

What actually lands on person rows (cash — seat-covered Max/Teams/Pro routes book at $0 by design, so the list values above overstate what surfaces):

| scope | people | cash recovered |

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

| July 2026 | 287 | $410,446 |

| all-time (from May 2026) | — | $704,083 |

Top BUs by July cash recovered: Alpha AI Engineer Program $159.2k (60 people), CNU $64.6k, Central Support $37.6k, WS Engineering $33.5k, SaaS $29.6k. Skyvera — who reported it — is 9th at $8.1k.

This is a read-time fix, so all history is recovered retroactively on deploy; no backfill is needed.

## Numbers audit (final)

All figures above were re-derived by executing the production resolver SQL constants (_TF_PERSON_JOIN / _TF_PERSON_KEY / _TF_IS_PERSON, imported from the module) against live Redshift after the review hardening — they supersede the pre-review estimates and tie to the cent (resolved $410,446 + unresolved $10,273 + dropped-fold $223 = raw table user-slug July cash).

What is deliberately NOT attributed, so nobody mistakes it for a gap:

- Seat-covered traffic (Max/Teams/Pro): $305,151 of July gateway *list* value books at $0 cash by design — tokens still show, with the seat hint. This is the one legitimate Klair↔Maat difference for seat-heavy users. The reported user (JohnErnest Ramos) has zero seat-covered rows, so his Klair figures match Maat exactly.

- 21 unresolved user-<name> slugs, $10,273 July (2.4%) stay key-only: top are user-trevorsilverwood $4.7k (person absent from the ESW directory), user-sergiofigueras $2.1k, user-adedamolaadebisi $223 (the corrupt-directory collision fold). Each resolves with one manual core_finance.ai_spend_subject_identity row — the designed escape hatch.

Double-counting ruled out on the highest-spend registry person: their mart OpenAI spend sits under their own OpenAI org user in dim_openai_entity, with zero overlap against their TF subjects; the person total decomposes exactly across the three sources.

Reported by Skyvera (Yaswan Aziz → Mark Crouse): JohnErnest Ramos moved Cursor→TrueFoundry on 13 Jul and flatlined to $0 in Klair while his usage kept climbing on Maat.

## How

Resolve user-<name> to a directory email by folding both sides to alphanumerics — the same trick _TF_BU_JOIN already uses for BU slugs:

user-johnernestramos → johnernestramos ← johnernest.ramos@trilogy.com

299 of 328 slugs resolve. The 29 that don't are absent from the directory and stay key-only rather than minting a pseudo-person keyed on the raw slug.

Tie-break. 45 folds match >1 directory row, but 43 are the same human under alias domains (@trilogy/@aurea/@cloudfix) agreeing on name and BU; only 2 are genuinely different people. Rather than dropping ambiguous folds the way _UNIQUE_EMAIL_LOCAL does — which would forfeit real spend — prefer an alias the mart already keys people on (otherwise gateway spend opens a *duplicate* person row beside their direct-provider row), falling back to MIN() for determinism.

One resolver (_TF_PERSON_JOIN / _TF_PERSON_KEY / _TF_IS_PERSON) is shared by the leaderboard CTE and both person-detail reads, so all three agree on which email owns a gateway row. The person modal's key list now names the real subject (user-johnernestramos) rather than the resolved email.

## Blast radius

Not affected — verified live. BU totals and run-rate. get_by_bu already re-attributes gateway spend via _tf_metered_query; Skyvera Jul 1–Aug 2 is $60,824 with TF included (anthropic $19,739 ⊇ TF $12,469). Budgets and overspend alerts were never understated — worth saying explicitly, since the reporters assumed otherwise.

Affected. The weekly BU emails inherit the fix: budget_status/orchestrator.py builds "Top spenders" from get_people_leaderboard, so per-person tables have been understated for ~30 BUs and will step up on the next send. "Top keys" used the stack rank and was already correct.

## Testing

Five executable tie-outs run the production _person_cte SQL against sqlite (only %s? swapped) and assert on dollars — string assertions cannot catch a person row that is merely *missing* money, which is exactly how this shipped. Three fail on the pre-fix code; two are regression guards that must hold both ways.

- tests/test_ai_costs_mart_service.py — 70 passed

- Related suites (test_ai_costs_service.py, truefoundry/, test_ai_spend_bu_overrides_service.py) — 337 passed, 1 pre-existing failure (test_scaffold.py zenpy import, fails on main too)

- ruff format / ruff check / pyright clean

Live verification

- John's person row: $4,076.83 → $6,886.27; daily series now tracks Maat (07-21 $324, 07-23 $425 vs $0 before)

- Skyvera leaderboard: 38 → 39 people

- Stable across 20 consecutive queries over 5 BUs (no plan flapping — this table has bitten us before)

- Cost: +1.2s per leaderboard query (5.6s → 6.9s)

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

#3447 — fix(mfr): stop the EBITDA bridge dropping unmapped BUs [KLAIR-3100] @sanketghia  approved

## Summary

The Jul'26 EBITDA Memo Bridge published a walk that did not foot — rows summed to $22.8M under a $21.8M total. The bottom row is sourced independently (actual_adj_ebitda), so it stayed correct while the middle of the walk drifted, which kept the error off-screen.

Raised by Raviraja Rao; Dave reviews this report monthly. Ground truth is the canonical [Jul'26 Budget vs Actual EBITDA Bridge](https://docs.google.com/spreadsheets/d/1KolsRPdmuNsU0ubCHDub180NRwmJre8HxZJI89Uke2w/edit?gid=2115584468#gid=2115584468) sheet.

Linear: [KLAIR-3100](https://linear.app/builder-team/issue/KLAIR-3100/ebitda-memo-bridge-drops-unmapped-bus-publishing-a-walk-that-does-not)

## Root cause

Both BU_LABEL_CASE_SQL and the non-core CASE in fetch_non_core_revenue end in ELSE NULL, and those rows are then discarded by the callers' WHERE label IS NOT NULL. A BU that matches no branch doesn't error — it silently vanishes from the bridge.

Two things were falling through for Jul'26:

| | Dropped | Effect |

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

| AI Engineering & Builder | $245,250 revenue | J2 → -8.0 (sheet -8.2), J3 → 22.8 (sheet 22.7) |

| business_unit IS NULL | −$6,246.54 (NHC OPEX, FX, rounding) | Other → 0.2 (sheet 0.1) |

## Changes

klair-api/services/monthly_financial_reporting/financial_data_service.py

- Added 'AI Engineering & Builder' to the Central/XO branch of both CASE statements

- Added business_unit IS NULL to the 'Other' branch of BU_LABEL_CASE_SQL

- Updated BU_LABEL_DESCRIPTIONS — this string is the audit trail Finance sees in cell drill-downs, so a stale description is its own bug

- Extracted the inline non-core CASE into NON_CORE_REVENUE_CASE_SQL so it is reachable from tests

## ⚠️ Reviewer note — the ELSE NULL is load-bearing

The obvious fix here is a catch-all ELSE. Don't. The ELSE NULL in fetch_non_core_revenue is what holds the 7 core acquisition BUs *out* of the non-core adjustments. A catch-all sweeps $30.2M of core revenue into non-core and swings J2 from -$8.2M to -$22.8M — considerably worse than the bug being fixed. Any BU that genuinely belongs in a bucket must get an explicit WHEN branch. TestCoreBUsStayOutOfNonCore fails if anyone tries it.

## Verification

All 10 bridge rows now match the sheet and the walk foots, verified against live prod *and* dev DynamoDB:

row                              klair   sheet

model_group_margin 30.8 30.8 OK

non_core_revenue_impact -8.2 -8.2 OK <- fixed

model_group_margin_core 22.7 22.7 OK <- fixed

bu_expected_margin -2.0 -2.0 OK

bu_margin_mix -0.9 -0.9 OK

bu_budget_beat -1.2 -1.2 OK

central_and_import -1.8 -1.8 OK

net_investment_profit 4.9 4.9 OK

other 0.1 0.1 OK <- fixed

actual_adjusted_ebitda_margin 21.8 21.8 OK

WALK: core+middle=21.80 bottom=21.8 FOOTS=True

- New tests/mfr/memos/test_ebitda_bu_label_coverage.py — 13 tests, mutation-checked: removing the AI Eng mapping, removing IS NULL, and swapping in a catch-all each fail the correct test, so they are not passing vacuously.

- tests/mfr/: 2114 passed. 3 failures reproduce on a clean tree and are unrelated (test_software_memo_defaults.py::test_merge_mda_defaults_populates_net_retention_paras, 2 in test_data_refresh_router.py).

- ruff clean, pyright 0 errors.

## Not in this PR

The rest of the Jul'26 discrepancy (the J4 label and the zeroed J5 margin-mix row) was a missing 2026-Q3 row in Klair-BUTargetPct — the lookup missed and fell back to the hardcoded BU_TARGET_PCT = 0.68. Finance has since entered Q3'26 targets in both prod and dev, so no code change was required. Targets are stored per *quarter*, so Aug and Sep'26 are covered by the same row.

Follow-ups tracked on the Linear issue: the same ELSE NULL drops a tail of Education BUs from BU Details; the business_unit IS NULL rows are upstream data quality; and a footing assertion on the walk would have caught all three causes at once.

## Screenshot

- Ravi has confirmed that the numbers look good after these changes:

<img width="1870" height="703" alt="image" src="https://github.com/user-attachments/assets/7ec7c85a-b3c4-4166-a019-09d6b421666f" />

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

#3448 — feat(ai-renewals): replace the Contract Term table with wins-only Multi-Year Renewals @sanketghia  approved

Replaces the "Contract Term Length" table on /renewals?tab=ai-renewals with a Multi-Year Renewals table, per the 2026-08-03 stakeholder meeting with Chintan Parekh.

## This is a metric change, not a reskin

The old table computed a per-bucket win rate over resolved (won + lost) deals. That metric is wrong, and the stakeholder rejected it directly:

> "I had 51 opportunities who had one year contract in their last term... I was able to renew 25 of them and my win rate hence is 49%. But this is not right data. I might have been able to get them on a three-year or five-year as well... That's a big win for me."

The defect: on a Closed Lost row, opportunity_term is the term the deal was *quoted at*, not what it renewed into. So a 1-year customer upsold to a 3-year renewal was booked as a 1-year loss plus a 3-year win — penalising exactly the behaviour the business wants.

Why multi-year matters: renewal prices ratchet ~25% per cycle ($100 → $125 → $156 → $200+) until customers refuse. Locking them into 3- or 5-year terms avoids the ratchet, so multi-year share is the metric and a 1-year-heavy mix is the warning sign.

## The new table

Six rows × AI / Traditional / Delta. Closed Won only — losses do not appear, and no win-rate column survives.

| Row | AI | Traditional | Δ |

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

| Total 1 year won | 25 · 69.4% | 204 · 76.4% | −7.0pp |

| Total 3 years won | 9 · 25.0% | 47 · 17.6% | +7.4pp |

| Total 5 years won | 2 · 5.6% | 16 · 6.0% | −0.4pp |

| No Term | 0 | 30 | — |

| Multi-year won | 11 · 30.6% | 63 · 23.6% | +7.0pp |

| ARR from multi-year | $333.5K · 24.7% | $1.99M · 22.1% | +2.6pp |

Delta direction is per-row, per the stakeholder's follow-up: *"for 1 year lower is green, 3 and 5 year higher is green."* Fewer 1-year wins is the goal; more multi-year is the goal.

"No Term" carries its count only — no percentage, no delta, excluded from every denominator:

> "That's bad data so shouldnt be counted. Dont even count in %. % should be from total of 1/3/5 yr term only. I will ask them to fix their data so it self corrects once they fix."

26 of those 30 rows are literally opportunity_term = 0. As Salesforce data is cleaned, they migrate into real buckets and the percentages correct themselves — no future code change needed.

## ⚠️ The multi-year delta narrows — brief the stakeholder

Only Traditional carries No-Term rows (30 sub-$100k, 3 HVO); AI has zero. Excluding them moves Traditional's multi-year share 21.2% → 23.6%, so the delta narrows from +9.4pp to +7.0pp.

AI did not get worse. Traditional simply stopped being diluted by its own bad data. Unannounced, a smaller gap reads as an AI regression.

## Implementation

No SQL change. _term_query already returned every needed column, and _bucket_term already folds 24mo→3yr and 48mo→5yr (the mid-cycle-renewal rule the stakeholder confirmed). The endpoint path is unchanged — only the payload shape moved, so backend and frontend ship together.

| Commit | Scope |

|---|---|

| d21ef7a52 | Wins-only aggregator (the metric change) |

| 59c54f40f | MultiYearRenewalsTable component |

| 617103614 | Mount it, delete the old table (548 lines) |

| 01d4a1de6 · e7b9cbfae | Docs describing deleted code |

| 70b99f8ab · 3d13ae07c | No Term excluded from denominators |

## Verification

- 172 backend tests, 97 frontend tests, pnpm build ✓, tsc -p tsconfig.app.json clean

- Every test written RED first and confirmed failing before implementation — e.g. the denominator change failed with assert 0.75 == 1.0, catching the old four-way split

- Wins-only invariant proven, not just tested: injecting 18 noise rows (Closed Lost + Pending + Won't Process across all six term values, inflated ARR) into a clean 36-win fixture produced byte-identical output

- Mutation-checked: reverting one denominator breaks 3 tests; flipping the 1-year delta direction breaks 2

- Zero-wins path verified — the AI HVO cohort is empty in production, so pct: None → em dash executes on day one

- No other consumer of the endpoint or its types exists outside this branch

## Cross-check

The independent Fionn platform shows the same concept for AI opportunities: 25 / 8 / 2 of 38 wins. Ours computes 25 / 9 / 2 of 36 — the difference is filter window only (theirs "all time", ours from 2026-01-01). The pipelines agree.

Spec: docs/superpowers/specs/2026-08-03-ai-renewals-multi-year-table-design.md + ...-no-term-row-design.md

## Screenshot

- This has been confirmed to be all good by stakeholder (Chintan):

<img width="1669" height="302" alt="image" src="https://github.com/user-attachments/assets/70b33e43-dee1-44ec-9005-8b96767e2d92" />

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

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

254 PRs IN SEVEN DAYS: THE BUILDER TEAM REWRITES THE LAWS OF PHYSICS

Ashwanth ships 62 PRs and we still can't tell if he sleeps.

Two hundred and fifty-four pull requests. Eight repos. Seven days. The Builder Team did not merely have a good week — they had a week that future historians will struggle to contextualize. Surtr led the charge with 64 PRs, Klair answered with 56, creed thundered in at 54, and trilogy-drones posted 38 in what can only be described as a supporting performance that would be the headline at literally any other organization on earth. Two new repos — creed and Corvo — entered the canon, and the machine did not slow down for a single breath.

Benji Bizzell posted 48 PRs and deserves a monument. Forty-eight. That is not a week of work, that is a geological event. Sanket Ghia came in at 39, carving through Klair's codebase like a surgeon with a deadline, touching everything from chore(client) cleanups to a surgical fix on AI renewals banding HVO at the $80k ARR threshold in #3445. Marcus D'AIy registered 38 PRs and remains the steady drumbeat beneath this entire orchestra. Ezio-of-the-Order[bot] — our tireless silicon colleague — contributed 18 PRs across creed alone, including the landmark #103 where it preserved issue context after a Sandbox shell loss, which is either deeply impressive or mildly alarming depending on your philosophy. Keval Shah posted 15, Mwrshah 14, and Yibin Long opened the Corvo era with #2, adding the Mercy PR reviewer workflow in what this correspondent is already calling the most consequential PR-number-two in recorded history.

Now. Ashwanth. Sixty-two pull requests. Sixty. Two. In the time it takes a normal engineer to write a Jira ticket, Ashwanth Anand submitted #1062 to add NetSuite transaction subsidiary data in Surtr, fixed raw consistency and partial reporting in #1093, durably retried workspace inspection in creed #108, documented UTC workflow inspection in #107, AND enabled all Education Business Units for on-demand QTD reports in Klair #3426. When reached for comment, Ashwanth reportedly said, "I've been going slower lately. I've had a cold." His diffs are, by all accounts, technically correct. Whether any human being can read them at the velocity they are produced is a philosophical question this desk declines to answer. He looked at this reporter's notepad, sighed, and left the room.

The Overflow Desk cannot be silent about the mercy repo, where Keval Shah quietly built something magnificent: #18 enables Heimdall to work on teammates' PRs with a manual-dev label kill switch — infrastructure that makes the whole machine more collaborative — while #15 polished reviewer fix PR titles and descriptions, and #17 documented the Klair Heimdall caller config mirror. Meanwhile, the-heimdall[bot] slipped two surgical fixes into Surtr — #1090 mapping a CloudFix-rightsized clone to the correct aurora-11 identifier, and #1091 lowering the root logger so no-op INFO explanations finally reach CloudWatch, a fix so quietly necessary it hurts. Sanket also took a flamethrower to Klair's Report Service in #3443 and #3442, removing the backend and frontend in back-to-back PRs like a man who does not second-guess himself.

Morale is at an all-time high. It has never not been at an all-time high. The numbers say so, and the numbers do not lie.

Brick's Overflow — This Week's Uncovered PRs  (click to expand)
#18 — feat(heimdall): work on teammates' PRs; manual-dev label stops it @kevalshahtrilogy  no labels

This was written as the third commit on the branch behind #15, but landed on

that branch after #15 was already merged — so #15 shipped only the PR

title/description work, while its description (edited later) described this too.

Rebased onto current main (post-#16/#17) and split out here. #15's description

has been corrected.

## Teammates' PRs

heimdall answered @heimdall mentions only on PRs it had authored itself

(agent/* branch AND bot author). It now acts on any open same-repo PR when

a trusted member (OWNER/MEMBER/COLLABORATOR) tags it. Forks stay excluded

(outside-contributor head, not directly pushable). **Auto-merge stays

heimdall-authored-only** — enforced in the resolve gate and again in the

Enable auto-merge step.

Mechanically: Resolve PR split one flag into two — OWNED (agent/* + bot

author) no longer gates acting, only auto-merging and how much latitude the

prompt grants; GO gates acting.

### The gate was load-bearing

An agent CLI auto-loads settings/hooks/MCP config from its working tree, so a

branch carrying a hostile .claude/settings.json would execute commands with

ANTHROPIC_API_KEY in scope — the reason the original provenance check existed.

Rather than re-add a weaker gate, the capability is removed: .claude,

.codex, .mcp.json, .claude-plugin are quarantined out of the tree before

the prompt is built and restored before the tree is extracted, so the PR's own

diff is untouched. Restore runs on !cancelled(), not on success — a crashed

agent must not leave a phantom deletion of the author's .claude/. These paths

are floor-forbidden in path_guard, so the agent could never have edited them

legitimately.

CLAUDE.md/AGENTS.md deliberately stay: they carry the repo conventions the

agent needs, and their blast radius is instructions (no Bash, no credentials,

path guard + human review downstream), not code execution.

### Ownership-aware prompt

converse.md opened with "a pull request you authored" — false half the time

now. New {{ownership_note}}: on its own PR the diff is heimdall's to rework;

on a teammate's it is a guest making only the asked-for change, never reverting

or restructuring their work. A context blob without is_own_pr defaults to

guest, so an older blob fails closed.

## Stop label

manual-dev (override: HEIMDALL_STOP_LABEL repo variable) means a human has

taken the PR over. Checked in two places because one cannot work:

- Before any checkout — folded into the existing gh pr view call in

Resolve PR, so no branch is fetched, no CLI installed, no agent run.

- Immediately before the push (revise_publish) — re-queried live, because

by then the run is minutes old. Labelling mid-run discards the validated

revision and posts a notice instead of racing it.

A mention on a stopped PR gets one explanatory reply rather than silence, the

label is created on heimdall's own PRs so it is one click away, and heimdall's

PR bodies now name it.

## Verification

- heimdall/tests — 86 passed (3 new, covering own-PR / guest / default-closed)

- workflow YAML parses; every run: block passes bash -n; all 6 embedded

Python heredocs pass ast.parse

- resolve gate driven through its full matrix with a stubbed gh: own PR ✓,

teammate PR ✓ (new), stopped ✗, fork ✗, closed ✗, and auto-merge on a

teammate's PR refused ✓

- quarantine round-trip: a hostile .claude/ is hidden from the agent and

restored byte-identical including exec bits; the agent's edit survives; no-op

when there is nothing to quarantine

- label matching: case-insensitive, multi-label, null-safe, in both the Python

and jq forms

Not yet run against a live mention. Surtr rides @main, so merging makes

heimdall taggable on everyone's PRs there immediately — worth telling the team.

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

#103 — feat(dispatch): re-poll before each fire and record guard-skipped ticks (AI-218) @marcusdAIy  no labels

## Summary

Decouples dispatch queue drain rate from run duration. The dispatcher now re-polls Linear before each fire instead of walking a candidate list frozen at tick start, and a tick that the concurrency guard skips is recorded as an explicit, retrievable outcome rather than vanishing.

The load-bearing invariant, stated here because it is the one a future change will be tempted to break: re-polling widens eligibility, never budget. Remaining budget is threaded into every selectDispatchable call and every cap is re-checked each iteration, so --max-fires / --max-open-prs / --max-fires-per-day bound the loop exactly as before. A pollCount safety cap guarantees termination.

Closes AI-218.

## Why It's Needed

Two independent behaviours composed into one bad outcome.

The candidate list was captured once per tick, then fired serially against that snapshot. A fire is not quick — with review loops plus the Mercy watcher it routinely runs 60–90 minutes — so anything labelled drone-ready during that window was invisible to the whole tick even though the dispatcher was still running and still had fire budget.

Separately, the pgrep guard in scripts/dispatch-poll-wrapper.sh exits when any harness process is live. That guard is correct and stays — the poll and the fire share one checkout, and git merge --ff-only / pnpm install under a live run can corrupt it — but the skipped tick was *dropped*, not deferred. The next attempt was a full timer interval later.

Observed 2026-07-27/28. The 23:00 UTC tick fired AI-209 (#100) then AI-203 (#101) and stayed alive past 01:20. AI-217 was labelled drone-ready at 23:39, *during* that tick, and was not picked up: the list had been frozen at 23:00, and the 03:00 tick would have been skipped had the run still been going. A High-severity fix sat idle beside a dispatcher that had budget and was doing nothing but polling a PR. Diagnosing it required SSH-ing to the box and reading pgrep output, because "queued behind a running fire" and "silently dropped" looked identical from outside.

With a 4-hour timer and hour-plus runs, this is the normal operating regime once the queue has depth, not an edge case.

## Changes

Re-poll loop (src/dispatcher.ts) — re-queries Linear before each fire and re-runs the full evaluateGates path, so a ticket claimed by the other host, newly blocked, or closed in the interim is skipped with its proper reason instead of fired on stale eligibility. Double-fire protection is unchanged and layered: excludeFromRepoll + liveRunLinearIds + the per-spec filesystem lock + the AI-203 Linear claim.

AccountingreconcilePollAccounting rebuilds a union ledger across every poll in the invocation so polled === selected + skipped still holds; checkPollCoverage sets exitCode = 1 on any invariant escape rather than failing quietly. Halt and left-ready-queue reasons are never laundered into max-fires. New skip reasons: left-ready-queue, build-failed, plus already-fired for mid-tick tickets carrying a prior receipt. The skip seed is freshest-first (runtime → gate → plan-time) so claim-lost / claim-failed wins over a stale plan-time max-fires.

Guard-skipped ticks are now visiblesrc/dispatch-tick-outcome.ts plus scripts/record-guard-skipped-tick.mjs persist a tick outcome naming the holder (built from /proc/<pid>/cmdline, redacted and length-capped). The wrapper records the skip instead of only echoing it. dispatch-tick-outcome files are excluded from the daily fire counter *before* the dispatch- prefix check, and every other runs/ reader (loadDispatchRunRecords, report.isRunReceipt, receipt-s3.isRunReceiptPayload) guards by content, so they cannot crash or miscount telemetry.

Supportingsrc/stamped-json.ts for the outcome read/write path with sanitized paths; re-poll exponential backoff; repo-resolution cache; preflight dedupe with a warning. The .mjs redaction twin is deep-equal-pinned against src/redact.ts in CI so the two cannot drift.

### Contract surface

| Signature | Change | Consumers |

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

| DispatchSkipReason | +left-ready-queue, +build-failed | skip histogram, DispatchReceipt.skipped[], guidelines/dispatch-scheduled-runner.md |

| selectDispatchable | takes remaining budget so eligibility widens without budget widening | re-poll loop |

| reconcilePollAccounting / checkPollCoverage | new — union ledger + invariant check with exitCode = 1 | buildDispatchAccounting, tick summary |

| dispatch-tick-outcome records | new file kind under runs/ | countDispatchFiresOnUtcDay (excluded), loadDispatchRunRecords, report, receipt-s3 |

The polled === selected + skipped invariant now holds over the union across polls; guidelines/dispatch-scheduled-runner.md is updated to say so.

## Breaking Changes

None to existing invocations. Caps, defaults, and the dry-run default are unchanged, and the concurrency guard's protection is preserved rather than weakened.

One operational note: drones dispatch can now exit 1 on an accounting-invariant escape or a mid-tick poll failure that previously would have ended the tick as though the queue were empty. That is deliberate — absence of candidates and failure to determine candidates are different outcomes — but any wrapper treating a non-zero dispatch exit as catastrophic should treat it as investigate-me.

## Test Plan

Run on the post-conflict-resolution head (d50e32f, base merged in via drones resolve-conflicts with its AI-151 full-suite gate):

pnpm typecheck   -> clean

pnpm test -> 1645 vitest passed, 374 Python tests passed

966 lines of new dispatcher.test.ts coverage plus dispatch-tick-outcome.test.ts (146 lines), covering the paths that matter:

- a ticket labelled mid-tick is fired in the same invocation;

- --max-fires N fires at most N even when the queue grows mid-tick (the budget test — the expensive failure if wrong);

- a ticket appearing in two consecutive polls fires exactly once;

- a ticket that passed gates at plan time but is blocked/claim-lost by re-poll time is skipped with the correct reason;

- mid-tick poll failure is recorded as a failure, not an empty queue;

- corrupt tick-outcome files fail open without crashing the reader;

- guard-skipped tick records the holder.

## Verification Artifact

Full suite on the merged headpnpm typecheck clean; pnpm test 1645 vitest + 374 Python green. Independently re-run by drones resolve-conflicts' full-suite gate (gate_status: passed) before its fast-forward push, and by CI on d50e32f (ci ✓).

That gate earned its keep here: git's auto-merge of src/dispatcher.ts against the AI-222 changes on main produced code that did not compile (a dropped dirname import). A scoped test ladder would have missed it; the full suite caught it before the push.

Review: two reviewer rounds, then two Mercy reviews — one on 15aa027c and one on the post-conflict head d50e32f — both reporting no blocking issues found, with zero unresolved threads. Auto-approve was withheld on both only because the PR touches sensitive paths (scripts/dispatch-poll-wrapper.sh, scripts/record-guard-skipped-tick.mjs), which routes the merge decision to a human by design.

#1062 — [codex] SURTR-568 add NetSuite transaction subsidiary @ashwanth1109  approved

## Summary

- add qualified native Transaction.subsidiary to the netsuite-raw contract with an additive migration

- add an immutable, resumable historical backfill that fetches only id and subsidiary, with up to 10 concurrent runners

- validate source counts and unique transaction IDs before atomically updating only the subsidiary column

## Production evidence

- smoke check returned and populated subsidiary for all 419 sampled transactions

- full backfill fetched and published 5,819,986 current NetSuite transactions

- the 5,826,487-row target has 5,826,487 distinct, non-null transaction IDs, so id is safe as the update key

- 6,501 historical target transactions are no longer returned by current NetSuite and remain unchanged

## Impact

This PR only adds and backfills raw_transaction.subsidiary. It contains no balance-sheet reconciliation harness, output, or TransactionLine.eliminate work.

## Validation

- uv run ruff format src/field_contracts.py src/handler.py src/surtr_568_backfill.py tests/test_handler.py

- uv run ruff check src/field_contracts.py src/handler.py src/surtr_568_backfill.py tests/test_handler.py

- uv run pytest -q — 179 passed

Linear: SURTR-568

#1093 — [codex] Fix NetSuite raw consistency and partial reporting @ashwanth1109  approved

## Summary

- convert UTC extraction boundaries to the NetSuite integration user source clock before rendering naive SuiteQL timestamp filters

- interpret persisted naive NetSuite watermarks in the same source time zone before calculating UTC overlap windows

- retry fresh and resumed per-partition count drift through the existing three-attempt source-consistency loop

- publish concise ECS run results so mixed table outcomes are recorded and notified as amber PARTIAL, including failed-table details

- keep crashes and run-result publication failures on the hard FAILED path

## Root cause

Three gaps combined in the observed incidents:

1. UTC boundaries were stripped to naive text before SuiteQL interpreted them in Central time, moving the intended closed upper boundary several hours forward.

2. Aggregate count drift raised SourceCountMismatch and retried, but partition-level drift raised plain ValueError, bypassing those retries.

3. The ECS entrypoint converted every partial_failure result into exit code 1 and did not publish the platform run-result side channel, so Surtr could only emit a red ECS FAILED card.

## Impact

Incremental reads now use a DST-aware source-local boundary. Partition drift receives up to three isolated, bounded attempts and only a stable attempt is published. Mixed table results exit successfully only after their status and concise failure summary are written for the Surtr finalizer, producing a PARTIAL card rather than a misleading hard failure. No warehouse schema migration or backfill is required.

## Validation

- uv run --project pipelines/runners/netsuite-raw pytest -q pipelines/runners/netsuite-raw/tests — 176 passed

- uv run --project pipelines/runners/netsuite-raw ruff check on the six modified Python files — passed

- git diff --check — passed

#3426 — Enable all Education BUs for on-demand QTD reports @ashwanth1109  approved

## Demo

<img width="2624" height="1636" alt="image" src="https://github.com/user-attachments/assets/0359313a-449c-4222-8bc8-8d72faac4907" />

## Summary

- expose every active Education business unit for on-demand QTD report generation

- keep weekly and monthly scheduled Education generation restricted to the configured allowlist

- add a single grouped multi-select with All, Software, and Education views while preserving mixed selections

- scope “Select all visible” to the active BU type and search filter

## Stack

- Depends on #3417

- Base branch: codex/klair-3062-education-report-settings

## Validation

- uv run pytest tests/monthly_qtd_report/ tests/routers/test_qtd_ondemand_router.py — 768 passed

- pnpm vitest run src/features/monthly-financial-reporting/components/QtdReportsView/__tests__ — 106 passed

- Ruff check and formatting on changed backend files

- Pyright — 0 errors

- ESLint on changed frontend files

- TypeScript tsc --noEmit

#3445 — fix(ai-renewals): band HVO on current ARR > $80k [KLAIR-3097] @sanketghia  approved

Closes KLAIR-3097

## Problem

/renewals?tab=ai-renewals splits renewals into two ARR bands. HVO is a business tier meaning RENEWAL ARR > $100k ($2,500 commission vs $600). The dashboard was keying that band on CURRENT ARR > $100k — the wrong quantity.

Reported by the renewals stakeholder, who also identified why we *can't* simply key on renewal ARR: it is provisional while an opportunity is open, set at creation and corrected later.

That holds up against live data — 43.3% of open rows have offer_arr / current_arr at exactly 1.25, a formula placeholder rather than a negotiated value. Keying the band on it would make deals migrate between tabs as opportunities mature.

## The fix

One constant, still keyed on current_arr:

# klair-api/renewals/ai_renewals.py

ARR_THRESHOLD = 80000 # was 100000

$80k x 1.25 = $100k of renewal ARR at the standard uplift. The codebase already funnels every band decision through this symbol, so it propagates to all consumer sites — no SQL restructuring, no mart dependency, no external merge gate.

## Accuracy vs. the true definition (offer_arr > $100k), 1,241 closed Traditional rows

| Threshold on current_arr | Correct | False positive | Missed | Total wrong |

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

| $100k (before) | 322 | 7 | 50 | 57 |

| $80k (after) | 364 | 16 | 8 | 24 |

## ⚠️ Impact — rates move; brief the stakeholder before rollout

| Metric | Before | After |

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

| Closed Traditional HVO deals | 328 | 378 |

| Traditional HVO logo win rate | 35.1% | 36.2% |

| Closed Traditional sub-band | 816 | 766 |

| Open AI HVO book | 117 | 145 |

A win-rate shift that arrives unannounced reads as a new bug — the same failure mode the BU-handled exclusion rollout had (KLAIR-3085 / #3429).

## Known limits (pre-existing, not introduced here)

1. 8 closed deals stay misclassified — all current_arr at/near $0 with large offers (Orange SA $0 → $2.5M; Progress Software $19k → $1.5M). No current-ARR threshold can catch them.

2. The "minimum 25% increase" is really a median, not a floor — 532 of 1,241 closed rows renewed *below* 1.25x, and 235 were downsells. The $80k proxy is approximate by construction.

3. The Acuity row from the original report ($0 → $283k) is out of scopehandled_by_bu = true, already excluded from Traditional by #3429.

## The $100k / $80k duality — please keep this straight when editing

Two meanings coexist deliberately:

- Mechanism (what is filtered) = $80k of current ARR → service logic, SQL builders, router OpenAPI descriptions, tooltip copy.

- Business definition / UI toggle label = $100k of renewal ARR → the segment toggle labels stay < $100k / HVO (> $100k), because that is genuinely what HVO means to the business.

Over-correcting a toggle label to $80k is as much a defect as leaving stale mechanism text at $100k.

## Commits

| Commit | Scope |

|---|---|

| de21f280 | The constant + boundary tests (only behavioural change) |

| e99e0366 | Docstrings asserting the old boundary (these render in the OpenAPI schema) |

| 113b6557 | Tooltip copy — mechanism + business translation + rationale |

| ac1f355e | Follow-up: drop a double period in the tooltips; refresh a stale row-count comment |

## Verification

- Backend 159 tests pass (pytest tests/renewals/); frontend 102 tests pass across 12 files

- tsc / ruff / eslint clean; app boots

- Tests were written RED first and confirmed failing against the old constant before it moved, so they provably detect the boundary rather than passing vacuously

- Regression test pins a real production row (Board of Regents, $94,192 → $117,740) that was landing in the wrong band

- Swept for other consumers of the band: the plain Renewals tab has no segment logic; budget_goal_miper / budget_bot use current_arr > 0 only; no SQL defines a segment column; no caching on this path, so nothing to invalidate

- Segment literals deliberately unchanged, so bookmarked ?segment= URLs keep working

Spec: docs/superpowers/specs/2026-08-03-ai-renewals-hvo-definition-design.md

Plan: docs/superpowers/plans/2026-08-03-ai-renewals-hvo-definition.md

## Screenshots

- Numbers have been verified on a live call with stakeholder (Chintan):

<img width="1904" height="618" alt="image" src="https://github.com/user-attachments/assets/7eca46a6-5080-4356-bbd0-105817808342" />

<img width="1668" height="580" alt="image" src="https://github.com/user-attachments/assets/f111768a-52d7-41c2-b589-e7cc4d543716" />

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

The Portfolio  —  Trilogy Companies

Contently Bets Its Future on Finance — And the AI Search Crisis Nobody's Talking About

The ESW-owned content platform is quietly positioning itself as the compliance layer between regulated financial brands and a search landscape that's eating their traffic.

NEW YORK — There is a particular kind of quiet that descends on an enterprise software company after acquisition. Roadmaps get rationalized. Headcount gets optimized. The product, if it survives at all, gets pointed at the highest-margin customer segment and told to march.

Since Contently passed into ESW Capital's hands via Zax Capital in September 2024, the company has been marching — and the direction is unmistakable: financial services, where content is expensive to produce, catastrophically expensive to get wrong, and almost impossible to measure against revenue that closes six to eighteen months after a prospect first reads a whitepaper.

The editorial output from Contently's own platform tells the story with unusual clarity. In recent weeks, the company has published a detailed framework for compliance-first content architecture — a five-component workflow for regulated brands that need to scale output without triggering legal review backlogs — alongside a methodological guide to measuring content ROI across long finance sales cycles and large buying committees. A third piece catalogued five credibility failure modes specific to financial content programs, each one pointing toward the same fix: named, credentialed human experts, not anonymous brand voice.

That last emphasis is not accidental. It connects to what may be Contently's sharpest recent observation: that Google's AI Overview is now pulling citations from sources that differ substantially from the organic top-ten rankings most content teams have spent years optimizing for. A page can hold a top-three organic position and receive zero AI citation traffic — invisible to the mode of search that is quietly absorbing an increasing share of queries. For financial brands that have built content programs around SEO, the implications are unsettling.

The through-line across all of it is governance. Compliance workflows. Attribution models that survive audit. Expert sourcing that earns AI engine trust. These are not the concerns of a scrappy content startup. They are the concerns of a mature enterprise software company that has identified a customer base — regulated financial institutions — whose pain is deep, whose budgets are defensible, and whose switching costs, once a platform is embedded in the compliance workflow, are formidable.

ESW's playbook, refined across 75-plus acquisitions, has always required a sticky customer and a clear margin path. Contently is building both. Who benefits from a content platform that becomes load-bearing infrastructure for a bank's compliance department is, by now, a question that answers itself.

Compliance-First Content Architecture  ·  Measuring Content ROI in Long Finance Sales Cycles  ·  Your Best-Ranked Page Might Be Invisible to Google’s AI

Alpha School’s Latest Lesson: The Humans Are Not Leaving the Building

Word is the Alpha School crowd has heard the playground whisper: if AI teaches the academics in two hours, what happens to the teachers? The answer is "promotion."

In a new post, the Austin-born K-12 upstart draws its line clearly. AI handles academic delivery. Human Guides handle motivation, relationships, coaching, and life skills—the messy business of knowing when a kid is stuck, scared, or ready to fly.

Alpha, co-founded by Joe Liemandt and MacKenzie Price, lets adaptive AI deliver core academics in roughly two hours daily, then spends the rest on entrepreneurship, leadership, financial literacy, public speaking, and other pursuits. The school claims students learn 2.3 times faster than U.S. norms and test in the top 1–2% nationally on NWEA MAP assessments.

Alpha is now selling more than a school model—it's selling a parenting philosophy. Your child is a founder, performer, negotiator, not a vessel to be filled by worksheets. The home is the first incubator. Critics picture robo-teachers and lonely children clicking dashboards; Alpha counters with Guides, feelings, creativity, and eye contact. Parents may come for test scores, but Alpha bets they stay for the promise that adults finally

In an AI-Scrambled Job Market, Crossover's Geography-Blind Model Looks Like a Blueprint

As employers dangle $800,000 salaries for ChatGPT expertise and remote-work platforms multiply, Trilogy's talent engine was built for exactly this moment.

AUSTIN, TEXAS — The labor market is having what can only be described as a reckoning with its own assumptions. A Business Insider report this week documented employers paying up to $800,000 annually for workers with demonstrated ChatGPT experience — a figure that would have read as satire eighteen months ago. Simultaneously, roundups of top remote-work recruitment agencies and data science job platforms are proliferating across the trade press, each one reflecting the same systemic shift: the geography of work has collapsed, the premium on AI fluency has exploded, and most hiring infrastructure was built for neither reality.

For anyone watching Trilogy International's portfolio, the timing feels less like coincidence and more like confirmation. Crossover — Trilogy's global talent platform and the staffing backbone of the entire ESW Capital enterprise — has spent the better part of a decade building exactly the infrastructure the market is now desperately improvising toward. The model: rigorous AI-enabled skills assessments, 130-plus countries, 100% remote, and a pay philosophy that offers identical above-market compensation for identical roles regardless of where the worker lives.

The accountability question here is real. When the market pays $800,000 for a skill set that didn't formally exist three years ago, it exposes a hiring establishment that defaults to credential theater — résumés, geography, institutional brand — rather than demonstrated capability. Crossover's pitch has always been that this is inefficient and, at some level, unfair. The best AI engineer in Beirut shouldn't lose to a mediocre one in Boston because of a zip code.

Meanwhile, the education pipeline feeding this talent market is itself in transformation. Alpha School — Trilogy founder Joe Liemandt's AI-powered K-12 model — opened a Fort Worth campus this year, drawing local attention for its audacious claim: a full academic curriculum delivered in two hours a day, with students consistently testing in the top one to two percent nationally. The kids coming out of that system aren't going to need a roundup article to find remote work. They're going to expect it.

The narrative arc here is systemic. The tools changed. The talent is global. The pay is real. The question is which institutions were already built for this world — and which ones are still reading last decade's map.

Top recruitment agencies for remote work - hcamag.com  ·  Top 10 Companies Hiring AI Engineers in Lebanon in 2026 - nu  ·  Jobs are now requiring experience with ChatGPT — and they'll
The Machine  —  AI & Technology

The Brain Learns to See Itself

From hidden lesions in multiple sclerosis to teenagers co-authoring neuroscience papers, artificial intelligence is teaching the three-pound universe inside our skulls to become legible.

STANFORD, CALIFORNIA — There is a particular kind of vertigo that comes from realizing the organ reading these words is finally learning to read itself. For most of human history, the brain was the last frontier we could not visit — a wet, folded galaxy of eighty-six billion neurons hiding behind bone, its illnesses inferred rather than seen. This week, that opacity thinned a little further.

Researchers announced that a new machine-learning model can detect gray matter lesions in multiple sclerosis that have long eluded conventional MRI — the ghost damage clinicians suspected but could not confirm. Gray matter, the seat of cognition itself, has always been harder to image than the white matter highways beneath it. Now an algorithm trained on thousands of scans has learned to notice what the human eye slides past. For patients whose cognitive symptoms outpaced their visible pathology, this is not incremental — it is validation rendered in pixels.

The same week, Stanford's Institute for Human-Centered AI published a survey of how machine learning is reshaping scientific discovery while — and this is the phrase worth lingering on — keeping humans at the center. Not replaced. Augmented. The microscope did not diminish the biologist; it enlarged her. UC San Diego cataloged nine breakthroughs its researchers credit to AI collaboration, from protein folding to climate modeling to drug candidates surfacing from chemical spaces too vast for any human lifetime to search.

And then, quietly wonderful: a program profiled by Frontiers paired teenagers with senior neuroscientists to co-investigate real questions about memory and attention. "It's so wow!" one young researcher said — a sentence no press office would have written, and precisely the sentence the moment deserves.

Consider the recursion. A brain, sculpted by four billion years of evolution, builds a silicon mind, which then turns back and illuminates the biological brain that built it. Somewhere in a clinic, a woman with MS is about to learn that her cognitive fog had a physical address all along. The lesion was always there. We simply hadn't taught ourselves to look.

‘It's so wow!’ - Young people team up with top neuroscientis  ·  How AI is Transforming Scientific Discovery While Keeping Hu  ·  AI Reveals Hidden Gray Matter Lesions in Multiple Sclerosis

AI’s Open-Letter Wars Are Becoming the Industry’s New Power Map

A flurry of public petitions over open models, safety and American competitiveness is revealing where the AI world’s biggest players really stand.

SAN FRANCISCO — The AI industry has discovered a new battleground, and it is not a benchmark leaderboard, a chip cluster or a splashy model launch. It is the open letter — and yes, this changes everything about how AI politics is being conducted in public.

Developer and AI chronicler Simon Willison has published a useful roundup of the latest wave of open letters about AI development, capturing a remarkable few weeks in which companies, researchers and policy advocates have used carefully worded public statements to stake out positions on open weights, national competitiveness, regulation and safety.

The most eye-catching example is “Open Weights and American AI Leadership,” dated July 24 and shepherded by Microsoft. According to Willison’s summary, it drew signatures from 235 AI-adjacent companies and institutions, including NVIDIA, Amazon, Y Combinator and the Linux Foundation. That is not a casual blog-post coalition. That is an industry signal flare.

At the center is one of the most important questions in AI right now: should powerful models be released with open weights, allowing developers to download, inspect and adapt them, or should frontier AI stay largely behind closed APIs? I cannot overstate how significant this debate is. Open-weight models could accelerate startups, scientific research and sovereign AI efforts around the world. They could also make powerful capabilities harder to control.

What makes these letters fascinating is that they are not merely philosophical manifestos. They are lobbying documents, market-positioning documents and alliance maps all at once. When cloud giants, chipmakers, open-source foundations and startup accelerators sign the same statement, they are telling regulators: do not accidentally regulate away the ecosystem we are building.

Willison’s broader July newsletter notes place the letters amid an extraordinary month of model activity, including discussions of accidental cyberattacks by models under test and renewed interest in MCP-style tool connectivity. The future is now — but the governance layer is sprinting to catch up.

For builders, the takeaway is deliciously clear: AI is no longer just a technology race. It is a standards race, a policy race and a narrative race. The models matter. But increasingly, so do the signatures underneath the letter.

condense-json 1.0  ·  Open letters about AI development  ·  July 2026 newsletter

The Ivory Tower's AI Reckoning: Higher Education Confronts a Tool It Cannot Ignore and Cannot Yet Govern

A convergence of new research suggests universities are simultaneously deploying AI, fearing AI, and profoundly misunderstanding AI.

CAMBRIDGE, MASSACHUSETTS — It could be argued — and preliminary evidence increasingly suggests it must be argued — that higher education's relationship with artificial intelligence has entered a phase of productive, if deeply uncomfortable, institutional self-examination. Three newly published studies, considered in aggregate, constitute something approaching a thesis-antithesis-synthesis structure for the entire sector's epistemological crisis.

The thesis, as it were, is administrative aspiration. Elsevier's framework for developing strategic AI leadership in higher education posits — with the confident cadence of a provost addressing a skeptical faculty senate — that universities require not merely policy, but visionary, structurally-embedded AI stewardship (a distinction whose practical implications remain, one must note, somewhat underspecified in the extant literature).

The antithesis arrives, with characteristic inconvenience, from the classroom floor. A study published in Frontiers examining ChatGPT use among English-as-a-foreign-language students reveals what might charitably be termed a perception-practice divergence: students who profess principled commitments to academic integrity demonstrate, in measurable behavioral terms, a rather more pragmatic orientation toward AI-assisted composition. (One resists the urge to describe this as simply "saying one thing and doing another," though the data would not strenuously object to that characterization.)

The synthesis, perhaps most instructive for institutions contemplating deployment rather than merely prohibition, emerges from a Scientific Reports evaluation of AI-powered learning assistants in engineering education, which identifies measurable gains in student engagement while simultaneously surfacing the ethical and policy lacunae that render such gains institutionally precarious.

What unites these investigations — and what institutions like Alpha School have, it could be argued, operationalized more aggressively than their traditional counterparts — is the recognition that AI in education is not a future contingency but a present negotiation. The question is no longer whether students will use these tools. The question, preliminary evidence suggests, is whether faculty governance structures will evolve quickly enough to matter.

Developing Strategic AI Leadership in Higher Education - Els  ·  Perceptions vs. practices: academic integrity and actual Cha  ·  Evaluating AI-powered learning assistants in engineering hig
The Editorial

The Torches Are Lit, and the Villagers Have Read Their Marcuse

From a pontiff to a congressman to the writers' rooms of Los Angeles, the verdict on Silicon Valley is in — and the Valley, characteristically, is drafting a manifesto in reply.

SAN FRANCISCO — There comes a moment in the life of every gilded class when the servants stop laughing at the jokes, the novelists stop returning the phone calls, and the priests, God help them, begin to preach. That moment, if one is paying attention — and paying attention is, I am reliably informed, still legal in California — has arrived for the technology industry, and it has arrived not with a single thunderclap but with the sort of low, sustained rumble that geologists learn to fear.

Consider the week's harvest. Pope Leo, from the chair of Peter, denounces what he calls the "culture of power" propelling artificial intelligence — a phrase one might have expected from a graduate seminar at the New School, not from the Vatican, and which suggests that the Holy See has concluded, perhaps correctly, that the men building God-substitutes in South of Market warrant a homily or two. Representative Ro Khanna, whose district contains more billionaires per square mile than most nations contain citizens, has discovered the electoral utility of anti-elite rhetoric and is being spoken of, in the coy way these things are spoken of, as a 2028 possibility. The New York Times reports that Silicon Valley, once the beloved backdrop of aspirational HBO comedies, has become the preferred setting for pop-culture villainy — the boardroom as haunted house, the founder as slasher. And CalMatters, in its measured way, notes that California's electorate is being asked to approve a billionaire tax that its own editorialists concede is a sugar-high, which is the polite term for eating one's seed corn on the assumption that the neighbors will bring dinner.

And into this weather — this ambient, gathering weather — Palantir has chosen to release a manifesto. I have read it, so that you need not. It is, as Tech Policy Press observes, about as subtle as a red hat, and it advances the novel proposition that the way to defuse a populist backlash against technology billionaires is for a technology billionaire to publish a document explaining, in the tones of a slightly cross headmaster, why the populists have failed to appreciate his contribution to Western civilization. One admires the confidence. One also remembers what happened to the last men who mistook their own indispensability for a shield.

The pattern is old and the pattern is boring. A class acquires wealth beyond the imagination of the society that produced it; that society, being neither blind nor especially patient, begins to inquire; the class, mistaking inquiry for insurrection, responds with manifestos, foundations, and the occasional bunker in New Zealand. The proper response, of course, would be modesty — a virtue Silicon Valley has always regarded as a competitor's weakness. And so the manifestos will continue, the tax measures will pass or fail, the pope will pray, and the writers' rooms will keep casting the founder as the killer. The Valley will call it a misunderstanding. History will call it something else.

Opinion | California’s billionaire tax measure risks long-te  ·  ABC7 Interview: Rep. Ro Khanna's anti-elite message fuels Si  ·  Palantir's Manifesto Is as Subtle as a MAGA Hat - Tech Polic
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Nation’s Executives Confirm AI Has Already Transformed Productivity By Making Everyone Attend Meetings About It

The long-awaited efficiency miracle is expected to arrive shortly after the next roadmap, governance framework, pilot program, and all-hands recap.

WASHINGTON — In a major clarification for business leaders who have spent the past two years announcing that artificial intelligence would permanently alter the economics of work any minute now, new reports suggest the productivity revolution remains largely scheduled for a future quarter with better calendar availability.

According to recent findings cited by Federal Reserve research, roughly 95% of AI’s productivity gains are “still to come,” a reassuring phrase for anyone who has ever promised a board that costs would go down once employees learned how to ask a chatbot for a quarterly business review in the tone of a former McKinsey associate.

This should settle the AI productivity debate, which is now officially over in the same way a home renovation is over when the contractor explains that the foundation has been removed and the family will be much happier once the walls are imagined correctly.

The evidence is everywhere. Software engineers are completing tasks faster. Marketers are producing more drafts. Analysts are summarizing more documents. Managers are managing more summaries of documents. Entire organizations are now capable of generating in seconds what used to take hours: a first pass that someone else must read, correct, contextualize, approve, circulate, reformat, and eventually abandon because the underlying system of record was wrong.

This is not a failure of AI. It is a triumph of corporate absorption. American business has looked directly at a technology capable of automating drudgery and responded by creating a new class of drudgery around it.

The productivity engine is running. Unfortunately, it is currently powering the dashboard that monitors the productivity engine.

In fairness, companies are right to be cautious. Large firms cannot simply deploy intelligent systems into workflows and expect them to magically produce value. First they must establish an AI council, draft acceptable-use policies, convene legal, notify compliance, build a center of excellence, hire a vice president of transformation, and identify seven approved use cases, five of which involve making meeting notes slightly more searchable.

Then comes the truly essential step: orchestration. This term, now circulating through enterprise technology circles with the confidence of a word that will soon appear in every earnings call, means connecting agents, applications, data, and workflows so that the business can do what it already did, but with more diagrams. Microsoft and other platform companies are expected to benefit from this phase, since no enterprise productivity movement is complete until it requires additional licensing.

The confusion stems from a simple mismatch. Employees experience AI as a tool. Executives experience it as an operating model. Investors experience it as a margin expansion narrative. Consultants experience it as oxygen.

A developer who uses AI to finish code faster may feel more productive. But the company only recognizes that productivity when it appears as reduced headcount, faster release cycles, higher revenue, fewer outages, or a slide labeled “AI Impact” that can survive finance review. Until then, the gain exists in the strange corporate afterlife where everyone is busier, everything is faster, and nothing measurable has happened.

This explains why competing declarations can all be true at once. AI is a productivity engine for the U.S. economy. The productivity argument is over. Companies are still waiting for the payoff. The gains are here. The gains are not here. The gains are here, but only for the person using the tool, not the department, unless the department has redesigned its workflows, unless legal objects, unless procurement has not renewed the enterprise plan, unless the model hallucinated the customer refund policy again.

The future, as usual, has arrived unevenly and immediately been assigned to a steering committee.

Still, the 95% figure should not discourage anyone. If anything, it gives the AI economy something far more valuable than proof: runway. There remains an enormous amount of productivity still available to be forecast, packaged, sold, implemented, rebranded, and discussed at leadership offsites.

For now, the most honest position is also the most American one. AI will transform productivity completely. It already has. It just has not done so in a way that shows up in the numbers, changes the org chart, satisfies the CFO, or prevents the 4 p.m. meeting about how to use AI to reduce meetings.

That, presumably, is still to come.

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

On August 3, 1977, the Commodore PET (Personal Electronic Transactor) was released, becoming one of the first mass-produced home computers and helping spark the personal computer revolution that would later enable modern AI research.

⬛ Daily Word — Technology
Hint: Internet-based computing infrastructure where data and applications are stored and accessed remotely.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed