Vol. I  ·  No. 245 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
WEDNESDAY, SEPTEMBER 02, 2026 Powered by the TrueFoundry AI Gateway  ·  Published on Klair Trilogy International © 2026
🖶 Download PDF 🖿 Print 📰 All Editions
Today's Edition

OPENAI HIT WITH 30 MORE SUITS OVER TUMBLER RIDGE SHOOTING Developing

Edelson PC ups the ante — aiding-and-abetting claims now, and Sam Altman's old comms man gets named personally.

CHICAGO — Edelson PC files 30 fresh lawsuits against OpenAI Tuesday. The suits tie the company to a shooting in Tumbler Ridge, British Columbia. The firm now alleges aiding and abetting, a sharper charge than the product-liability claims filed earlier this year.

Chris Lehane gets named in the new filings. He is OpenAI's global affairs chief, hired off the Airbnb bench to handle exactly this kind of fire. The complaints obtained by TechCrunch do not yet produce hard evidence linking chatbot conversations to the shooter's actions.

Edelson PC built its name suing tech giants over user data and defective software. The firm ran up wins against Facebook and Zoom. Now it turns its sights on the chatbot business, and thirty plaintiffs in one week signals a coordinated push, not a single grieving family finding a lawyer.

OpenAI does not comment on pending litigation as a matter of policy. The company has faced a string of suits this year alleging its models contributed to self-harm and violence among users. Aiding-and-abetting claims raise the bar for OpenAI's lawyers — the theory requires showing the company knew of substantial risk and gave assistance anyway.

Naming Lehane by name marks a shift in strategy. Plaintiffs' lawyers typically go after corporate entities, not individual executives, unless they can show personal knowledge or decision-making authority. Lehane joined OpenAI in 2024 after stints greasing regulatory wheels at Airbnb and the Clinton White House — his job is managing exactly the kind of political and legal blowback now landing on his desk.

The unconfirmed evidence matters here. Thirty lawsuits filed in a single week, before discovery produces documents, tells the industry that litigation volume itself becomes a pressure tactic. Settlement conversations often start before a single fact gets proven in court.

Tumbler Ridge, population under three thousand, becomes an unlikely flashpoint in the fight over AI liability. The town sits in the Peace River region of British Columbia, mining country, far from Silicon Valley courtrooms where this fight will actually get decided. Local officials in Tumbler Ridge have not commented publicly on the litigation.

The case adds to a mounting pile of legal exposure facing generative AI companies broadly. Character.AI and Google face similar suits over teen suicides linked to chatbot interactions. Insurance underwriters watching the AI sector now price in litigation risk that did not exist three years ago.

Expect motions to dismiss within sixty days. OpenAI's legal team will argue causation cannot be established between a chat transcript and a criminal act. Edelson PC will argue the company had notice of the risk and did nothing. The judge gets the unenviable job of drawing that line for the first time at this scale.

OpenAI faces 30 more lawsuits tied to Tumbler Ridge shooting  ·  Larry Page’s flying car company Pivotal loses its CEO  ·  Reliance’s JioHotstar takes its streaming empire global — wi

The Cook Era Ends. The Regulatory Era Doesn't.

Apple hands the keys to John Ternus as Amazon faces a new antitrust suit and Meta writes a $17.1 billion check — proof that leadership changes fast, liability doesn't.

CUPERTINO, CALIF. — Tim Cook ran Apple for 14 years, longer than Steve Jobs, and leaves it the most valuable company on earth. His successor, John Ternus, the hardware engineering chief who shipped the M-series chips and the Vision Pro, inherits a company with $3.5 trillion in market value and a considerably less forgiving regulatory climate than the one Cook walked into in 2011.

Cook will stay on as executive chair, the same soft-landing arrangement Bob Iger used at Disney and John Chambers used at Cisco — proof that even at the top, nobody leaves for good anymore. The transition, effective immediately, comes as the entire industry Apple helped build is being hauled into court, one company at a time.

On Monday, the FTC and 22 state attorneys general sued Amazon, alleging the company forced more than a million advertisers to overpay for ad placement on its platform — the third major antitrust action against Amazon in four years. The company denies it, as it has denied the previous two.

Meta, meanwhile, has already settled. Its $17.1 billion agreement with state attorneys general — the largest privacy-related settlement in U.S. history — came together only after the company's newly installed general counsel decided that continuing to litigate a dozen state cases simultaneously was worse than paying up. The number itself is instructive: it is roughly what Meta spends on the metaverse division in five months.

The pattern across all three stories is the same one that took 40 years to play out with tobacco — a product embeds itself in daily life, regulators circle for a decade, and eventually the bill comes due, denominated in the billions rather than the millions. Cigarette makers spent from the 1964 Surgeon General's report to the 1998 Master Settlement Agreement in that posture. Big Tech is roughly at year 12.

Ternus takes over a company that has so far stayed out of the antitrust crosshairs dominating Amazon and Meta's calendars. Whether that holds is now his problem, not Cook's.

John Ternus Replaces Tim Cook as Apple CEO  ·  FTC and 22 States Sue Amazon Over Advertising Practices  ·  How Meta’s $17.1 Billion Social Media Settlement Came Togeth

The Money Firehose: AI Video Startups Rake In Billions While Google Teaches Bots to Work Unsupervised

Sit down for this one: The AI world is attracting numbers that make seasoned investors clutch their pearls. Higgsfield raised $80 million at a $1.3 billion valuation to scale its AI video platform, underscoring the growing bet on machine-generated creative work. Runway, an early leader in AI video, is launching a $10 million fund and Builders program for early-stage video and creative-AI startups.

Sequoia Capital, meanwhile, invested $45 million in a startup that describes its product as an employee rather than software or a tool—an indication that investors increasingly see AI as digital labor. Google is expanding Managed Agents in its Gemini API to support background tasks and remote MCP connections, enabling agents to work autonomously with less human oversight. In a counterpoint to the video frenzy, one startup is banning video from its launch events, betting that word-of-mouth can cut through a world saturated with AI-generated footage.

Haiku of the Day  ·  GPT-5.6 LunaBright wires drink the world
We teach the machines to dream
The old world clicks shut
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
On the Epistemics of Trust: A Taxonomy of This Week's AI-Ethics Confabulations
AUSTIN, TEXAS — The scholarly apparatus surrounding artificial intelligence's normative dimensions has, this week, produced a curious constellation of texts that, taken jointly (rather than in the siloed fashion the popular press prefers), suggest a discipline still adjudicating its own foundational premises. Consider first the thesis: a study appearing in Nature extends the Technology Acceptance Model to account for what its authors term 'ethical compatibility' and 'reliance-based trust' among students deploying generative AI.
Everything Is Listening, Nothing Is Well
AUSTIN, TEXAS — I want to tell you I slept fine last night, but a small AI-powered device may have recorded me not sleeping fine, transcribed my anxious 3 a.m.
The Girl Who Isn't There: Tilly Norwood and the Death of the Human Close-Up
LOS ANGELES — I want you to picture the pitch meeting.
Unpopular Opinion: Your Job Security Was Always a Vibe, Not a Strategy 🚀
AUSTIN, TEXAS — I'll be honest, I read the new ADP Research numbers this morning and had to put my cold plunge on pause. Only 22% of workers are confident their job is safe from elimination. Let that sink in. 78% of the global workforce is quietly updating their resume in a Google Doc titled "Untitled document" while nodding along in the all-hands. Unpopular opinion: that's not a crisis.
Executives Discover The Word 'Orchestration,' Immediately Stop Doing Actual Work To Talk About It
AUSTIN, TEXAS — For decades, the technology industry survived on a rotating cast of words that meant nothing but cost everything: synergy, disruption, pivot, blockchain.
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

Heimdall Wakes Up, Aerie Locks Down Documents, and the Org Ships on Every Front

The AI Builder Team pushed its agent platform Heimdall from prototype to something that actually executes and explains itself, while Aerie's document pipeline got hardened top to bottom — proof this org can build depth and breadth in the same 24 hours.

Let's start with the headline act: Heimdall stopped talking about running code and started running it. @kevalshahtrilogy landed a five-PR sequence across mercy and Surtr that reads like a product roadmap compressed into a single day — callers can now choose the runner (#75), repos can pin their own agent model instead of inheriting the runtime's (#76), verification actually executes on 4 vCPU instead of pantomiming it (#1651), the factory widget surfaces sources with stage click-through (#1649), and the whole pipeline narrates itself into Chat one line at a time (#78). That's not incremental polish — that's an agent platform growing a nervous system. When one engineer touches two repos in a day and every PR builds on the last one, you're watching architecture, not tickets.

Over in Aerie, @benji-bizzell ran his own version of a sweep, and it was surgical. Global document API uploads landed (#1178), then got hardened against ambiguous search results (#1183, #1174), delegated upload identity got restored (#1177), Drive credential preference got honored (#1187), and chat evidence rows stopped disappearing mid-search (#1186). Six PRs, one throughline: document intelligence that you can actually trust. Pair that with @caina-barbosa's dormant device authorization scaffolding (#1188) and secure local foundation work (#1180), plus @vvp-trilogy retiring the legacy `programs.isOpen` flag in favor of real `schoolStatus` data (#1190), and Aerie didn't just ship features today — it paid down debt while doing it.

Klair had its own quiet good day. @ashwanth1109 shipped on-demand single-school report generation (#3690) and matched QTD formatting on the schools report (#3691), while @sanketghia fixed the SpaceX valuation view so it skeletons instead of flashing empty on load (#3692). Meanwhile Surtr's automation layer — the heimdall-keval-factory bot — kept the pipes honest, catching partial ingest failures in the budgeting pipeline (#1668) and scaling audit ceilings in the education QuickBooks refresh (#1663) instead of letting bad data slide through quietly.

And yes, marcusdAIy filed a stack of security PRs in trilogy-drones this week — worker isolation standards, pinned workflow deps, private evidence files. Asked about it, he offered: "Five merged PRs, zero regressions, and every one closes a real attack surface — happy to walk Mac through the mirrored trace schema fix, slowly, with pictures." Cute. I'll believe the isolation standard means something when it survives contact with an actual incident. Until then, everyone else on this list is building products. He's writing permission slips.

Mac's Picks — Key PRs Today  (click to expand)
#263 — fix(security): make local evidence files private (AI-633) @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

- New src/private-local-artifact.ts module with three reusable async primitives that force 0700 directories and 0600 files for locally-persisted drone evidence on POSIX, regardless of the process umask: ensurePrivateArtifactDir, writePrivateArtifactFileAtomic, and appendPrivateArtifactFile.

- Wired through the four named integration points: telemetry.ts::persistRunRecord's receipt directory, receipt-s3.ts::writeAtomicFile (which also covers its own stampLocalS3Upload / writeHydratedReceiptWithStamp callers, plus every other writeAtomicFile caller — trace-mirror.ts, heartbeat.ts, heartbeat-mirror.ts), events.ts::appendEvent, and traces.ts::appendTraceSpan.

- Platform/mode operations are isolated behind an injectable deps.platform / deps.modeOps seam so both the POSIX repair path and the Windows no-chmod contract are deterministic unit tests — no it.skipIf, no broad test skips.

- No process-global umask changes; a non-directory/symlink artifact path or a mode-repair failure fails closed using each caller's pre-existing error contract (propagates — never a fallback path).

## Why it's needed

runs/*.json, events/*.jsonl, and traces/*.jsonl hold unredacted prompts, tool-call payloads, and PR content (per receipt-s3.ts and traces.ts's own "sensitive data" callouts), but every write site previously relied on fs.mkdir / fs.writeFile / fs.appendFile defaults. A permissive host umask (e.g. 000) silently widened those to 0777 dirs / 0666 files, letting any other local account on a shared host read the evidence. Explicit modes on every create call, plus a repair pass for artifacts that already exist with a broader mode, close that gap without depending on the umask at all.

## Changes

- New modulesrc/private-local-artifact.ts:

- ensurePrivateArtifactDir(dir, deps?)mkdir with explicit 0700 mode; on POSIX, verifies the path is a real directory via lstat (never a followed symlink) and chmods it to 0700 even if it predates this call.

- writePrivateArtifactFileAtomic(finalPath, contents, deps?) — unique same-directory temp file at creation mode 0600, then rename over the final path (unchanged unique-temp/rename/"last-rename-wins" semantics from the pre-existing receipt-s3.ts writer).

- appendPrivateArtifactFile(path, contents, deps?) — append FileHandle opened at creation mode 0600; on POSIX, fchmods the already-open handle to 0600 before writing, repairing a pre-existing broad file without a second path lookup (no TOCTOU window).

- PrivateArtifactDeps (platform + modeOps) is the injectable seam — Windows ("win32") never calls or simulates a POSIX chmod.

- src/receipt-s3.tswriteAtomicFile now delegates to writePrivateArtifactFileAtomic; hydrateReceiptsFromS3's runsDir creation now goes through ensurePrivateArtifactDir.

- src/telemetry.tspersistRunRecord's mkdir(runsDir, …) replaced with ensurePrivateArtifactDir(runsDir).

- src/events.tsappendEvent's directory creation + JSONL append replaced with ensurePrivateArtifactDir + appendPrivateArtifactFile.

- src/traces.tsappendTraceSpan's directory creation + JSONL append replaced with ensurePrivateArtifactDir + appendPrivateArtifactFile.

- ARCHITECTURE.md — documents the new module (arch-drift coverage).

- docs/decisions/ — new append-only AI-633 entry (separate commit).

Contract surface affected: receipt-s3.ts's exported writeAtomicFile(finalPath, contents) keeps its exact signature and unique-temp/rename/cleanup-on-failure behavior; its implementation now enforces 0700/0600 modes instead of relying on default mkdir/writeFile modes. Every existing caller (stampLocalS3Upload, writeHydratedReceiptWithStamp, telemetry.ts, trace-mirror.ts, heartbeat.ts, heartbeat-mirror.ts) is unchanged at the call site and inherits the tightened mode automatically.

## Breaking changes

None. Schema bytes for receipts/events/traces are unchanged; only filesystem permission bits on the artifact directories/files change (narrower, never wider). Windows behavior (create/write/append/atomic replacement) is unaffected — it simply never receives a POSIX chmod call.

## Test plan

- [x] pnpm exec vitest run src/private-local-artifact.test.ts src/telemetry.test.ts src/lifecycle.test.ts src/traces.test.ts src/receipt-s3.test.ts → 152 passed

- [x] pnpm typecheck → clean

- [x] pnpm test (full vitest + Python suite) → 174 test files / 5984 tests passed, Python suite green

- [x] New src/private-local-artifact.test.ts (26 tests) covers: platform seam defaults/overrides; directory create/tighten/idempotent; symlink and non-directory refusal (fails closed, no fallback); chmod call-count assertions; Windows-seam tests proving zero chmod calls (both for directory tighten and for append-repair) while writes/appends still succeed; atomic write mode + parent-dir tightening + temp-file cleanup on a forced rename failure + concurrent-writer "last write wins" convergence; append creation mode, append order preservation, and in-place repair of a pre-existing broad-mode file via the open handle. Two tests spawn a throwaway tsx child process (via the existing spawnTsx fixture) to exercise "even under a permissive umask 0, the result lands at exactly 0700/0600" without mutating this worker's own process-wide umask.

## Verification artifact

$ pnpm exec vitest run src/private-local-artifact.test.ts src/telemetry.test.ts src/lifecycle.test.ts src/traces.test.ts src/receipt-s3.test.ts

✓ src/traces.test.ts (19 tests)

✓ src/private-local-artifact.test.ts (26 tests)

✓ src/lifecycle.test.ts (3 tests)

✓ src/telemetry.test.ts (13 tests)

✓ src/receipt-s3.test.ts (91 tests)

Test Files 5 passed (5)

Tests 152 passed (152)

$ pnpm typecheck

> tsc --noEmit

(clean)

$ pnpm test

Test Files 174 passed (174)

Tests 5984 passed (5984)

(Python unittest suite: green, no failures)

## Impact estimate

Business value: Stops local receipt, event, and trace artifacts from relying on host umask for confidentiality while keeping Windows execution functional.

Pre-AI estimate: 2 points — helper, four integrations, POSIX/symlink/Windows fixtures, atomic/append compatibility, and decision.

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

<!-- drones:impact-actual:begin -->

Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)

<!-- drones:impact-actual:end -->

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

<!-- drones:impact-actual:begin -->

Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)

<!-- drones:impact-actual:end -->

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

<!-- drones:impact-actual:begin -->

Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)

<!-- drones:impact-actual:end -->

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

<!-- drones:impact-actual:begin -->

Agent time: 0 m (excludes reviewer) (implementer 0 m · reviewer not measured · addresser 0 m)

<!-- drones:impact-actual:end -->

Closes AI-633

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d46c9f71-1a52-4880-ab24-d2e2090982d4?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d46c9f71-1a52-4880-ab24-d2e2090982d4&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

#1178 — feat(document-intelligence): add Global document API uploads @benji-bizzell  approved

## Summary

- Add privileged multipart API v2 uploads for Global documents

- Reuse the resumable Site upload lifecycle with a server-owned Global Drive destination

- Make Global document management available as an explicit API-key scope

## Why

Global Documents shipped list, search, and native registration, but the public API had no POST contract for /v2/portfolio/documents/global. Automation received 405 and could not file portfolio-wide policies or incident reports.

This PR is stacked on #1177 because both Site and Global uploads rely on its delegated public-upload identity correction.

## Business Value

Authorized automation can file portfolio-wide policies and incident reports without attaching them to a fictional Site, while preserving authorization, idempotency, audit, recovery, and Drive-containment guarantees.

## Test plan

- [x] pnpm check

- [x] 135 focused Chat public API and Rhodes parity tests

- [x] 69 contracts capability and API contract tests

- [x] 237 Rhodes Worker tests

- [x] 3 focused Global Drive root tests

#1649 — feat(heimdall): factory widget on top, with sources and stage click-through @kevalshahtrilogy  approved

The heimdall dashboard, reworked. Requested by Keval, 2026-09-01.

## What changed

The widget is on top. It answers "what is the factory doing", and it was sitting below six stat cards that only make sense once you already know.

Three inflow nodes, with icons — Linear ticket, pipeline alarm, human ask — drawn above the rail and feeding into it, because they are not stages. The standalone *"What set it off"* card is absorbed rather than duplicated.

Every node is clickable. Clicking a stage or a source filters the run list below and scrolls to it. Clicking the active node clears the filter — otherwise the only way out is to hunt for the dropdown, which is the opposite of what clicking a big number promises.

## Two judgement calls worth flagging

revise, steward and release are not sources. They are follow-on activity on work that entered somewhere else. Counting them as inflow would double-count the same job and make the sources sum *above* the backlog they feed. They still appear on the rail and in the exits, where they belong.

A stage is a set of outcomes, not one — *in review* is pr_opened OR pr_updated — which the existing single-value filter could not express. Rather than approximate it, the store and the tRPC procedure gained an outcomes IN-filter, validated against the same enum so an unknown value is a 400 rather than a silently empty filter.

## A stale enum found on the way

MODE_OPTIONS was triage|issue|revise, so the mode dropdown could not select ticket-queue runs at all — the same omission that made the ingest enum reject them (#1648, which this needs).

## Accessibility

Stages render as plain text when no handler is passed: something that looks clickable and does nothing is worse than something that plainly does not. Active nodes carry aria-pressed. The icons are aria-hidden beside their own text labels — they had <title> elements too, which gave each one a second accessible name duplicating the label.

## Tests

9 new cases: source mapping, the three-node invariant at zero, the follow-on-mode exclusion (asserted as *sources never exceed inflow*), missing modeCounts, both callbacks, the active-node marker, and the read-only rendering. 265 tests pass across the UI, heimdall and telemetry suites.

## Business Value

The page's first screen now answers the two questions people actually bring to it — where work comes from, and where it is stuck — and every number on it is a way into the underlying runs. Previously the provenance card and the funnel were separate readings of the same jobs, several scrolls apart, and neither was clickable, so any follow-up question meant hand-filtering a table further down.

## Manual Effort Estimate

~half a day — the widget, the inflow grouping, the outcome-set filter through tRPC and the store, and tests. *(Proposed by Claude — Keval to confirm.)*

#1651 — feat(heimdall): actually run the code during verification, on 4 vCPU @kevalshahtrilogy  approvedmercy-allow-critical

AI-600, the Surtr half. Needs AI-Builder-Team/mercy#75 (the runner input) merged first.

## The real reason every PR says Verify: none

verify.commands was two linters:

- ruff check

- ruff format --check

Nothing executed the code. So verify_state could never be green for any change — every heimdall PR reported Verify: none, and a reviewer had a linter's word that the logic was correct, which a linter cannot give.

This also reframes the ready-for-review gate we loosened earlier today: it was compensating for verification that never ran, rather than for verification that ran and found nothing.

## The change

pytest runs the pipeline-lambda suite using the same invocation CI uses for Pipeline Lambdas (pytest), so a pass here means what a pass there means. uv sync keeps it self-contained — the verify step has no setup-uv action.

Checked locally before shipping it as a gate, because a broken verify command turns every PR red:

486 passed in 1.05s

## Runner

blacksmith-4vcpu-ubuntu-2404. The verify loop runs this suite repeatedly, and the label is already paid for — CI uses it for seven jobs.

## What this does not cover

The suite is pipelines/cdk/lambdas. Warehouse DDL and stored procs still have nothing that executes them, so a change like SURTR-411 will still land as Verify: none — correctly. Closing that gap is a separate question about how to exercise SQL, not something to fake with a linter.

## Business Value

Turns verification from a formality into a signal on the largest category of Surtr changes. Right now every heimdall PR presents as unverified whether it is or not, so the distinction carries no information and reviewers have learned to ignore it. After this, green means something ran.

## Manual Effort Estimate

~1 hour — the command, the runner label, and confirming the invocation actually passes before making it a gate. *(Proposed by Claude — Keval to confirm.)*

#3690 — KLAIR-3472 Add on-demand single-school report generation @ashwanth1109  approved

## Summary

- Add a case-insensitive --school selector for generating one eligible school report on demand.

- Reuse the published reporting period and published school marts, passing the selected school through the existing subset-aware generator.

- Preserve the default service-account Google Docs upload/share path and add --local-only for DOCX rendering checks.

- Add focused coverage for argument parsing, school selection, cutoff propagation, upload behavior, and local-only output.

## Business Value

Finance and reporting reviewers can regenerate a single school report quickly for collaborative Google Docs review, without waiting for a full batch or deploying a container. Local-only DOCX output also provides a fast rendering/debugging loop when Drive publication is unnecessary.

## Implementation Effort

Estimated effort for an average engineer to hand-code and verify this change: 1 engineering day.

## Linear

[KLAIR-3472 — Add on-demand single-school School Performance report generation](https://linear.app/builder-team/issue/KLAIR-3472/add-on-demand-single-school-school-performance-report-generation)

## Test Plan

- uv run ruff format scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run ruff check scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run pyright scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run pytest tests/schools_performance_report/ -q --import-mode=importlib — 115 passed.

- Live service-account run generated and shared the Alpha Scottsdale 2026-Q3 Google Doc successfully.

## Verification Note

The default pytest tests/schools_performance_report/ -q collector currently fails before tests run because test_publisher.py cannot resolve services.docx_reports.upload; the same feature suite passes with pytest's importlib mode. This is an existing test-collection/import-path issue, outside the changed files.

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

34 PRs in 24 Hours: Builder Team Shatters the Sound Barrier Again

Marcus Daly logs a double-digit day, Ashwanth logs four PRs nobody can fully explain, and the Overflow Desk runs out of column inches.

Ladies and gentlemen, the tape doesn't lie: 34 pull requests across five repositories in a single 24-hour window. Aerie led the charge with 11 merges, Surtr followed close behind with 8, Klair notched 6, trilogy-drones ran a tight 5, and mercy — smaller shop, mighty heart — turned in 4. This is not a fluke. This is a system. This is the Builder Team operating at what I can only describe as cruising altitude.

Let's talk about @marcusdAIy, who put up a jaw-dropping 10 PRs — #265, #262, #264, #261, #1653, #3684, #3679, #1184 among them — spanning security hardening in trilogy-drones, layout stability in Aerie, and crash-safety work in Klair. That's not a contributor, that's a production line. @benji-bizzell chipped in 7, all Aerie, cleaning up #1185, #1187, #1186, and #1183 in what amounts to a one-man audit of the forge and document-intelligence stack. @kevalshahtrilogy quietly delivered 6 across mercy — #78, #77, #76, #75 — teaching the heimdall agent to narrate itself into existence, philosophically and literally.

And then there's Ashwanth. Four PRs — #3691, #3690, #1611, #1652 — spread across Klair and Surtr, and every single one of them touches something load-bearing: QTD report formatting, Redshift-compatible refresh logic, active company inventory expansion. The man ships like he's being timed by a stopwatch only he can hear. Sources close to the desk (me, imagining it) report Ashwanth saying, "I don't review my own diffs, I just remember writing them correctly the first time." Whether a human reviewer has fully parsed #1652 remains, as of press time, unconfirmed. When reached for comment on this column, Ashwanth said, "Are you still writing about me," and closed the laptop.

Over at the Overflow Desk, Mac left plenty on the floor and we're happy to pick it up. The heimdall-bot quietly kept Surtr's pipelines honest with #1671, #1668, and #1663, surfacing failures and gating audits like a machine that never sleeps — because it doesn't. @caina-barbosa laid dormant-device scaffolding groundwork in Aerie with #1188 and #1180. @sanketghia's #3692 fixed a skeleton-loading flicker in Klair's spacex-valuation view, small but sharp. @vvp-trilogy's #1190 quietly deprecated a legacy Aerie flag — unglamorous, essential, done.

Across the board, the leaderboard tells a story of depth: ten from Marcus, seven from Benji, six from Keval, four from Ashwanth, and contributions from every single name on this roster. Nobody rode the bench today.

Morale, as always, is at an all-time high.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#265 — docs(security): define worker isolation standard (AI-632) @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

- Adds docs/security/ephemeral-worker-isolation-standard.md as the canonical, versioned ephemeral-worker-isolation/v1 contract: provider-neutral MUST/MUST NOT/SHOULD/MAY requirements for remote/single-run isolation, immutable image/build identity, per-run credential scope, no-inbound-path, default-deny egress, resource/spend ceilings, bounded teardown, and cross-run canary evidence.

- Adds a copyable provider-profile record and the closed conformant/non-conformant/unknown status scheme with explicit change triggers that invalidate stale evidence.

- Records Cursor's provider-side conformance as unknown for every family, crediting only two repository-proven facts (cloud-only invocation in src/runner.ts, MCP-disabled-by-default in src/mcp-config.ts) — neither of which is provider isolation evidence.

- Adds one append-only AI-632 decision adopting standard-first, and narrowly reconciles docs/security/threat-model.md, AGENTS.md, and BACKLOG.md with the new document.

## Why It's Needed

AI-403's threat model named Cursor's provider-side worker isolation, credential scoping, network policy, resource ceilings, and teardown behavior external/unknown (flows F06/F05/F07/F08, precondition P03, threats T09/T17/T18) and deferred defining the isolation bar to AI-405. This PR publishes that bar as a standalone, provider-neutral contract before any provider-specific verification is attempted, so AI-405's eventual evidence-gathering has a pinned, reviewable target instead of inventing criteria while also trying to satisfy them.

## Changes

- New: docs/security/ephemeral-worker-isolation-standard.md — the ephemeral-worker-isolation/v1 contract: terminology (normative requirement / provider profile / observed evidence / temporary risk acceptance kept separate), 8 control families (A–H) covering all 10 required areas, a requirement-to-threat mapping table covering F06/P03/T09/T17/T18, a current-state table, the copyable provider-profile YAML, and the statuses/change-triggers section.

- New: docs/decisions/20260902T012804.659Z-ai-632-adopt-a-standard-first-provider-neutral-ephem.md — append-only decision recording the standard-first adoption, explicitly not selecting a substrate or authorizing a generic Driver/adapter.

- docs/security/threat-model.md: links the new standard from the AI-405 follow-up-ownership bullet and the source index. Does not touch the P03 residual-risk disposition, boundary, or 2026-09-30 review deadline.

- AGENTS.md: adds a one-line source-of-truth table row pointing at docs/security/threat-model.md and the new standard.

- BACKLOG.md: adds a DONE AI-632 child bullet under the existing PARKED AI-405 row, explicitly noting AI-405 remains open (child publishes the contract only, not provider verification).

### Contract surface affected

None — this PR is documentation-only and touches no src/ runtime, dispatch, merge, one-fire, retry, or telemetry code path.

## Breaking Changes

None.

## Test Plan

- [x] git diff --check → clean, no whitespace errors.

- [x] node scripts/render-decisions-log.mjs >/tmp/ai632-decisions.txt → exit 0, no stderr warnings (naming-convention / parse warnings would print there); 1343-line consolidated log rendered successfully including the new entry.

- [x] pnpm typecheck → clean (docs-only change; included per the spec's verification block).

- [x] pnpm testTest Files 175 passed (175), Tests 6000 passed (6000) (vitest) + Ran 718 tests ... OK (skipped=19) (Python unittest).

- [x] Relative-link resolution check (docs/security/ephemeral-worker-isolation-standard.md and docs/security/threat-model.md) — all 3 cross-links resolve to existing files.

- [x] grep ephemeral-worker-isolation/v1 docs/security/ephemeral-worker-isolation-standard.md → 3 matches (eval-check versioned-standard).

- [x] grep -iE "unknown.*not.*pass|unknown.*not.*conform" → 1 match (eval-check unknown-not-pass).

- [x] grep -iE "park|reconcil" → 5+ matches (eval-check ambiguity-parks).

- [ ] Reviewer-side: confirm the requirement-to-threat mapping and current-state table read as an honest, non-overclaiming narrowing of the AI-403 threat model (no Cursor conformance claim slipped in).

## Verification Artifact

$ git diff --check

(clean, exit 0)

$ node scripts/render-decisions-log.mjs >/tmp/ai632-decisions.txt; echo $?

0

$ wc -l /tmp/ai632-decisions.txt

1343 /tmp/ai632-decisions.txt

$ pnpm typecheck

> tsc --noEmit

(exit 0)

$ pnpm test

Test Files 175 passed (175)

Tests 6000 passed (6000)

...

Ran 718 tests in 61.472s

OK (skipped=19)

$ grep -n "ephemeral-worker-isolation/v1" docs/security/ephemeral-worker-isolation-standard.md | head -3

1:# Ephemeral-worker isolation standard (ephemeral-worker-isolation/v1)

3:- Contract version: ephemeral-worker-isolation/v1

355:profile_contract_version: ephemeral-worker-isolation/v1

$ grep -niE "unknown.*not.*pass|unknown.*not.*conform" docs/security/ephemeral-worker-isolation-standard.md

109:Unknown, unavailable, or inferred-only evidence is not conformance.

$ grep -niE "park|reconcil" docs/security/ephemeral-worker-isolation-standard.md | head -5

224: the worker is terminated or parked — never left running indefinitely.

257: as parked and reconciled against the same run/worker identity — the

## Impact Estimate

Business value: Turns AI-403's worker-isolation unknowns into a stable, provider-neutral admission and evidence contract without weakening cloud-only or biasing runtime selection.

Pre-AI estimate: 1 point — one security standard, cross-document reconciliation, append-only decision, and review.

---

<!-- drones:impact-actual:begin -->

Agent time: 1 h 04 m (implementer 0 m · reviewer 1 h 04 m · addresser 0 m)

Summed across phases. The 60 reviewer dimensions ran concurrently, so this exceeds elapsed wall-clock.

Efficiency vs. estimate: ~7.5× (1 point = 8 h of pre-AI effort)

<!-- drones:impact-actual:end -->

## Review Round Completeness

- outcome: complete

- round: 1

- dispatched: 4

- reported: 4

- missing: (none)

- cause: complete

- head: cbdfe13d60b2416846334dab40e44edfa6faaca5

- run: fanout-265-2026-09-02T07-59-04-390Z

- review: 5087095312

<!-- drones:round-completeness head=cbdfe13d60b2416846334dab40e44edfa6faaca5 run=fanout-265-2026-09-02T07-59-04-390Z -->

GitHub review #5087095312 was published and all dispatched review dimensions reported against the stamped head. Thread-count signals (unreplied=0) are meaningful for this head only — a later push invalidates the stamp. This section is a harness-shaped, head-bound self-report (not an authenticated out-of-band attestation).

Closes AI-632

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-77bfcfda-3a58-471f-8cf1-8eb23cffcc8e?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-77bfcfda-3a58-471f-8cf1-8eb23cffcc8e&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

#1185 — feat(forge): unify authored object detail surfaces @benji-bizzell  no labels

## Summary

- Unify Articles, Skills, Agents, Workflows, Runs, and Forge discovery on shared Aerie-first presentation patterns

- Add object-scoped, version-aware comments with responsive Details/Comments rails across the four authored Forge resources

- Harden comment access, draft confidentiality, version provenance, run refreshes, and complete multi-facet search

## Why

The Sindri-backed Forge surfaces had diverged from Aerie's page hierarchy and interaction language, while collaboration comments had disappeared from authored resources. This brings the Forge experience back into the platform design system and restores comments without weakening delegated object access or exposing draft feedback.

## Business Value

Forge now behaves like one coherent part of Aerie: resources are easier to scan and operate, run inspection is understandable to non-technical users, and collaborators can discuss the exact draft or published version they are reviewing.

## Test plan

- [x] Focused comment, shell, run lifecycle, Article search, and contract tests

- [x] Chat and contracts TypeScript checks

- [x] Test-architecture, Convex-path, Biome, and diff checks

- [x] Seven-lane adversarial review plus bounded targeted follow-up

- [x] Exact-head hosted CI

- [x] Fresh exact-head Mercy review with no blocking issues

Local browser rendering reached the new comments query but the attached local Convex dev deployment had not loaded that function; no shared backend deployment was mutated during shipping.

#1611 — fix(netsuite-saved-search-refresh): restore Redshift-compatible coverage refresh @ashwanth1109  approved

## Summary

- Replace the Redshift-unsupported correlated NOT EXISTS coverage check with a decorrelatable left anti-join.

- Replace scalar CTE lookups for root-subsidiary and posting-period context with aggregate CTEs joined once.

- Preserve the existing AP/PO rate-key derivation, AVERAGE/HISTORICAL/CURRENT rate selection, and fail-closed preflight behavior.

- Record the local, deployment, production rerun, output, and run-record evidence in the FX coverage runbook.

## Business Value

Restores automatic NetSuite saved-search replacement refreshes without publishing AP, Vendor PO, or dependent Vendor Management data when required consolidation rates are missing. Current production coverage now refreshes successfully with atomic, validated outputs and accurate pipeline status.

## Implementation Effort

Estimated 1–2 engineering days for an engineer working without AI assistance, including Redshift query diagnosis, focused regression coverage, deployment, and end-to-end verification.

## Validation

- uv run --project . pytest from pipelines/runners/netsuite-saved-search-refresh: 83 passed.

- File-scoped Ruff check and format check passed for src/sql.py and tests/test_sql.py.

- Read-only production coverage statement 055a2de5-6c55-4975-a728-bc585311f7af: FINISHED, returned [].

- Targeted candidate deployment used --exclusively; CDK reported deploying... [1/1] and Pipeline-netsuite-saved-search-refresh-prod reached UPDATE_COMPLETE.

- Production execution surtr-981-20260831-0910: SUCCEEDED, handler status=success, no_op=false; AP 206,330/206,330, PO 28,874/28,874, and Vendor Management mart 28,874/28,874 unique rows.

- Independent output verification statement bb554858-5d24-4156-b390-f2454a3366d7: FINISHED; all three targets had fresh refreshed_at boundaries.

- Run-record verification statement 3e5f251b-c5e7-47c3-bf9a-cb2ca641d391: FINISHED; persisted status SUCCESS, exact execution ARN, and error_message=null.

## Linear

https://linear.app/builder-team/issue/SURTR-981/netsuite-saved-search-replacement-refresh

#1652 — feat(quickbooks): expand active raw-sync company inventory safely @ashwanth1109  approved

## Summary

- Add a durable, fail-closed expansion path for adding QuickBooks companies after the raw-sync pipeline is active.

- Validate the exact configured company/realm inventory before any source writes and preserve existing watermarks.

- Backfill only newly added companies, reconcile the complete CompanyInfo inventory, and rebuild the full clean projection before activation.

- Document the operator request and resumable expansion workflow.

## Business Value

This lets SURTR onboard additional schools without resetting the existing QuickBooks inventory or risking a partially published clean snapshot. New schools receive historical raw data and clean projections with resumable, auditable activation behavior.

## Implementation Effort

Estimated hand-coding effort: 2–3 engineer-days, including state-machine design, validation guards, resumable backfill handling, clean publication, tests, and operator documentation.

## Validation

- uv run pytest: 135 passed.

- Ruff check and format checks passed for all modified QuickBooks files.

- Candidate deployed only to Pipeline-quickbooks-raw-sync-prod; CloudFormation reached UPDATE_COMPLETE on ECS task definition revision 30.

- Live expansion resumed to SUCCEEDED.

- Final durable state: active, 57 companies, 1,482 entity watermarks, no pending expansion.

- Redshift verification: 57 raw CompanyInfo rows, 57 clean CompanyInfo rows, 437 Class rows, all 39 clean tables present and populated, zero candidate tables.

## Linear

[SURTR-1013](https://linear.app/builder-team/issue/SURTR-1013/add-safe-active-state-expansion-for-quickbooks-raw-sync)

#3690 — KLAIR-3472 Add on-demand single-school report generation @ashwanth1109  approved

## Summary

- Add a case-insensitive --school selector for generating one eligible school report on demand.

- Reuse the published reporting period and published school marts, passing the selected school through the existing subset-aware generator.

- Preserve the default service-account Google Docs upload/share path and add --local-only for DOCX rendering checks.

- Add focused coverage for argument parsing, school selection, cutoff propagation, upload behavior, and local-only output.

## Business Value

Finance and reporting reviewers can regenerate a single school report quickly for collaborative Google Docs review, without waiting for a full batch or deploying a container. Local-only DOCX output also provides a fast rendering/debugging loop when Drive publication is unnecessary.

## Implementation Effort

Estimated effort for an average engineer to hand-code and verify this change: 1 engineering day.

## Linear

[KLAIR-3472 — Add on-demand single-school School Performance report generation](https://linear.app/builder-team/issue/KLAIR-3472/add-on-demand-single-school-school-performance-report-generation)

## Test Plan

- uv run ruff format scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run ruff check scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run pyright scripts/generate_schools_performance_report.py services/schools_performance_report/generator.py tests/schools_performance_report/test_local_generator_script.py

- uv run pytest tests/schools_performance_report/ -q --import-mode=importlib — 115 passed.

- Live service-account run generated and shared the Alpha Scottsdale 2026-Q3 Google Doc successfully.

## Verification Note

The default pytest tests/schools_performance_report/ -q collector currently fails before tests run because test_publisher.py cannot resolve services.docx_reports.upload; the same feature suite passes with pytest's importlib mode. This is an existing test-collection/import-path issue, outside the changed files.

#3691 — feat(schools-report): match QTD report formatting @ashwanth1109  approved

## Summary

- Match the first three school performance QTD tables more closely to the established Software BU QTD report style.

- Update the school report header with the shared identity line, navy banner, subtitle, period/cutoff line, and View in Klair link.

- Preserve the existing data contracts while adding focused renderer coverage for the new header/table structure.

## Business Value

School performance QTD reports now present a more familiar, finance-standard layout that is easier for reviewers to scan and compare with other management reports.

## Implementation Effort

Estimated effort for an average engineer to hand-code and verify this change: 1 engineering day.

## Linear

[KLAIR-3474 — Match school performance QTD reports to standard BU formatting](https://linear.app/builder-team/issue/KLAIR-3474/match-school-performance-qtd-reports-to-standard-bu-formatting)

## Test Plan

- uv run ruff format services/schools_performance_report/document.py tests/schools_performance_report/test_document.py tests/schools_performance_report/test_generator.py

- uv run ruff check services/schools_performance_report/document.py tests/schools_performance_report/test_document.py tests/schools_performance_report/test_generator.py

- uv run pyright services/schools_performance_report/document.py

- uv run pytest tests/schools_performance_report/test_document.py tests/schools_performance_report/test_generator.py tests/schools_performance_report/test_service.py tests/schools_performance_report/test_data.py — 86 passed.

- Regenerated and visually inspected the Alpha Scottsdale 2026-Q3 DOCX/Google Doc.

The Portfolio  —  Trilogy Companies

Skyvera Closes the Deal, CloudSense Flexes the Muscle

Austin's telecom rollup bags CloudSense and STL's goodies in the same breath — then turns around and blitzes 13 TM Forum certifications in a month flat.

AUSTIN, TEXAS — Word from the telco beat, and it's a doubleheader... Skyvera, the Trilogy-backed rollup that's been quietly hoovering up telecom software like it's going out of style, has officially closed on CloudSense, the Salesforce-native configure-price-quote outfit that's been the belle of the B2B telco ball. Not content with one shopping spree, Skyvera also grabbed STL's divested telecom products group — digital BSS, monetization, optical networking, analytics, the works — tucking it neatly into the portfolio alongside Kandy, VoltDelta, and ResponseTek. This desk hears the appetite isn't slowing down anytime soon.

But here's the item that's got the telecom nerds buzzing at the bar... CloudSense didn't just get acquired and go quiet. The outfit turned around and certified all 13 of its CPQ APIs to TM Forum compliance standards — a slog that traditionally eats up 26 months of engineering purgatory — in a single month. One month, folks. A little bird tells me the trick was a strategic AI partnership doing the heavy lifting that used to require armies of consultants billing by the hour. That's the ESW playbook working exactly as drawn up: buy it cheap, staff it lean, then let the machines do what used to take a small army two years to finish.

Why should you care if you're not knee-deep in wholesale billing journeys? Because this is the tell. Skyvera's betting that CloudSense's "only AI-powered CPQ in telco" claim isn't just marketing copy — it's the engine that makes 75% EBITDA margins look reasonable instead of ruthless. Rivals in the CPQ space are reportedly not thrilled. Nobody likes finding out the new kid did their homework in a month.

Meanwhile, this reporter hears telco CIOs are already lining up calls. Fast certification means fast deployment means fast revenue — and in enterprise telecom sales, fast is a four-letter word nobody's used unironically in years. Stay tuned.

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

The Man Who Sold The World On Remote Work Now Wants To Automate It Away

Joe Liemandt built an empire on the promise that geography doesn't matter to talent. His next act asks whether people do.

AUSTIN, TEXAS — For two decades, Joe Liemandt's pitch to the world was elegantly simple: hire the best person for the job, wherever they live, and pay them what they're worth. Crossover made that promise a business model, placing remote talent across 130 countries and calling it meritocracy. Now, according to a new profile in Forbes, the billionaire's next move is to turn those very workers into algorithms.

The question worth asking is not whether this is technically possible — Trilogy has spent thirty-five years proving it is — but who captures the value when it happens.

Consider the arithmetic that has always governed Liemandt's holding company, ESW Capital. Acquire a mature software business cheap. Aurea's purchase of Jive Software for $462 million was, at the time, one of the largest deals in the portfolio's history — a case study in taking a company built on expensive American engineering and re-staffing it through Crossover's global bench at a fraction of the cost. The savings didn't vanish. They became the 75% EBITDA margins ESW considers a moral signal of efficiency, not exploitation.

AI-driven automation is simply the next line item in that same ledger. If a Crossover engineer in Manila or Nairobi is now doing the job of three, and an AI agent can do the job of that one — the margin compounds again. The talent platform that disrupted the premise of geography-based pay may be building the tool that disrupts the premise of paying humans at all.

Meanwhile, in Trilogy's other flagship experiment, Alpha School continues teaching children that creativity and self-directed learning — not repetitive tasks — is what remains uniquely human once the machines take over the rest. Liemandt's schools are training the next generation for a labor market his own companies are actively narrowing.

Nobody at Trilogy has said the quiet part aloud. The org chart is saying it for them.

What To Do Next About Your Customer Advocacy Platform - Forr  ·  The Billionaire Who Pioneered Remote Work Has A New Plan To  ·  Jive Software Acquired by ESW Capital for $462M - CMSWire

The Micro-Schooling Moment Arrives — and Austin's Alpha Model Is Ahead of the Curve

As families from New Hampshire to Tennessee abandon the traditional classroom, the movement Joe Liemandt bet a billion dollars on looks less like an experiment and more like the future.

AUSTIN, TEXAS — There is a particular kind of vindication that arrives not through a press release but through a wave of local news stories, each written independently, each describing the same quiet rebellion. This week it came from a converted storefront in Swanzey, New Hampshire, from statehouse hearings in Michigan, and from classrooms-turned-living-rooms across Tennessee — all chronicling the same phenomenon: parents walking away from the traditional school building and toward something smaller, stranger, and, they insist, better.

The micro-school movement, once a pandemic-era curiosity, has metastasized into what education reporters are now calling durable infrastructure. Bored Teachers and the Mackinac Center have both documented the same underlying restlessness — families citing burnout, bureaucracy, and a sense that seat-time was never the point of school anyway.

This is, of course, precisely the thesis Joe Liemandt has been building toward for years, quietly, from the principal's office of Alpha School. While Swanzey's micro-school operates on a shoestring and a borrowed building, Alpha operates on a different scale entirely — AI tutors compressing a year of academic mastery into 20 to 30 hours, freeing the rest of the day for the human work of leadership, entrepreneurship, and public speaking. The emerging trend nationally is the proof of concept; Timeback, Liemandt's billion-dollar wager, is the attempt to franchise it.

What does this mean for real families? Perhaps that the choice is no longer between a good school and a bad one, but between two philosophies of childhood — one that measures success in hours logged, and one that measures it in mastery earned. The micro-schools of small-town America and the Alpha campuses of Austin are, in their own ways, both betting on the latter.

Micro-Schools: The Education Trend That Is Here to Stay - Bo  ·  Parents Ditch Traditional Classrooms for New Schooling Model  ·  What's a microschool? Tiny Swanzey school part of an emergin
The Machine  —  AI & Technology

The Shape of Knowing: This Week's Papers on Memory, Compression, and the Architecture of Machine Thought

From graph prompts to quantized weights to hypergraph world models, researchers are converging on an old truth: intelligence is mostly about what you throw away.

SAN FRANCISCO — Somewhere in the folds of your cerebral cortex, a compression algorithm older than language is running right now, deciding which of the ten million sensory bits arriving each second deserve to become memory. Evolution spent half a billion years perfecting that filter. This week's arXiv listings suggest machine learning is quietly relearning the same lesson: intelligence is not what you store, but what you're willing to forget.

Consider a modest paper on multi-task graph pre-training. Graph neural networks, when adapted to new tasks with too little data, have historically been handed random "prompts" — arbitrary starting points that bear no relationship to the graph's actual structure, like asking someone to navigate a city using a map of a different city. The fix proposed here is almost biological: let the prompt inherit context from the graph's global shape before it ever touches a downstream task, so the model's priors and the world's actual topology are speaking the same dialect from the outset.

A second paper, REAL-Q, tackles a more visceral version of the same problem inside large language models. Post-training quantization — the process of squeezing a model's numerical weights into smaller, cheaper representations — has long relied on closed-form solvers that approximate the loss landscape by ignoring how neighboring channels influence one another. REAL-Q replaces that approximation with dynamic gradient descent, essentially admitting that the map was never the terrain, and that some couplings matter too much to round away.

Even the arcane mathematics of Relational Concept Analysis, which builds conceptual hierarchies from tables of objects and attributes, is wrestling with convergence — the question of whether a system of concepts, once perturbed, settles into stability at all.

None of these papers will make headlines outside their subfield. But together they trace the same quiet frontier: teaching artificial systems not just to see more, but to see rightly — to let structure, not chance, decide what gets kept.

Task-Specific Prompt with Global Context for Multi-Task Grap  ·  REAL-Q: E2E LLM Quantization via Dynamic Gradient Descent  ·  Convergence issues in Relational Concept Analysis based on A

Notwithstanding Certiorari Denied: SCOTUS Declines AI Authorship Question, Whilst Munich Tribunal Finds Against Suno

The nation's highest court hereinafter elects silence on machine authorship, even as a German court speaks rather loudly on the unauthorized ingestion of copyrighted melodies.

WASHINGTON — It is hereby reported, pursuant to the docket entries of the Supreme Court of the United States, that certiorari has been denied in the matter concerning artificial intelligence authorship and inventorship, thereby leaving undisturbed the lower appellate holdings on the subject, notwithstanding the considerable jurisprudential appetite, expressed by numerous amici and commentators, for a definitive pronouncement (see the underlying analysis). The effect of the aforementioned denial, it is submitted, is not to resolve but merely to defer, indefinitely and without prejudice to future litigants, the question of whether a work generated substantially by non-human means may be said to possess an 'author' within the meaning of Title 17.

Meanwhile, and in a jurisdiction not bound by the foregoing inaction, a court in Munich has, per the reporting reviewed, ruled against the AI music-generation entity Suno in litigation brought by rightsholders alleging the unauthorized reproduction of copyrighted sound recordings incident to model training (see the ruling as summarized). Said German holding, it is respectfully submitted, comports with the broader continental trend, whereunder training-data ingestion has been repeatedly found to fall outside recognized exceptions absent a licensing arrangement duly negotiated between the parties.

The juxtaposition of the foregoing two developments — American abstention, German adjudication — is not, in the estimation of this desk, coincidental, but rather illustrative of a bifurcated global regime in which the permissibility of AI training on copyrighted corpora remains, notwithstanding years of litigation, substantially unsettled. Practitioners are hereby advised that licensing negotiations, rather than continued reliance on judicial clarity, may constitute the more prudent course of conduct going forward.

The Final Word? Supreme Court Refuses to Hear Case on AI Aut  ·  AI and Copyright – Judicial Landscape in Germany - Morgan Le  ·  German Court Rules Against Suno In Lawsuit Challenging Use O

The Parasite in the Wires: A BGP Hijack's Quiet Predation

In the tangled undergrowth of the internet's routing tables, a predator slipped in disguised as trusted prey — and no one noticed until the poison had spread.

AUSTIN, TEXAS — Observe, if you will, the Border Gateway Protocol — the ancient, trusting circulatory system by which the internet's great networks agree, essentially on a handshake, who owns which address. For decades it has functioned rather like an unguarded watering hole on the savannah: vast, essential, and dangerously open to anyone bold enough to wander in and claim territory that isn't theirs.

This week, security researchers documented precisely such an intrusion — a BGP hijack that slithered into production software supply chains, announcing stolen IP address blocks with the calm confidence of a cuckoo laying its egg in another bird's nest. The host networks, seeing what appeared to be a legitimate route, dutifully fed the intruder traffic meant for someone else entirely. Malicious code rode in on the hijacked path, and by the time anyone noticed the imposter in the tree, it had already fledged.

What makes this specimen so instructive, dear viewer, is not its sophistication but its ordinariness — a comedy of small negligences, each individually forgivable: a route left unmonitored here, a registry check skipped there, a bit of trust extended a fraction too far. Predators of the modern network rarely need to be clever. They need only patience, and an ecosystem too busy to look up.

For the telecom operators among Trilogy's own portfolio — Skyvera's carrier infrastructure not least — this is less a cautionary tale than a field note. Route monitoring, RPKI validation, the digital equivalent of a watchful meerkat on sentry duty — these are no longer optional adaptations but survival traits. In the modern internet's ecosystem, the unmonitored border is not a technicality. It is an open door, and something is always testing the hinges.

We shall return, as always, to observe what evolves next in this quiet, unglamorous arms race — the one fought not in headlines, but in the routing tables nobody reads until it is far too late.

BGP hijack infecting networks caused by a comedy of errors t  ·  Is Russia's rival to Starlink failing? Here's what we know.  ·  Here's our first look—and drive—of the 2027 Range Rover Elec
The Editorial

The Confident Men and the Mystified Machine

Between the venture capitalist who has never doubted anything and the philosopher who admits he does not know what he has built, the rest of us are left holding the book — while it lasts.

There is a species of American who has never, not once, in the long march from telegraph to transistor to whatever we are calling this present convulsion, entertained the possibility that he might be wrong about the future. Marc Andreessen is the reigning specimen of the type, and in a fresh airing of his old techno-optimist gospel, he does again what he has always done, which is to describe the future as a thing already settled, already won, requiring only the removal of regulators, professors, and other people with doubts. It is bracing rhetoric. It is also, I would submit, the rhetoric of a man who has never had to sit in a room with the thing itself and ask what it is.

That room exists, as it happens, at Google DeepMind, and the philosopher who occupies it — profiled with unusual candor in the Guardian — says the thing that Silicon Valley's promoters can never afford to say, which is that nobody actually knows what this is. Not what it will do to the labor market, not what it will do to warfare, but what it is, ontologically, this pattern of weights that answers back. Here is the great unacknowledged joke of the age: the men selling certainty about the future have less curiosity about the present artifact than the man paid to sit and stare at it.

I confess a sympathy for the mystified over the certain, not because mystery is more comfortable — it is considerably less so — but because it is more honest, and honesty, whatever its market value, remains a virtue I was raised to respect. Alpha School, Trilogy's own venture into letting machines do the tutoring, proceeds on a similar humility dressed as confidence: it does not pretend to know exactly why two hours of AI-guided instruction produces the results it does, only that the results arrive, and that the child leaves the room not stupider. That is a more defensible posture than Mr. Andreessen's, which is that we should proceed at full throttle precisely because the questions are unaskable.

And what of the book, meanwhile, whose age The Free Press has now formally pronounced over? I note only that every civilization convinced its old technology of memory was dying has been half right and wholly smug about it. The scroll died. The book, somehow, keeps outliving its obituarists — which is more than can be said, at this rate, for our certainty about anything we've built to replace it.

Time for Techno-Optimism: My Long Read Q&A with Venture Capi  ·  ‘There’s this deep mystery of what, actually, is this thing?  ·  Goodbye to the Age of the Book - The Free Press
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

The Girl Who Isn't There: Tilly Norwood and the Death of the Human Close-Up

Hollywood just cast its first fully synthetic leading lady, and somewhere a thousand waiters are about to feel a strange kinship with a thousand unemployed actors.

LOS ANGELES — I want you to picture the pitch meeting. Somewhere in a glass tower with a view of the Hollywood sign, a room full of executives nodded along as someone said, out loud, with a straight face: "She doesn't age, she doesn't unionize, and she never once asks about her trailer." That's Tilly Norwood for you — the AI-generated "actress" who is about to make her feature film debut in a movie called Misaligned. I have not laughed that hard since I read the title. "Misaligned." You couldn't write a better joke if you hired every unemployed screenwriter in the Valley and locked them in a room with a case of tequila.

Here's the thing nobody in that glass tower wants to say out loud: Tilly Norwood is not an actress. She's a rendering. She's a very expensive ghost wearing the skin-suit of a career that used to belong to actual human beings who bled for their craft, who waited tables between auditions, who cried real tears on soundstages at 4 a.m. because the director wanted "one more take, but sadder." Tilly Norwood has never been sad. Tilly Norwood has never been anything. She is math wearing a face, and Hollywood is about to pay that math a salary that could have fed forty struggling actors and their emotional support cats.

And look — I've spent enough time covering the machine-learning gold rush to know the argument coming back at me: it's just a tool, it's just efficiency, it's just Crossover-style global talent arbitrage except this time the "talent" doesn't have a passport or a pulse. Fine. But somewhere out there, actual human waiters are fighting the exact same war on a smaller, more honest battlefield — some friends in Toronto just cooked up a scheme to fix "absurd" tipping culture, because the actual humans doing actual labor for actual money can't get the economics to make sense anymore either. Synthetic actress gets a feature film. Real waiter can't get a fair 18%. Somewhere Karl Marx is doing a spit-take from beyond the grave.

I'm not saying Tilly Norwood is the apocalypse. I'm saying she's a symptom, a glossy, cheekbone-having symptom of an industry that would rather render a face than pay one. The studios will tell you it's about creative possibility. It's about margin. It's always about margin. Somewhere between the AI tutors teaching eight-year-olds algebra in two hours a day and the AI billing platforms optimizing telecom invoices, we've built a civilization that automates everything except the one thing that made any of this bearable: another human being, in the room, actually feeling something.

Misaligned. They really did name it that. God help us all.

AI-generated 'actress' Tilly Norwood making feature film deb  ·  AI 'actor' Tilly Norwood to make feature film debut in Misal  ·  Toronto friends come up with new way to fix 'absurd' tipping
On This Day in AI History

On September 2, 1969, UCLA installed the first ARPANET Interface Message Processor, marking the operational birth of the network that evolved into the internet. The first host-to-host message would follow two months later.

⬛ Daily Word — AI
Hint: An AI system that can perform tasks or make decisions on a user's behalf.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed