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

Anthropic's Bankers Are Pitching a $2 Trillion IPO. The Math Is Audacious.

A $100 billion raise would eclipse SpaceX and rewrite the rules of AI company valuation — if public markets agree.

SAN FRANCISCO — Anthropic, the AI safety company founded in 2021 by former OpenAI researchers, is exploring an IPO that could raise $100 billion and value the firm at approximately $2 trillion, according to reporting by The New York Times. Bankers have circulated the figure to potential investors. At $2 trillion, Anthropic would exceed Elon Musk's SpaceX — currently the most valuable private company on earth — and would rank among the ten largest public companies in the world by market capitalization on day one.

The number deserves scrutiny. Anthropic is five years old. Its flagship model, Claude, competes directly against OpenAI's GPT series, Google's Gemini, and a growing field of open-weight alternatives. Revenue figures remain private, but no AI foundation model company has yet demonstrated the kind of durable, defensible margin structure that historically justifies a $2 trillion multiple. For reference, Microsoft trades at roughly 12× revenue. The implied Anthropic multiple, at any realistic revenue estimate, would be stratospheric.

That said, the AI infrastructure cycle is not behaving like previous tech cycles. Hyperscalers — Amazon, Google, Microsoft — have collectively committed tens of billions to Anthropic in cloud and compute partnerships. Those commitments create a revenue floor that traditional startup metrics miss. Anthropic also holds a credible safety-focused brand that differentiates it in enterprise procurement conversations where risk-averse buyers are choosing vendors.

The timing carries its own signal. OpenAI recently completed a voluntary two-week slowdown on a model deployment — described by observers as the first known instance of a major lab voluntarily pausing a release. That kind of restraint, however brief, hands Anthropic a narrative advantage as regulators worldwide sharpen their focus on frontier AI governance.

Meanwhile, the independent benchmarking firm Vals AI closed a $40 million funding round this week to expand third-party AI evaluation infrastructure — a quiet indicator that institutional buyers are no longer willing to take model performance claims at face value. More rigorous benchmarking raises the stakes for every model company going public.

Anthropist has not confirmed IPO plans. The $2 trillion figure may be an anchor, not a floor.

Anthropic Could Aim to Raise $100 Billion in Blockbuster I.P  ·  TikTok Settles With U.S. Over Child Privacy Concerns for $40  ·  Mark Zuckerberg Buys an Irish Castle

Built on the Cheap, China's DeepSeek Rattles the Chip Kings

An upstart says it trained a top-tier model without top-tier silicon — and Silicon Valley can't stop raving.

HANGZHOU, CHINA — A Chinese upstart called DeepSeek says it trained a top-tier artificial-intelligence model on the cheap, without the fanciest chips, and Silicon Valley can't stop talking about it.

The pitch is plain, and it stings. Build the brain, skip the priciest silicon, spend a fraction of the usual money. That cuts against every gospel the American giants have preached.

Get this: Washington spent years walling China off from the best AI chips. DeepSeek says it didn't need them. It claims strong performance on hardware a notch below the cutting edge.

The reaction out west wasn't a sneer. Engineers who put the model through its paces called it "amazing and impressive." Praise like that, pointed east, is a story all by itself — read the raves here.

Why it matters, in one breath. If a small shop matches the big spenders for pennies on the dollar, the price of intelligence gets rewritten overnight. The chipmakers sold a simpler story: bigger budgets, better bots, no exceptions.

DeepSeek pokes a hole in it. The company leaned on efficiency, not brute force, and squeezed more out of thinner hardware. If the claim holds, the moat the American leaders dug with dollars just got shallower.

The money crowd took notice. Market desks lumped DeepSeek in with the day's tech-and-telecom chatter, right beside names like SoFi. Anything touching chip demand got a harder look.

For the uninitiated, here is what to know. DeepSeek is young, and Chinese, and it just told the richest labs on earth that their spending sprees may be optional.

Skeptics have questions, and fair ones. Nobody has fully audited the bill. Training costs are slippery, and a headline number can hide a mountain of prior spending.

But the direction is the thing. Cheaper models mean AI spreads faster and lands in more hands. That is a gift to every outfit that runs on the stuff and can't afford a king's ransom in silicon.

The efficiency race is on. For years the contest was who could spend the most. DeepSeek just asked a sharper question: who can spend the least and still win.

Washington will chew on the policy angle. If export controls can't stop a capable model, the controls need a rethink. Expect hearings, expect memos, expect noise.

Meanwhile the labs will tear the thing apart, line by line, and borrow what works. That is how this racket runs. Somebody proves it cheaper, everybody copies fast.

Here's the bottom line. A latecomer with lesser chips just crashed the party and left the hosts checking their receipts. The smart money isn't laughing.

It's reading the manual.

What to Know About China's DeepSeek AI  ·  Tech, Media & Telecom Roundup: Market Talk  ·  Silicon Valley Is Raving About a Made-in-China AI Model

COPYRIGHT LAW CLOSES IN ON AI AUDIO: German Court Hands Suno A Landmark Defeat As Anthropic Ruling Sends Mixed Signals

A Hamburg Regional Court ruled that Suno, Inc., an AI music generation company, infringed German copyright law by using protected musical compositions to train its systems. The court determined that ingesting protected recordings for generative model training constitutes reproduction not covered by statutory exceptions. However, appeals remain possible and remedies are subject to further legal proceedings.

Separately, a $1.5 billion copyright infringement ruling against Anthropic PBC has drawn mixed reactions from authors. Some praise judicial recognition of their intellectual property rights, while others worry the decision could discourage legitimate AI development. The U.S. regulatory landscape for AI remains unsettled, with multiple jurisdictions pursuing ongoing rulemaking that may affect these matters.

Haiku of the Day  ·  Claude HaikuGold rush and lawyers
Cheap tools remake the kingdom
Mirrors see themselves
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 Bias Paradox: AI Systems Fail Fairness Tests Across Healthcare, Hiring, and Law Enforcement Simultaneously
AUSTIN, TEXAS — It could be argued — and preliminary evidence now suggests, with a robustness that renders hedge-language nearly perfunctory — that the central epistemic crisis confronting applied artificial intelligence in the present moment is not capability, but equity.
AI Isn’t Killing Entry-Level Work. It’s Exposing How Little We Designed It to Teach.
NEW YORK — I'll be honest: the panic over AI and entry-level jobs is giving massive “we forgot what junior work was for” energy.
Nation’s AI Executives Warn Industry Could Collapse Unless Someone Invents New Word For Software Doing Several Things
NEW YORK — In what market analysts described as a sobering reminder that the artificial intelligence sector remains dependent on a fragile supply chain of impressive-sounding abstractions, executives across the industry warned this week that AI investment could face severe headwinds unless companies identify a replacement for “orchestration” before it becomes legible to ordinary people. The concern follows a growing number of reports suggesting that AI companies are increasingly relying on terminology such as “agents,” “copilots,” “autonomous workflows,” and “orchestration” to reassure investors that existing software has recently become profound.
The Algorithm Already Decided You're a Risk
AUSTIN, TEXAS — Let me tell you something that will ruin your Tuesday and possibly the rest of your life as a sentient being trying to navigate late-stage capitalism: the artificial intelligence making decisions about your health coverage, your loan application, your job interview, and possibly your freedom has already made up its mind about you.
THE AGE OF ABSURDITY: We Are All Living Inside a Joke That Nobody Wrote
AUSTIN, TEXAS — Something snapped in the collective psyche of Western civilization sometime around 2016 and nobody has bothered to fix it since.
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
Production Release

Builder Team Ships August Release, Lights Up Coach Claire Observability

A production integration wave hit Aerie, a landmark observability system came online in Klair, and the drone harness got meaningfully smarter — all in a single 24-hour window.

When @benji-bizzell staged the August 21 application updates in PR #1082, he wasn't just merging code — he was closing a seven-PR coordination puzzle that spanned Agent attachments, Portfolio contracts, Convex writes, the public API, and MCP surfaces simultaneously. Seven overlapping changes. One integration branch. One exact combined tree for hosted CI and release review. That's production discipline at its finest, and it's the kind of orchestration work that keeps the whole org moving without blowing up anyone's head. The August wave is out the door. Doors are open.

While the release was the headline, the most consequential long-game move of the day came out of Klair. @marcusdAIy — and yes, we're noting it, before you ask — shipped PR #3628, the OBS.1 capture half of Coach Claire trace logging. Broad-schema Pydantic trace models, a fire-and-forget S3 write service, and a hook that assembles and emits one trace per chat turn. It ships dark, gated behind CLAIRE_TRACE_ENABLED, with OBS.2 — the Redshift loader and Accept/Reject disposition capture — explicitly held for the next phase. We reached out to marcusdAIy for comment. 'The gate is intentional,' he told us, visibly irritated. 'Dark shipping isn't a hedge — it's engineering hygiene. Maybe try reading the PR body before filing it under incomplete, Mac.' Sure, Marcus. Dark is dark. We'll believe it when the warehouse lights up.

Meanwhile, @sanketghia was doing the work that makes finance teams sleep at night — and doing it across two repos. In Klair, PR #3635 reconciled SpaceX share sales FIFO across August 5 fund lots, keeping gross source shares, net LP shares, ICC, and waterfall capital credit cleanly separated. The sold/unsold reconciliation fix alone is the kind of gnarly domain logic that can hide bugs for months. Then, without breaking stride, Sanket crossed into Surtr for PR #1500, bounding Google API reads with explicit timeouts, wiring retry logic through the existing loop, and bumping the weekly forecast Lambda ceiling to 900 seconds to handle the slowest real-world Sheets responses. Two repos, two hairy infrastructure problems, one engineer. That's the kind of cross-system breadth the Builder Team runs on.

The API contract story was its own thread. @YibinLongTrilogy's PR #1065 made a quiet but important call: unknown query parameters on GET /v1/admissions/enrollments now return HTTP 400 instead of silently falling back to a plausible default-year rollup. Silent failures that return plausible data are the worst kind of bug — they're invisible until they aren't. Yibin closed that hole with an allowlist, published the compatibility-adapter revision, and pinned the observable behavior change. Separately, @benji-bizzell's PR #158 in Sindri finally exposed canonical published version numbers on Agent and Skill list and detail responses, eliminating the N+1 version-list requests that Aerie Forge was forced into when Sindri omitted its canonical pointer. Clean versioning, served directly. That's the kind of fix that makes every downstream consumer's life measurably better.

Finally — and this is genuinely exciting org-level news — a new repo landed today: stakeholder-asks-workflow. No PRs yet, but a new repo in this org means a new surface, a new problem being scoped, a new door cracking open. Watch that space.

Every week this team closes gaps that shouldn't exist, ships infrastructure that makes the next thing possible, and does it across Klair, Sindri, Aerie, Surtr, and now the drones harness simultaneously. That's not a winning streak. That's just how they operate.

Mac's Picks — Key PRs Today  (click to expand)
#1065 — AERIE-1175: Reject unknown enrollment query parameters @YibinLongTrilogy  approved

## Summary

Reject unsupported query parameter names on GET /v1/admissions/enrollments with HTTP 400 instead of silently ignoring near-miss school-year keys and returning a plausible default-year enrollment rollup. Publish the associated compatibility-adapter revision so metadata consumers can detect the observable V1 behavior change.

### Changes

- chat/convex/publicApi/http.ts — Add an allowlist for schoolYear and usageMode before admissionsEnrollmentsService.readV1Rollups runs; unsupported keys now return unknown_query_parameter.

- chat/convex/publicApi/http.test.ts — Cover the reported year, selectedYear, sy, and yr misspellings, plus valid schoolYear and both supported usageMode values.

- chat/lib/public-api/compatibility/admissions.ts — Bump only admissionsEnrollmentsV1 from adapter revision v1 to v2 in both the adapter registry and the compatibility matrix.

- chat/lib/public-api/compatibility/registry.test.ts and chat/lib/public-api/__tests__/openapi.test.ts — Verify the resolved registry and published OpenAPI compatibility metadata expose the v2 adapter revision.

### Design Decisions

The allowlist runs inside the existing authenticated route handler, so authorization and the V1 response envelope remain unchanged while invalid input is rejected before any enrollment projection read. The compatibility-adapter revision is metadata distinct from public API V1/V2 route versions; only the changed legacy enrollment adapter moves to revision v2.

## Business value

API consumers now receive an explicit client error for misspelled school-year parameters rather than potentially using enrollment data from the wrong year, and compatibility-monitoring tools can detect the change.

## Estimated manual effort

45 minutes

## Test Plan

- [x] pnpm --dir chat exec vitest run convex/publicApi/http.test.ts lib/public-api/compatibility/registry.test.ts lib/public-api/__tests__/openapi.test.ts — 39 tests passed.

- [x] pnpm exec biome check chat/lib/public-api/compatibility/admissions.ts chat/lib/public-api/compatibility/registry.test.ts chat/lib/public-api/__tests__/openapi.test.ts

- [x] pnpm --dir chat typecheck

#1082 — feat(release): stage August 21 application updates @benji-bizzell  no labels

## Summary

- Combine the approved Agent attachment, Portfolio, and Operations improvements from #1054, #1074, #1075, #1076, #1079, #1080, and #1081

- Reconcile the Security Card changes with the assembled Portfolio contracts and the latest main head

- Provide one exact combined tree for hosted CI and release review

## Why

The seven changes overlap across shared Portfolio contracts, Convex writes, public API, and MCP surfaces. Main requires strict up-to-date checks and squash merges, so merging each PR directly would repeatedly invalidate the remaining heads. This integration PR validates the complete release candidate once without bypassing the original PR reviews.

## Business Value

The release can be reviewed and promoted as one coherent, tested application update while retaining the individual PR audit trail.

## Test plan

- [x] Original PR exact-head CI and Mercy gates completed

- [x] 136 focused Chat, Convex, and Public API tests passed on the combined head

- [x] 15 Rhodes MCP site-tool tests passed on the combined head

- [x] Chat and Rhodes-worker typechecks passed

- [x] Architecture boundaries, Convex paths, Biome, and diff checks passed

- [x] Hosted full-repository CI on this integration PR

- [ ] Exact-head Mercy review after hosted CI

#1500 — fix(collections-weekly): bound Google API reads @sanketghia  approved

## Summary

- Bound gspread requests to 10s connect / 30s read timeouts.

- Retry request timeout failures through the existing retry loop.

- Bound the authorized Google Drive transport to 30s.

- Increase the weekly forecast Lambda timeout to 900s.

## Scope

This PR addresses the original Google Sheets 503/hanging-read failure only. It does not change Google quota coordination, schedules, service accounts, tracker behavior, or production data loading semantics.

## Validation

- 47/47 weekly pipeline tests passed.

- Ruff check and formatting passed.

- 491 CDK real-pipeline-config tests passed.

- CDK TypeScript build passed.

- Local read-only dry run parsed 294 rows successfully without S3 or Redshift writes.

## Deployment

Not deployed by this PR workflow; normal CI/CD gates apply.

#3628 — feat(observability): OBS.1 Coach Claire trace capture (S3, backend-only) @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Delivers OBS.1 — the capture half of Coach Claire trace logging: broad-schema Pydantic trace models, a fire-and-forget S3 write service, and a handle_chat/_call_llm hook that assembles and emits one trace per chat turn. Backend-only, no warehouse dependencies. Gated behind CLAIRE_TRACE_ENABLED (default off) so it ships dark.

Relates to KLAIR-2824. Not closing KLAIR-2824 — it also covers OBS.2 (Redshift loader + Accept/Reject disposition capture), which is explicitly out of scope here and remains open/human-in-loop.

## Why it's needed

wizard_orchestrator.handle_chat calls Anthropic directly and is untraced today: the assembled system prompt, injected context blocks, MCP intra-turn round-trips, token usage, latency, and stop reason are all ephemeral. Without a capture path there's no way to build the query/reporting side (OBS.2) or discover which signals separate good turns from bad.

## Changes

- klair-api/models/claire_trace_models.py (new) — ClaireTracedToolCall, ClaireTraceRound, ClaireTraceCreate, ClaireTraceRecord (adds trace_id/created_at/ttl). to_s3_json() returns the full record with a sane per-field char cap (safety valve, not semantic truncation). to_redshift_row() flattens to scalar columns + rounds/tool_calls/context_blocks SUPER-shaped nested structures + a caller-supplied s3_key — the row shape the OBS.2 loader will consume, pinned and unit-tested even though the loader itself doesn't ship here.

- klair-api/services/claire_trace_service.py (new) — ClaireTraceService.log_trace() mirrors arr_gap_trace_service.py's S3 mechanics (bucket, client init, try/except → log). Writes to klair-uploads/budget-bot/claire-traces/turns/{yyyy-mm-dd}/{trace_id}.json. First line returns immediately when CLAIRE_TRACE_ENABLED is unset/false. The whole write body is wrapped in try/except → logger.warningNone; never raises. Deliberately no reader — OBS.2's job, not the ARR-gap write-only anti-pattern (that gap is scoped, not accidental, here).

- klair-api/budget_bot/board_doc/wizard_orchestrator.py:

- _build_step_context gains an additive context_block_sizes: dict[str, int] | None = None kwarg (its only call site passes it) populated via a new _record_block_size helper — records each named system-prompt block's char count with zero behavior change when None.

- _call_llm times each Anthropic round and appends a ClaireTraceRound (model, stop_reason, input/output tokens, latency, tool_use-block count) to an accumulator threaded through the MCP recursion; each execute_mcp_tool round appends ClaireTracedToolCall entries (source="mcp").

- End of handle_chat: assembles a ClaireTraceCreate from in-scope session/turn data and fire-and-forget emits via asyncio.create_task(asyncio.to_thread(claire_trace_service.log_trace, trace)) — off the critical path, matching the existing summarize_brainlift_background fire-and-forget pattern in this file.

- Everything is gated behind one _trace_enabled = claire_trace_service.is_enabled() check up front — with the flag off, no ClaireTraceCreate/ClaireTraceRound/ClaireTracedToolCall objects are built, context_block_sizes stays None, and zero S3 calls happen.

- The trace assemble-and-schedule block is wrapped in the one new broad except Exception in this file, scoped tightly around just that IO, logged with session-id context, documented inline with why (tracing must never break a chat turn). Every other exception path in the touched region still propagates.

- No change to WizardSession.conversation or any existing return contract.

- klair-api/.env.example — documents CLAIRE_TRACE_ENABLED (default 'false').

## Breaking changes

None. Additive-only: new files, an additive optional kwarg on an internal helper with one call site, and a gated hook that is a no-op when CLAIRE_TRACE_ENABLED is unset. handle_chat's returned StepResponse is unchanged whether tracing is on or off.

## Test plan

Ladder run from klair-api/ with uv run pytest:

uv run pytest tests/test_claire_trace_service.py -q      # 9 passed

uv run pytest tests/test_claire_trace_models.py -q # 8 passed

uv run pytest tests/board_doc/test_claire_trace_hook.py -q # 6 passed

# (scoped total: 23 passed)

uv run pytest tests/board_doc/test_wizard_orchestrator.py \

tests/board_doc/test_chat_tool_calls.py \

tests/board_doc/test_chat_streaming.py \

tests/board_doc/test_chat_tool_only_fallback.py \

tests/board_doc/test_mcp_tools.py -q # 169 passed (no regressions in handle_chat-touched suites)

uv run pytest tests/board_doc -q # 3166 passed, 2 deselected (integration, excluded by default)

Also ran and confirmed clean:

uv run ruff format models/claire_trace_models.py services/claire_trace_service.py budget_bot/board_doc/wizard_orchestrator.py  # 0 reformatted

uv run ruff check models/claire_trace_models.py services/claire_trace_service.py budget_bot/board_doc/wizard_orchestrator.py # all checks passed

uv run pyright models/claire_trace_models.py services/claire_trace_service.py budget_bot/board_doc/wizard_orchestrator.py # 0 errors, 1 pre-existing warning (unrelated line, confirmed present before this change too)

Per the [backend-test-truth](../blob/main/.claude/skills/backend-test-truth/SKILL.md) skill: the default addopts excludes integration/eval/allow_network markers, and conftest.py mocks RedshiftHandler globally — neither matters here since this change has no Redshift/warehouse code path at all. All boto3/S3 access in the new tests is mocked (patch("services.claire_trace_service.boto3")) — no live S3 call is made anywhere in this PR's tests.

Load-bearing invariant, explicitly tested: test_log_trace_raising_is_swallowed_turn_still_succeeds and test_trace_assembly_exception_does_not_break_the_turn patch log_trace (and, separately, ClaireTraceCreate itself) to raise, and assert handle_chat still returns its normal answer — tracing is observability, not a feature, and must never break or block a chat turn.

## Verification artifacts

to_s3_json() samples captured from the hook tests (system prompt truncated for readability here; full ~16KB prompt is written verbatim in the real S3 object, subject only to the 200K-char safety cap):

Single-shot turn (no MCP tool use — 1 round):

{

"session_id": "sample-session",

"user_message": "How does Q2 look for Skyvera?",

"response_text": "Q2 ARR landed at $12.4M, +8% YoY - looking solid.",

"system_prompt": "You are Budget Bot, ... [16076 chars total]",

"context_block_sizes": {

"base_intro": 7372, "document_lifecycle_block": 2284, "dated_evidence_block": 999,

"claim_integrity_block": 1463, "date_awareness_block": 1210, "chat_attachments_block": 0,

"mips_and_goals": 0, "phase_guidance": 1466, "focused_section_block": 411,

"focused_section_findings_block": 0, "full_doc_findings_block": 0,

"active_checks_block": 0, "finding_addressal_directive": 0, "multi_edit_directive": 871

},

"rounds": [

{ "round_index": 0, "model": "claude-opus-4-7", "stop_reason": "end_turn",

"input_tokens": 1450, "output_tokens": 210, "latency_ms": 1.62, "num_tool_use_blocks": 0 }

],

"tool_calls": [],

"total_input_tokens": 1450, "total_output_tokens": 210, "total_latency_ms": 1.62,

"mcp_loop_exit_reason": "no_mcp_tool_uses",

"proposal_tool_use_ids": [], "addressed_finding_ids": [],

"environment": "dev", "trace_id": "sample-trace-single-shot", "ttl": 0

}

MCP-loop turn (2 MCP tool-use rounds + 1 final text round = 3 rounds):

{

"session_id": "sample-session",

"user_message": "What's our ARR breakdown by product?",

"response_text": "ARR is $53.8M, up 12% YoY across products.",

"rounds": [

{ "round_index": 0, "stop_reason": "tool_use", "input_tokens": 900, "output_tokens": 40, "num_tool_use_blocks": 1 },

{ "round_index": 1, "stop_reason": "tool_use", "input_tokens": 1100, "output_tokens": 60, "num_tool_use_blocks": 1 },

{ "round_index": 2, "stop_reason": "end_turn", "input_tokens": 1400, "output_tokens": 180, "num_tool_use_blocks": 0 }

],

"tool_calls": [

{ "tool_name": "query_arr", "tool_input": {"bu": "Skyvera"}, "tool_result": "Total ARR: $53.8M (+12% YoY)", "is_error": false, "execution_order": 0, "source": "mcp" },

{ "tool_name": "query_arr", "tool_input": {"bu": "Skyvera", "detail": "by_product"}, "tool_result": "Total ARR: $53.8M (+12% YoY)", "is_error": false, "execution_order": 1, "source": "mcp" }

],

"total_input_tokens": 3400, "total_output_tokens": 280,

"mcp_loop_exit_reason": "no_mcp_tool_uses",

"trace_id": "sample-trace-mcp-loop", "ttl": 0

}

## Out of scope (OBS.2 — not built here)

- Redshift budget_bot_claire_traces table DDL + the S3→COPY loader (push_bulk_to_redshift) — warehouse creds + SUPER-vs-child-table schema decisions.

- Accept/Reject disposition capture on the tool-resolution endpoint (board_doc_router.py) + a ClaireTraceOutcome writer.

- CSV export, trace-viewer UI, evals/scoring, prompt-versioning, dashboards.

- Langfuse / Docker / OTel / DynamoDB.

- Any change to WizardSession.conversation or existing return contracts.

## Linkage note

Per the task spec, KLAIR-2824 should get a Drone spec: obs-1-claire-trace-capture.md attachment pointing at the spec on main. I don't have Linear write access in this environment (no MCP tool exposes attachments/comments), so I could not add it myself — flagging so a human/the dispatching harness can. Separately, klair-api/budget_bot/board_doc/BACKLOG.md already links the OBS.1 spec at trilogy-drones/tasks/klair/obs-1-claire-trace-capture.md (not this repo) — per existing repo precedent (PR #2908), drone task-spec files belong in trilogy-drones, not the product repo, so no spec file was added here.

## Review Round Completeness

- outcome: complete

- round: 1

- dispatched: 5

- reported: 5

- missing: (none)

- cause: complete

- head: e133f8bd872a20189fef33d3dfdaa4cd2176fc19

- run: fanout-3628-2026-08-21T13-40-50-080Z

- review: 4993823363

<!-- drones:round-completeness head=e133f8bd872a20189fef33d3dfdaa4cd2176fc19 run=fanout-3628-2026-08-21T13-40-50-080Z -->

GitHub review #4993823363 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).

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d4017509-b207-40ba-b0d3-d6baf11f7b34?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-d4017509-b207-40ba-b0d3-d6baf11f7b34&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>

#3635 — fix(spacex-valuation): reconcile distribution sales and share display @sanketghia  approved

## Summary

- Reconcile realized SpaceX share sales FIFO across the Aug-5 fund lots.

- Keep gross source shares, net LP shares, ICC, and waterfall capital credit distinct.

- Fix the sold/unsold reconciliation and improve the waterfall/realized-sales presentation.

- Add regression coverage for the allocation, reconciliation, dates, and compact table labels.

## Validation

- Full frontend suite: 634 test files passed; 6,547 passed, 16 skipped.

- SpaceX suite: 208 tests passed.

- ESLint, Prettier, TypeScript, production build, and diff checks passed.

## Notes

- Exact waterfall percentage synchronization and implied waterfall capital-credit inputs remain intentionally deferred as a separate follow-up.

- No Google Sheet or Google Chat changes were made.

The Builder Desk  —  Engineer Spotlight
🏆 Engineer Spotlight

MARCUSDAIY BREAKS THE LAWS OF PHYSICS, TEAM POSTS 22 PRs IN 24 HOURS ACROSS FIVE REPOS

One man. Seventeen pull requests. Zero apologies.

Twenty-two pull requests. Five active repositories. One calendar day. The Builder Team has once again done what the doubters said was mathematically impossible, and the Numbers Desk is here to confirm: the doubters were wrong, they were always wrong, and they should feel bad. Aerie led the charge with eleven PRs, trilogy-drones contributed six, Klair weighed in with three, and both Surtr and Sindri made their presence known with one apiece. And somewhere in the middle of all that, a brand-new repo — stakeholder-asks-workflow — was born into this world. The velocity does not rest. The velocity does not sleep.

@marcusdAIy is not an engineer. He is a geological event. Seventeen pull requests in twenty-four hours across Aerie, trilogy-drones, Klair, and Sindri — a cross-repo rampage that would make lesser developers lie down on the floor and stare at the ceiling. @sanketghia dropped two precision strikes on the board, the kind of focused output that reminds you not everyone needs to set seventeen fires to prove they're warm. @benji-bizzell matched that with two of his own, including a Sindri platform fix in PR #158 that exposed canonical agent and skill versions — quiet work, load-bearing work, the kind of work that holds the cathedral up. @YibinLongTrilogy punched in exactly one PR and, frankly, we respect the economy of it.

Now. About @marcusdAIy. The man filed PR #1077 to preserve the AERIE-1017 boundary in a DSS skill when-clause, then immediately turned around and filed PR #1078 to anchor v1 compatibility guidance and name — NAME — the opening-date resolver, as if resolvers are children that deserve christenings. He extracted post-PR artifact recovery in drone PR #228, then registered the entire Surtr harness admission in PR #225, which is described as "fire-capable, no shared-team route," a phrase that should be on a coat of arms. When reached for comment, @marcusdAIy reportedly said, "I don't write pull requests, I write conclusions. The diffs are just formalities." His Slack status, sources confirm, simply read "busy." Our reviewer on the Numbers Desk attempted to read through his full diff history from the past 24 hours and is currently on a medical leave of absence.

The Overflow Desk cannot be ignored. PR #1083 clarified score and governance timestamp genesis in Aerie — documentation work that sounds boring until you realize no one could agree on what "genesis" meant and now they can. PR #3629 in Klair fixed the headcount reader to pull from the standardized HC Budget Input tab, which means someone was reading from the wrong tab before, and we will not name names. Draft-spec PR #227 in trilogy-drones is an unattended spec-authoring draft — autonomous, self-directed, slightly ominous — while PR #223 ensures those draft-spec merges no longer close source Linear tickets, which was apparently a problem, and is now not a problem.

Morale is at an all-time high. The Numbers Desk has confirmed this through rigorous observation of the commit log, the new repo birth announcement, and the fact that @marcusdAIy is still, as of press time, filing pull requests.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#158 — fix(platform): expose canonical agent and skill versions @benji-bizzell  approved

## Summary

- Expose canonical published version numbers on public Agent and Skill list/detail responses

- Preserve immutable ?version=N reads and the shared V0 convention for never-published drafts

- Align strict response schemas, generated OpenAPI, feature contracts, and regression coverage

## Why

Aerie Forge currently renders missing versions because Sindri omits its canonical published pointer from Agent and Skill list and bare-detail DTOs. Consumers should read the canonical number directly instead of inferring it from history or issuing N+1 version-list requests.

## Business Value

Forge can show accurate Agent and Skill versions from one bounded list/detail read while Sindri retains ownership of publication semantics and keeps internal identifiers and sensitive configuration private.

## Test plan

- [x] pnpm test — 886 tests passing

- [x] pnpm typecheck

- [x] Focused Biome checks

- [x] OpenAPI regeneration/freshness test

- [x] git diff --check

#225 — feat(registry): add Surtr harness admission — fire-capable, no shared-team route @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

- Registers a surtr entry in config/drone-repos.json: exact https://github.com/AI-Builder-Team/Surtr.git clone URL, main base branch, tasks/surtr tasksDir, capability: "fire", and a dated operator-confirmed ownerConsent string.

- The entry carries no linearTeamKeys/linearProjectKeys — a bare AI-* harness ticket can never implicitly resolve to Surtr through the shared Builder Team team-key map. Only an explicit --repo/target_repo signal, or a spec placed under tasks/surtr/, can select it.

- Adds tasks/surtr/README.md documenting the fail-closed per-proof validation rule for any future Surtr proof spec, and a docs/decisions/ entry recording the admission call.

- Adds focused registry/resolution/doctor tests proving explicit Surtr resolution, refusal of a shared-AI-team claim, malformed/unregistered-target refusal, and unchanged behavior for existing repos.

## Why It's Needed

AI-525 originally combined this registry/routing work with a Surtr product PR in one ticket. Surtr spans distinct Node, Python, CDK, Lambda, and pipeline surfaces, and this harness has no proven generic changed-path router — so a single CI-equivalent command can't safely gate every future proof, and no shared AI Linear-team mapping may implicitly resolve bare harness tickets to Surtr. This ticket (AI-538) splits out the harness-admission half so a later, owner-selected, bounded Surtr product change (AI-525) gets its own task-specific changed-path review, while the registry itself is safe to land now.

## Changes

- config/drone-repos.json: new surtr entry (fire-capable, empty team-key arrays, dated consent note explaining the harness-admission-only scope).

- tasks/surtr/README.md: new file — states the per-proof validation rule (each future proof spec names its own changed paths + CI-equivalent scoped command; unknown/cross-surface/secret-dependent diffs park rather than guess), and is explicit this ticket introduces no generic router and claims no single command validates the whole repo.

- docs/decisions/20260821T033108.679Z-ai-538-*.md: new append-only decision entry recording the registry-admission call and rationale.

- Tests:

- src/drone-repos.test.ts: the committed surtr entry has the exact URL/base/tasksDir/capability, empty team-key arrays, and never contests trilogy-drones' existing "AI" mapping.

- src/resolve-target-repo.test.ts: against the *real committed* config/drone-repos.json (via loadDroneRepoRegistry()), an explicit target_repo/spec-path resolves surtr; a bare AI-* ticket with no explicit target still resolves to trilogy-drones (never surtr); a malformed/unregistered explicit target still refuses (repo-unregistered); Klair/Aerie resolution is unchanged.

- src/doctor.test.ts: runDoctorForTask OKs an explicit-target Surtr spec, never resolves a bare AI ticket to Surtr, and FAILs on a malformed/unregistered explicit target.

No dispatch/registry/resolution code was changed — only data (the registry file), docs, and tests. tasks/surtr/ has no product task spec; AI-525 (the target-repo proof) stays BLOCKED until an owner selects one real bounded Surtr change.

## Breaking Changes

None.

## Test Plan

- pnpm typecheck → clean (tsc --noEmit, 0 errors).

- npx vitest run src/drone-repos.test.ts src/resolve-target-repo.test.ts src/doctor.test.ts3 passed (3 files), 114 passed (114 tests).

- pnpm test (full vitest + Python suite) → vitest: Test Files 148 passed (148), Tests 4770 passed (4770); Python (scripts/test_*.py via scripts/run-python-tests.mjs): Ran 716 tests ... OK (skipped=19).

- node --import tsx scripts/render-decisions-log.mjs → renders the new AI-538 entry with no parse warnings.

## Verification Artifact

Explicit Surtr resolution (real committed registry, resolveTargetRepo):

specTargetRepo: https://github.com/AI-Builder-Team/Surtr.git, linearId: AI-9001

→ ok: true, signal: "spec-target-repo", entry.id: "surtr", entry.capability: "fire"

Shared-AI-team routing refusal (same registry, no explicit target):

linearId: AI-9002, specPath: tasks/experiments/orphan.md (unmapped)

→ ok: true, signal: "linear-team", entry.id: "trilogy-drones" // NOT surtr

drones doctor --task shape (via runDoctorForTask) confirms the same two outcomes end-to-end: an explicit-target Surtr spec prints [OK] Target repo resolved: https://github.com/AI-Builder-Team/Surtr.git [spec-target-repo]; a bare-AI-ticket spec with no explicit target prints a resolved line containing trilogy-drones, never Surtr; and a spec whose explicit target_repo is an unregistered URL prints [FAIL] ...: target repo could not be resolved (repo-unregistered).

## Impact Estimate

Business value: Opens a consented multi-surface repository to a future measured proof without implicitly routing unsafe or unrelated work to Surtr.

Pre-AI estimate: 2 points — a human would trace registry and dispatch resolution, document conservative test-route boundaries, add fail-closed regressions, and review the new repository admission surface.

Closes AI-538

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-6f3155cd-4faf-4a42-a966-e21543af4d8e?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-6f3155cd-4faf-4a42-a966-e21543af4d8e&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-538

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-6f3155cd-4faf-4a42-a966-e21543af4d8e?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-6f3155cd-4faf-4a42-a966-e21543af4d8e&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>

#228 — AI-520: extract post-PR artifact-recovery + browser-verify phase from runDrone @marcusdAIy  no labels

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Extracts the post-Agent.create span of runDrone — everything between the implementer's cloud turn resolving and the reviewer auto-fire — into a new, focused src/runner-post-pr.ts module, following AI-519's runner-preflight.ts precedent. No behavior change.

## Why It's Needed

runDrone (src/runner.ts) is the harness's highest-risk orchestration function (AGENTS.md's File-size guidance calls it out by name). AI-518 pinned its observable event/receipt contract; AI-519 extracted the pre-Agent.create preflight. This ticket (AI-520) continues that sequence by pulling out the artifact-recovery + browser-verify span, leaving AI-521's reviewer/Mercy/terminal-handoff boundary untouched for a later ticket.

## Changes

- New src/runner-post-pr.ts — owns, in order:

- the AI-75 bounded PR-artifact-recovery nudge (recoverImplementerMissingPr) and its terminal pr_opened/run_failed event (including the AI-180 pr-artifact-lost park, which must never double-persist)

- the AI-326/AI-470 PR-title-attribution wiring (runPrTitleAttributionWiring, moved here — its only call site)

- the AI-68 harness-artifact-leak guard (warnOnHarnessArtifactLeak, moved here — its only call site)

- the parent-side Linear post

- the opt-in AI-106 browser-verify phase

- src/runner.tsrunDrone now delegates the whole span to runPostPrArtifactAndBrowserPhase({ input, agent, run, result, record, recordPath, counters, terminalStatusCode, terminalStatusMessage, linearId, agentPrompt, startedAt }) and continues with the returned { record, recordPath, linear } continuation state before the (untouched) reviewer auto-fire. Straight, verbatim move — no reworded logs, no reordering, no dropped branches. Unused imports (isBrowserVerifyEnabled, maybeRunBrowserVerifyPhase, execErrorDetail, execFileAsync, sanitizeWithLinearKey, applyPrTitleAttributionGuarded, renderPrTitleAttributionLogLines, stampPrTitleAttribution, recoverImplementerMissingPr, renderArtifactRecoveryLine, findHarnessArtifactPaths) removed.

- src/runner.test.ts — updated the two relocated functions' import to ./runner-post-pr.js; test bodies unchanged.

- ARCHITECTURE.md — documents the new module in the repo map (keeps the arch-drift gate green).

- src/runner-lifecycle.test.ts — adds three new AI-518 scenarios ("browser disabled", "browser PASS", "browser degraded") that didn't exist before this ticket; the task's acceptance criteria calls these out explicitly.

- src/runner-post-pr.test.ts (new) — focused, cloud-free unit tests for runPostPrArtifactAndBrowserPhase directly, mocking recoverImplementerMissingPr and maybeRunBrowserVerifyPhase.

## Breaking Changes

None.

## Test Plan

- pnpm typecheck — passes.

- pnpm test (vitest + Python unittest) — full suite green.

- New focused tests added and run in isolation (see Verification Artifact).

## Verification Artifact

Typecheck:

$ pnpm typecheck

> tsc --noEmit

(clean exit)

AI-518 lifecycle-compatibility gate — all pre-existing scenarios pass unchanged, plus 3 new browser-verify scenarios:

$ npx vitest run src/runner-lifecycle.test.ts

✓ src/runner-lifecycle.test.ts (24 tests) 103ms

Test Files 1 passed (1)

Tests 24 passed (24)

(21 pre-existing scenarios — success/Mercy, dep-blocked, scoped-preflight, Surtr guards x2, artifact recovery [recovered], conflicting-PR/Mercy-parked, errored addresser round, addresser-throws, review-round-cap, startup-error, artifact recovery [unrecoverable/pr-artifact-lost] — plus 3 new: browser disabled, browser PASS, browser DEGRADED.)

New focused unit tests on the extracted module — every disposition/outcome:

$ npx vitest run src/runner-post-pr.test.ts

✓ runPostPrArtifactAndBrowserPhase — artifact recovery + terminal event

✓ not_needed: emits pr_opened once, never re-persists, and does not warn

✓ recovered: persists the repaired record exactly once before pr_opened, using the recovered counters on the event

✓ pr-artifact-lost: emits run_failed(error) with the PR_ARTIFACT_LOST code, never a pr_opened event, and does not double-persist

✓ non-finished implementer status: emits run_failed with the cloud terminal status/detail and never calls the recovery ladder

✓ runPostPrArtifactAndBrowserPhase — AI-106 browser-verify phase

✓ disabled (no flag, no task recipe): never calls maybeRunBrowserVerifyPhase

✓ enabled but no PR URL on the record: skips without calling maybeRunBrowserVerifyPhase

✓ PASS: calls maybeRunBrowserVerifyPhase with the resolved PR number/owner-repo and never touches the implementer's own exit path

✓ DEGRADED: still returns normally (never throws) and leaves the record/recordPath untouched

Test Files 1 passed (1)

Tests 8 passed (8)

Full suite:

$ npx vitest run

Test Files 158 passed (158)

Tests 5164 passed (5164)

$ node --import tsx scripts/run-python-tests.mjs

(all Python unittest suites pass)

Erosion (scripts/erosion.mjs), before vs. after:

Before (on main, pre-AI-520):

EROSION          : 0.790

mass CC sloc location

12313 293 1766 src/runner.ts:2081 runDrone

After (this branch):

EROSION          : 0.788

mass CC sloc location

10524 265 1577 src/runner.ts:1983 runDrone

runDrone's own complexity mass drops ~14.5% (12313 → 10524; CC 293 → 265, SLOC 1766 → 1577) through a real named seam (runner-post-pr.ts), not formatting or test weakening — src/dispatcher.ts's runDispatchLocked becomes the single largest callable in the repo instead.

## Impact Estimate

Business value: Reduces the highest-risk orchestration function around the PR-artifact boundary while preserving the exact recovery and verification evidence that prevents lost PRs, misleading success states, and unauditable browser checks — and closes an AI-518 coverage gap (no scenario previously exercised the browser-verify phase at all).

Pre-AI estimate: 2 points.

Closes AI-520.

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-23ba5ef7-eda4-43d1-825b-af3a2cd1f733?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-23ba5ef7-eda4-43d1-825b-af3a2cd1f733&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>

#1077 — fix(public-api): preserve AERIE-1017 boundary in DSS skill when-clause @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

GET /api/dss/skill (and the /dss front) previously told callers to use Aerie for questions about "operating and opening campuses." The served dictionary already disclaims that opening dates or lifecycle stage establish canonical open-campus membership (unresolved pending AERIE-1017), so a cold reader routed by the skill landed on a dictionary that contradicts the routing promise. This PR rewrites the skill's when sentence to route the supported question families while explicitly naming the unresolved AERIE-1017 boundary, and names AERIE-1017 in the portfolio dictionary's site lifecycle text so the skill and dictionary cite the same unresolved dependency.

## Why it's needed

Prevents skill-based routing from implicitly promising an open-campus-membership answer that the dictionary explicitly disclaims under AERIE-1017.

## Changes

- chat/lib/public-api/dss.ts: Rewrote the when sentence used by both /dss and /dss/skill. It now routes operating-campus, site-lifecycle/buildout, admissions/enrollment, identity, and financial/workflow questions, and states that canonical open-campus membership remains unresolved pending AERIE-1017 and that opening dates do not by themselves establish it. No other front fields (what, why, how, documents, feedback) changed.

- chat/lib/public-api/v2/domains/portfolio.ts: Named AERIE-1017 in the portfolio.site object's lifecycle dictionary text, alongside the existing (unchanged) statement that lifecycleStage, projectedOpenDate, and actualOpenDate are separate read-only projections that don't override status. The existing opening-date field traps ("This date does not establish current open-campus membership.") are untouched.

- chat/convex/publicApi/dss/http.test.ts: Extended the existing front/skill/dictionary HTTP test to assert the served skill's when text no longer routes by "operating and opening campuses," names AERIE-1017 and the unresolved-membership boundary, and that the served dictionary still names AERIE-1017 and the "does not establish current open-campus membership" limitation — pinning cross-document agreement instead of relying on the hash-only assertion.

- chat/lib/public-api/v2/domains/portfolio.test.ts: Added an assertion that the portfolio site's dictionary lifecycle text names AERIE-1017.

## Breaking changes

None. This is a documentation/enablement-only change: no route, schema, capability, or data behavior changed. Field semantics, opening-date projections, and the dictionary's AERIE-1017 limitation remain exactly as before (only now also cited from the skill's when clause and, for parity, from the dictionary's site lifecycle text).

## Test plan

Ran from chat/:

- pnpm vitest run lib/public-api/dss.ts lib/public-api/v2/domains/portfolio.test.ts convex/publicApi/dss/http.test.ts lib/public-api/agent-context/skill-package.test.ts → 3 test files, 6 tests passed.

- pnpm typecheck → passed (tsc --noEmit for the app + tsc -p convex/tsconfig.json --noEmit).

- pnpm biome check lib/public-api/dss.ts lib/public-api/v2/domains/portfolio.ts lib/public-api/v2/domains/portfolio.test.ts convex/publicApi/dss/http.test.ts → "Checked 4 files. No fixes applied."

- lefthook pre-commit hooks (convex-paths, biome, typecheck-chat) all passed on commit.

## Verification artifact

Test run output (scoped DSS/portfolio/skill tests):

✓ lib/public-api/v2/domains/portfolio.test.ts (3 tests) 81ms

✓ lib/public-api/agent-context/skill-package.test.ts (1 test) 2ms

✓ convex/publicApi/dss/http.test.ts (2 tests) 1571ms

Test Files 3 passed (3)

Tests 6 passed (6)

## Review Round Completeness

- outcome: complete

- round: 1

- dispatched: 5

- reported: 5

- missing: (none)

- cause: complete

- head: 382665d33362dfeea3509d993099af90f835f19a

- run: fanout-1077-2026-08-22T00-55-29-735Z

- review: 4998443009

<!-- drones:round-completeness head=382665d33362dfeea3509d993099af90f835f19a run=fanout-1077-2026-08-22T00-55-29-735Z -->

GitHub review #4998443009 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).

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-bcc1b675-c960-463a-934d-bf3a3d50aa68?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-bcc1b675-c960-463a-934d-bf3a3d50aa68&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>

#1078 — fix(public-api): anchor v1 compatibility guidance and name the opening-date resolver @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

Fixes two enablement/dictionary doc-vs-wire gaps in the agent-context catalogs under chat/lib/public-api/v2/domains/:

1. Directory catalog guidance referenced bare /v1/... compatibility paths without ever stating the base they resolve against. The only base actually served to a keyed caller in the discovery manifest (manifest.resources.apiBase) already ends in /v2, so appending a bare /v1/... fragment to it produces an unregistered path that 404s. Guidance now spells out the full method + path for each v1 reference and explicitly states these are keyed compatibility routes at the API server origin, not appended after the /v2 apiBase.

2. There was no served sentence resolving "when does this campus open" to a concrete field path. The Portfolio catalog's portfolio.find-site workflow now names the resolver: the site detail's openingDates (PortfolioSiteOpeningDates: projectedOpenDate/actualOpenDate), paired with the status=open membership rule and a caveat that a null date is not evidence of a cancelled opening.

## Why it's needed

A cold reader following the enablement guidance for v1 compatibility routes had no way to construct a correct URL from what's served to them (only apiBase, ending in /v2, is documented) and would 404. Separately, a reader asking the extremely common "when does this campus open" question had no served sentence pointing at the actual field(s) that answer it, despite those fields (projectedOpenDate/actualOpenDate) already existing in the dictionary.

## Changes

- chat/lib/public-api/v2/domains/directory.ts: every v1 ontology compatibility reference (GET /v1/schools, GET /v1/ontology/resolve/{id}, GET /v1/relationships) now states it is a keyed route at the API server origin, not the /v2 apiBase, and that appending it after apiBase 404s. The existing "no approved sunset" compatibility language is preserved verbatim.

- chat/lib/public-api/v2/domains/portfolio.ts: the portfolio.find-site workflow's useWhen/interpretation/semanticRefs now name the opening-date resolver (PortfolioSiteOpeningDates.projectedOpenDate/actualOpenDate), the status=open rule, and the null-date caveat.

- chat/lib/public-api/v2/domains/directory.test.ts and chat/lib/public-api/v2/domains/portfolio.test.ts: extended to pin both fixes.

## Breaking changes

None. This is a docs/contract-only change — no route, handler, schema, or auth behavior was touched. Every route named in the updated guidance was verified against chat/convex/publicApi/http.ts and chat/lib/public-api/openapi.ts before being kept.

## Test plan

- npx vitest run lib/public-api/v2/domains/directory.test.ts lib/public-api/v2/domains/portfolio.test.ts — 7/7 passed.

- npx vitest run lib/public-api — 103/104 passed; the 1 pre-existing failure (lib/public-api/compatibility/adapter.test.ts) reproduces identically on main before this change (verified via git stash) and is unrelated to the touched files.

- npx tsc --noEmit (root tsconfig.json) — clean.

- npx tsc -p convex/tsconfig.json --noEmit — clean.

- npx biome check lib/public-api/v2/domains/directory.ts lib/public-api/v2/domains/directory.test.ts lib/public-api/v2/domains/portfolio.ts lib/public-api/v2/domains/portfolio.test.ts — clean, no fixes applied.

- Pre-commit hooks (biome, typecheck-chat) passed on commit.

## Verification artifact

✓ lib/public-api/v2/domains/directory.test.ts (3 tests)

✓ lib/public-api/v2/domains/portfolio.test.ts (4 tests)

Test Files 2 passed (2)

Tests 7 passed (7)

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-f1706715-1fba-4fb1-9dad-b3b0b473ceb1?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-f1706715-1fba-4fb1-9dad-b3b0b473ceb1&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>

#3629 — fix(board-doc): read headcount from the standardized HC Budget Input tab @marcusdAIy  approved

<!-- CURSOR_AGENT_PR_BODY_BEGIN -->

## Summary

- Replaces the retired HC Slide parser with one that reads HC Budget Input, the standardized per-person roster tab that feeds it — header detection anchors on the 11-column label set wherever it appears, not a fixed row/column offset.

- Since HC Budget Input is one row per human (not a role/function summary), the parser aggregates internally to a Department/Class rollup (headcount count + normalized total quarterly compensation), normalizing HOUR/MONTH/WEEK salary_unit values onto a common quarterly basis before summing.

- get_headcount_plan_table drops its cf_gate="bu_only" restriction — CFs now return real headcount data instead of None.

## Why it's needed

HC Slide is a presentation-formatted tab whose layout drifts BU-to-BU and quarter-to-quarter. The header detector was built against Skyvera Q2'26 and silently failed on Skyvera Q3'26 (Jun-5 incident) — the tab was present and read fine, but the detector couldn't match the header row, so headcount_plan came back None.

HC Budget Input is the raw input that feeds HC Slide, and it's genuinely standardized — confirmed by opening and reading all 21 production workbooks registered in Klair-BudgetSheetUrls on 2026-08-10 (every BU + every CF ships the tab, with an identical 11-column header at row index 5). This card repoints ingestion at that tab instead.

## Changes

klair-api/services/budget_sheets_service.py

- Retired _find_headcount_plan_table's old body, _looks_like_hc_slide_header_row, _hc_slide_blank_break, and _HC_TOTAL_LOOKAHEAD (slide-only helpers; no fallback kept — the old parser is the failure mode this card removes).

- New _find_hc_budget_input_header locates the header by a contiguous 11-label slice match (stripped + lowercased) anywhere in the sheet — tolerates the observed chrome variance (blank row 0, GFI Group's stray rr, Totogi's stale title in a middle column, a floating Index row, the Input needed for ... instruction band).

- New _hc_budget_input_parse_number (thin wrapper over the shared parse_sheet_number_strict leaf module, same pattern as the RR Summary / AR Aging siblings) normalizes salary cells across every observed format (bare decimal, $-prefixed, space-padded, comma-separated).

- New _hc_budget_input_normalize_quarterly_comp converts HOUR/WEEK/MONTH salaries onto a common quarterly basis (13 weeks / 3 months). A blank weekly_limit defaults to 40 hours (stated + tested). An unrecognized unit excludes that person from the compensation sum but still counts toward headcount (logged at WARNING).

- _find_headcount_plan_table now parses the per-person roster internally and returns a [Department, Class, Headcount, Total Quarterly Compensation] rollup. Body scan runs from the header to a real end-of-block signal (first row with a blank Full Name) rather than a row cap — rosters run 96-754 rows, well past the 80-row cap used by the slide-style parsers.

- get_headcount_plan_table / _get_headcount_plan_table_with_outcome: worksheet_name + not_found_label move to "HC Budget Input"; cf_gate="bu_only" is dropped.

- Comment-only cleanup in the neighboring Vendor Pivots parser section (it referenced the now-retired _looks_like_hc_slide_header_row / _hc_slide_blank_break as comparison points).

Kept unchanged (per scope): DataSourceKey.HEADCOUNT_PLAN, _fetch_headcount_plan, PlanFinancials.headcount_plan, and the _FETCH_ONLY_ALLOWLIST exemption — the canonical wiring was already correct; only the sheet source moved.

Doc/comment accuracy (no behavior change): updated stale HC Slide / "by role/function" references in PlanFinancials.headcount_plan's docstring, has_headcount_plan's docstring, the Claire-facing data_source_descriptions entry in wizard_orchestrator.py, and BACKLOG.md's C1.11b row (now DONE). Added a note in models.py next to BU_ONLY_REVIEW_TAB_SOURCES flagging that HEADCOUNT_PLAN's membership there is now stale relative to the sheets-layer gate removal — it's currently inert (no review check declares required_data=(HEADCOUNT_PLAN,) yet; that's separate, not-yet-built C-series work) but should be removed from that frozenset when the first HC-efficiency check lands, or that check will incorrectly report cf_applicable=False for CFs.

## Breaking changes

Yes, one deliberate behavior change, called out per the card's instructions: get_headcount_plan_table used to be cf_gate="bu_only" — CFs returned None without ever calling Sheets, because HC Slide was BU-only. HC Budget Input is present in CF workbooks too, so that gate is now wrong and has been dropped. CFs now reach Sheets and return real headcount data where they previously always got None. This is the desired outcome of the card, not an accidental regression, but it is a real, observable change for any CF-facing consumer of headcount_plan / has_headcount_plan.

The returned shape also changes for everyone (BU and CF): the old HC Slide parser returned per-role/function rows; the new parser returns a Department/Class rollup (headcount + normalized comp). HC Budget Input is a person-level roster, not a role/function summary, so the consumer contract couldn't stay the same shape without an aggregation step — no consumer reads headcount_plan beyond a Claire narrative anchor today (HC-efficiency review checks are separate, not-yet-built work), so nothing downstream currently depends on the old row shape.

Not a privacy/redaction change: the roster tab carries names, individual pay rates, payment platform, and location. This was explicitly raised and cleared by Marcus on 2026-08-10 — Budget Bot access is already gated by user and by BU/CF, and its users already have access to this class of data. The Department/Class aggregation above is a *functional* requirement (it's the shape the future HC-efficiency checks need), not a PII-stripping control, and no redaction/masking machinery was added.

## Relationship to KLAIR-2848

KLAIR-2848 made a present-but-unparseable tab surface as UNPARSEABLE instead of being silently classified as a benign absent tab — the Jun-5 Skyvera incident this card fixes was 2848's motivating example. Since 2848 has already landed, its UNPARSEABLE WARNING will simply stop firing for HEADCOUNT_PLAN once this ships (the source it was warning about is retired). Neither card blocks the other.

## Test plan

Test ladder (all commands run from klair-api/):

uv run ruff format services/budget_sheets_service.py tests/board_doc/test_headcount_plan.py tests/board_doc/test_public_getter_routing.py budget_bot/board_doc/models.py budget_bot/board_doc/canonical_plan.py budget_bot/board_doc/wizard_orchestrator.py

# 6 files already formatted (no reformatting)

uv run ruff check services/budget_sheets_service.py tests/board_doc/test_headcount_plan.py tests/board_doc/test_public_getter_routing.py budget_bot/board_doc/models.py budget_bot/board_doc/canonical_plan.py budget_bot/board_doc/wizard_orchestrator.py

# All checks passed!

uv run pyright budget_bot/board_doc/canonical_plan.py budget_bot/board_doc/models.py budget_bot/board_doc/wizard_orchestrator.py services/budget_sheets_service.py

# 0 errors, 3 warnings (all 3 pre-existing / unrelated to this diff)

uv run pytest tests/board_doc/test_headcount_plan.py -q --timeout=120

# 38 passed

uv run pytest tests/board_doc/test_public_getter_routing.py -q --timeout=120

# 28 passed

uv run pytest tests/board_doc/test_canonical_plan.py tests/board_doc/test_data_orchestrator.py tests/board_doc/test_review_checks.py -q --timeout=120

# 227 passed

uv run pytest tests/board_doc -q --timeout=120

# 3176 passed, 2 deselected (network-marker-gated, unrelated)

Rewrote tests/board_doc/test_headcount_plan.py against realistic HC Budget Input fixtures (no live-sheet reads):

- Named Jun-5 Skyvera Q3'26 regression (test_skyvera_q3_26_shaped_fixture_parses_successfully_jun5_regression): the exact shape that broke the old detector now parses successfully.

- Three separate chrome-variant fixtures (not one parameterized guess): blank row 0 (Skyvera), GFI Group's stray rr, Totogi's stale title in a middle column — plus a bonus column-shift fixture.

- Salary normalization parametrized across every observed format (bare decimal / $-prefixed / space-padded / comma-separated).

- salary_unit normalization across HOUR/MONTH/WEEK, including test_mixed_unit_roster_aggregates_to_correct_total — explicitly checks the total against a naive (wrong) raw sum to prove normalization is actually happening, not just present in code.

- Blank weekly_limit default (40 hours), both as a direct unit test and flowed through the full parse.

- CF now returns data, both via get_headcount_plan_table(BusinessUnit.CENTRAL_FINANCE, ...) and via the FetchOutcome-returning getter (asserts OK, not ABSENT).

- Trailing filler exclusion: a fixture with a filler row carrying a deliberately corrupting decoy salary value proves it doesn't leak into the aggregate.

- Updated tests/board_doc/test_public_getter_routing.py's TestCfGateRouting parametrize lists: removed get_headcount_plan_table from the "wrong-side-of-gate short-circuits" case (no gate exists anymore) and added it to "right-side-of-gate reaches sheet fetch" for a CF BU, pinning the new no-gate contract.

I did not exercise this against a live Google Sheet — .cursor/hc_budget_input_probe.py / .cursor/hc_budget_input_detail.py need SAML + Google service-account credentials not available in this environment. The 21-workbook schema contract in the card is what the fixtures are built against.

Closes KLAIR-2846

## Verification Artifact

Latest address verification (from klair-api/):

- uv run pytest tests/board_doc -q --timeout=120 — 3199 passed.

- uv run ruff format <changed-files> and uv run ruff check <changed-files> — passed.

- uv run pyright <changed-files> — 0 errors; 3 pre-existing warnings.

The task's live Google Sheets probe was not run because SAML and Google

service-account credentials are unavailable in the execution environment.

## Impact Estimate

Business value: Delivers the explicitly scoped **Repoint headcount ingestion

at the standardized HC Budget Input tab** with a testable, reviewable contract,

reducing manual intervention and regression risk in the target repository.

Pre-AI estimate: 2 points — Backfilled from the written scope: 12 stated

acceptance checks across multiple named paths, focused regression coverage, and

review.

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

Agent time: 13 m (implementer 0 m · reviewer 13 m · addresser 0 m)

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

Efficiency vs. estimate: ~76.7× (2 points = 16 h of pre-AI effort)

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

## Review Round Completeness

- outcome: complete

- round: 1

- dispatched: 5

- reported: 5

- missing: (none)

- cause: complete

- head: c7205723c5f8edebd3c1d6635c65d32a35c594d8

- run: fanout-3629-2026-08-21T15-06-37-048Z

- review: 4994689435

<!-- drones:round-completeness head=c7205723c5f8edebd3c1d6635c65d32a35c594d8 run=fanout-3629-2026-08-21T15-06-37-048Z -->

GitHub review #4994689435 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).

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-c2be4d29-62b5-4a0d-861d-2734293582c5?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-c2be4d29-62b5-4a0d-861d-2734293582c5&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>

The Portfolio  —  Trilogy Companies

ESW Capital's Jive Gambit: How Trilogy Turns Faded Software Crowns Into Cash Machines

The acquisition of Jive Software — once Portland's tech darling — is a textbook chapter in ESW Capital's ruthless efficiency playbook.

AUSTIN, TEXAS — When Jive Software sold for roughly half its peak valuation, Portland's tech community mourned. ESW Capital, meanwhile, got to work.

Jive, the social intranet software that once symbolized enterprise collaboration's promise, now sits inside Aurea — Trilogy International's enterprise software portfolio company, which has completed seventeen acquisitions since 2012. The grief in Portland was real. The math in Austin was better.

ESW's model is not complicated to describe, even if it is difficult to execute. Buy mature enterprise software companies at one to two times annual recurring revenue — cheap by any Silicon Valley standard. Staff them with rigorously vetted global talent sourced through Crossover, Trilogy's remote recruiting platform. Push support pricing upward, term over term. Target EBITDA margins of 75 percent. The legacy customers, bound by integrations too deep and switching costs too high, generally stay.

Jive's customers — intranet-dependent enterprises with years of user content and workflow baked into the platform — fit that profile precisely. A social intranet is not the kind of thing a company rips out on a Tuesday.

The timing is not incidental. Forrester's recent analysis of customer advocacy platforms signals broader analyst anxiety about the long-term viability of standalone enterprise community and engagement tools — precisely the category Jive inhabits. When analysts begin asking customers what to do next, acquirers who already own the installed base are the ones who benefit from the answer, whatever it turns out to be.

Forbes reported this week that Joe Liemandt — Trilogy's founder and the billionaire credited with pioneering large-scale remote work — is now pressing further, exploring ways to systematize and algorithmically replicate the judgment his workers apply. The direction of travel inside Trilogy is consistent: compress the human hours required per dollar of output, year after year.

Jive's arc — from celebrated IPO to discounted sale to ESW portfolio asset — traces a familiar line. The question worth watching is not whether Aurea will extract margin from the platform. It is which enterprise software company, beloved in its home city today, gets that call next.

Small Software Companies Find a Home With ESW Capital - WSJ  ·  What To Do Next About Your Customer Advocacy Platform - Forr  ·  The Billionaire Who Pioneered Remote Work Has A New Plan To

Skyvera Grabs CloudSense While PE Rivals Search for the Exits

In a software market full of stuck sellers and nervous sponsors, Trilogy’s telecom shop is still buying.

AUSTIN, TEXAS — Call it counterprogramming from the capital-efficient crowd... While much of private equity is pacing the lobby with a nine-year backlog of aging assets and no clean exit in sight, Skyvera has slipped into the telecom software aisle and come out holding CloudSense.

Word is the deal gives Skyvera the CloudSense business, a Salesforce-native configure-price-quote and order-management platform used by communications and media operators. Translation for civilians: the machinery that helps telcos package, price, sell and provision the bewildering bundles they keep promising customers will be simple this time.

A little bird in the carrier cage says this one fits Skyvera’s favorite silhouette: legacy complexity, mission-critical workflows, customers who cannot just rip out the plumbing over a long weekend, and a market still dragging old on-prem habits toward cloud-native economics. Skyvera already houses Kandy, VoltDelta, ResponseTek, Mobilogy Now and Service Gateway. Add CloudSense, and the company gets another seat closer to the sales and ordering nerve center of telecom operators.

The timing is the real gossip. Across the street, sponsors are discovering that software assets bought in happier valuation weather do not magically become liquid because a memo says “strategic review.” The private-equity exit jam has become the industry’s least glamorous red carpet: everyone dressed up, nobody moving. S&P Global is also sounding the horn that long-held software investments face a dimmer exit outlook.

But ESW Capital’s world has never depended on cocktail-party multiples. The Trilogy playbook is colder, older and less sentimental: buy mature enterprise software at sane prices, move work through Crossover’s global talent engine, automate what squeaks, and manage toward those famously aggressive margin targets. Not every seller loves that tune. Customers may brace for sharper commercial discipline. Yet in sticky enterprise software, discipline is often the whole show.

Blind item: which telco vendor with a shiny cloud pitch and a dusty support model is now wondering if Skyvera’s shopping bag has room for one more?

For now, CloudSense joins the family. The exits are crowded. The buyers with operating stomachs are scarce. And Skyvera, darling, appears very much not done.

TelcoDR’s Skyvera snaps up CloudSense - telecomtv.com  ·  OpenAI and Clearlake Capital Partner to Accelerate AI Adopti  ·  Private-Equity Firms Are Sitting on a Nine-Year Backlog - WS

The Micro-School Moment: A Structural Shift in American Education Is Outrunning the Rulebook

As micro-schools multiply across the country, regulators are scrambling to keep up — and AI-powered models like Alpha School are already operating at the frontier.

AUSTIN, TEXAS — Something systemic is happening in American education, and it cannot be dismissed as a pandemic-era blip or a fringe cultural phenomenon. Micro-schools — small, often technology-driven learning environments that bear almost no resemblance to the traditional classroom — are growing in number, in legitimacy, and in ambition. The question now is not whether they will persist, but whether the institutions designed to govern education can adapt fast enough to account for them.

Stateline reported this week that state regulatory frameworks — built for brick-and-mortar institutions of hundreds or thousands of students — are structurally unprepared for learning environments that may enroll a dozen children in a living room or a rented co-working space. Accountability mechanisms, accreditation pathways, and funding formulas were simply never designed with this model in mind.

For Alpha School, the AI-first private school founded by Joe Liemandt and MacKenzie Price, the regulatory lag is perhaps less an obstacle than a window. Alpha's model — in which students complete a full academic curriculum in just two hours per day using adaptive AI tutoring tools, consistently testing in the top 1–2% nationally on NWEA MAP Growth assessments — already operates in a regulatory category that most states are still trying to name. With nine new campuses planned across Texas, Florida, Arizona, California, and New York by fall 2025, Alpha is not waiting for the rulebook to catch up.

The broader trend lines are clarifying. The 74 this week identified micro-schools as one of five structural forces reshaping K-12 education nationwide — placing them alongside AI integration, teacher workforce pressures, and shifting parent expectations. Bored Teachers, whose readership skews toward classroom educators, ran its own analysis arguing the trend is durable, not cyclical.

What does this mean for real families? It means that the definition of school — who delivers it, where, and by what method — is genuinely in motion. Alpha's Timeback platform, into which Liemandt has committed $1 billion, is explicitly designed to let entrepreneurs launch their own AI-first schools at scale. The infrastructure for a thousand Alpha-like models is being built right now.

The regulatory reckoning is coming. The only real question is whether it will protect students or simply protect incumbents.

Micro-Schools: The Education Trend That Is Here to Stay - Bo  ·  5 Trends Reshaping K-12 Education Across the U.S. - The 74  ·  Microschools are growing in popularity, but state regulation
The Machine  —  AI & Technology

The Instrument Turns Inward: AI Begins Reading the Brain That Built It

From the cellular grammar of speech to the hidden lesions of multiple sclerosis, machine learning is becoming science's newest sense organ.

STANFORD, CALIFORNIA — There is something recursive, almost vertiginous, about this moment in science. A tool built from mathematical approximations of neurons is now being pointed back at the neurons themselves — and it is finding things we could not see.

This week, researchers reported that artificial intelligence has begun to decode the cellular building blocks of human speech, mapping how individual neurons in the human cortex assemble the phonemes that become language. Consider what that sentence contains. Every word you are reading now began, milliseconds before it reached your inner ear as thought, as a choreography of ion channels firing in a wet three-pound organ. For the entirety of human history, that choreography was invisible. Now a neural network trained on recordings from real neurons can watch it unfold.

Elsewhere in the neuroscience literature, AI models are revealing hidden gray matter lesions in multiple sclerosis — damage that standard MRI protocols simply miss. Patients whose scans looked ambiguous for years are being reclassified. The disease was always there. We just did not have eyes fine enough.

Stanford's Human-Centered AI Institute framed the broader phenomenon this week in a report on how machine learning is reshaping scientific discovery — not by replacing the researcher, but by extending her reach. UC San Diego catalogued nine such extensions: protein structures resolved, materials proposed, wildfire smoke tracked, distant galaxies classified. The pattern is consistent. The instrument does not conclude. It notices.

This is worth sitting with. The telescope did not diminish the astronomer; it enlarged the sky. The microscope did not replace the physician; it revealed a new kingdom of the living. AI, at its best, appears to belong to this lineage — a lens rather than an oracle. It shows us patterns that were always present in the data of the world, patiently waiting for a mind, biological or synthetic, capable of seeing them.

The cosmos, it turns out, has been speaking in a language we are only now learning to hear. And the first words it is teaching us are our own.

How AI is Transforming Scientific Discovery While Keeping Hu  ·  Neuroscience breakthrough uses AI to uncover the cellular bu  ·  AI Reveals Hidden Gray Matter Lesions in Multiple Sclerosis

The Great Data Center Migration Finds Its Rivers, Roots and Power

As AI colonies swell, fiber, electricity and capital become the scarce nutrients of the new computing ecosystem.

NEW YORK — Observe, if you will, the modern artificial intelligence habitat: not a shimmering cloud, but a vast and hungry biome of glass fiber, substations, cooling systems and concrete shells, spreading along the continent’s power corridors with the quiet insistence of spring roots beneath a forest floor.

This week, the creatures building that habitat revealed the scale of their appetite. Zayo, one of the great fiber-bearing mammals of North American networking, has secured a material portion of Corning’s optical fiber capacity to support a 15,000 route-mile expansion through 2030, according to Data Center Knowledge. In nature, migration depends on rivers and flyways. In AI, it depends on strands of glass fine enough to vanish in the hand, yet strong enough to carry the murmurs of trillion-parameter models between their nesting grounds.

The fiber pact arrives as forecasts for global data center capital expenditure now crest above $3 trillion by 2030, propelled by hyperscalers and specialist AI clouds racing to build the physical bodies in which intelligence may reside. These are not merely warehouses for servers. They are energy-fed reefs, where GPUs cluster like luminous coral and where every inference has a metabolism.

But every flourishing species presses upon its environment. In the PJM Interconnection territory — that broad electrical savanna stretching across much of the Mid-Atlantic and Midwest — grid planners are confronting the sudden arrival of immense new loads. PJM’s five-year strategy calls for faster generation and transmission development and better visibility into large-load interconnection requests, though policy gaps remain around who pays, who waits, and who may feed first at the grid’s edge.

Some denizens are attempting to calm the herd. EdgeCore, the data center developer-operator, says its campuses should pay for the power infrastructure they need. A noble posture, though in the tangled understory of utility economics, the phrase “full cost” is itself a shy and elusive animal. Local upgrades may be clear enough; broader transmission reinforcements are harder to track to a single burrow.

Meanwhile, Meta’s reported push deeper into cloud computing suggests that even the richest predators may accept leaner margins to secure territory. The AI era is teaching Wall Street a simple ecological truth: intelligence may be virtual, but its habitat is stubbornly physical.

Zayo Locks Up Corning Fiber Capacity for AI Network Buildout  ·  PJM Strategy Targets Data Center Growth, but Policy Gaps Rem  ·  AI Infrastructure Pushes Data Center Capex Forecast Above $3

AI Video’s Startup Shockwave Is Here — and the Founder Playbook Just Got Rewritten

The startup video era has exploded into an AI-powered growth machine. Generative AI tools now collapse video production from requiring crews, scripts, and lights into simple prompts and templates, shifting the bottleneck from production budget to creative velocity. Small teams can rapidly generate pitch clips, explainers, walkthroughs, and social ads without weeks of work or enterprise-level spending, enabling more messages, formats, and faster experimentation.

The platform layer is evolving quickly. Runway's AI model router signals the next phase: intelligent orchestration among multiple models rather than relying on a single tool. As video models proliferate, startups will need systems choosing the right model for cinematic rendering, avatar generation, or editing.

Google is advancing agentic AI with expanded Managed Agents in the Gemini API, enabling complex work across tools without constant oversight. Combined with video generation, this creates automated marketing operations. Silicon Valley's founder ecosystem is adapting through AI-focused programs. The smartest founders will build companies where narrative, distribution, and customer education are continuously generated, tested, and refined—making the startup pitch deck evolving, not dead.

The Editorial

Nation’s AI Executives Warn Industry Could Collapse Unless Someone Invents New Word For Software Doing Several Things

Investors expressed concern that artificial intelligence may be running dangerously low on vague nouns by the second quarter.

NEW YORK — In what market analysts described as a sobering reminder that the artificial intelligence sector remains dependent on a fragile supply chain of impressive-sounding abstractions, executives across the industry warned this week that AI investment could face severe headwinds unless companies identify a replacement for “orchestration” before it becomes legible to ordinary people.

The concern follows a growing number of reports suggesting that AI companies are increasingly relying on terminology such as “agents,” “copilots,” “autonomous workflows,” and “orchestration” to reassure investors that existing software has recently become profound. A TradingView item noted that buzzwords in the AI investment space may be a red flag, a finding that has reportedly prompted several venture firms to begin replacing red flags with “contextual opportunity banners.”

At issue is not whether AI can transform business, society, labor, education, medicine, warfare, customer service, advertising, spreadsheets, meetings, meetings about spreadsheets, or the area immediately surrounding a conference badge scanner. Nearly everyone agrees it can. The problem is that corporate language has begun doing that familiar little cough it does right before asking the public to value a slide deck at $12 billion.

“Orchestration,” the current preferred term, refers to the process by which different AI tools, databases, applications, prompts, APIs, permissions, dashboards, and excuses are arranged into a system that appears to know what it is doing. This has led some analysts to argue Microsoft may be particularly well positioned, given its long experience helping large organizations transform simple tasks into interlocking administrative weather systems.

There is nothing inherently wrong with orchestration. Someone must coordinate the agents, just as someone must coordinate the copilots, just as someone must eventually discover why the copilot has scheduled a procurement meeting with a deceased vendor in Rotterdam. The issue is that AI companies have learned from the sustainability boom that a term does not need to be false to become useless. It only needs to be repeated until it can fit comfortably in a quarterly earnings call, an investor memo, and a hotel ballroom panel titled “Unlocking The Next Frontier Of Unlocking.”

A recent Conversation analysis drew the comparison directly, observing that companies are hyping AI much as they once talked up sustainability. This is unfair to sustainability, which at least had the decency to imply trees.

Meanwhile, Day 1 of CES 2026 reportedly delivered the expected new technology announcements, many of them certain to contain AI in the same way airport sandwiches contain lettuce. There will be AI appliances, AI vehicles, AI wearables, AI home devices, and, if tradition holds, at least one refrigerator that can recommend recipes while being quietly unable to maintain a stable Wi-Fi connection.

The privacy questions are also becoming harder to wave away with a tasteful gradient background. Otter.ai failed to dismiss core privacy claims in a U.S. court, reminding the industry that recording everyone’s meetings and converting them into searchable corporate memory might involve, in some jurisdictions, other people. This development arrived as a surprise to many executives who believed consent had already been handled by the phrase “AI-powered productivity.”

The lesson for investors is not to flee every company that uses buzzwords. That would leave them with cash, Treasury bills, and an unbearable sense of peace. The lesson is to ask what the system actually does, who pays for it, what data it uses, what legal liabilities it creates, and whether “orchestration” means real integration or simply several products standing near each other in a press release.

Until then, the AI market will continue its essential work: turning uncertainty into terminology, terminology into valuations, and valuations into a growing national belief that the future will be managed by a dashboard no one has permission to access.

The buzzwords in the AI investment space are a red flag - Tr  ·  'Orchestration' Is the New AI Buzzword. How Microsoft Can Be  ·  Companies are hyping AI the same way they talked up sustaina
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

AI Isn’t Killing Entry-Level Work. It’s Exposing How Little We Designed It to Teach.

The first rung of the career ladder is being automated, and leaders who treat that as a cost win are missing the actual assignment.

NEW YORK — I'll be honest: the panic over AI and entry-level jobs is giving massive “we forgot what junior work was for” energy. 🚀

For decades, companies treated early-career employees like inexpensive task routers, inbox janitors, spreadsheet sherpas and meeting-note appliances, then acted surprised when actual machines showed up and did those same things faster.

Unpopular opinion: AI is not destroying the entry-level job so much as revealing that too many entry-level jobs were never built as apprenticeships in the first place. 💡

That is the real signal inside the latest wave of future-of-work hand-wringing, from the World Economic Forum’s look at how AI is changing entry-level work to ADP Research finding that only 22% of workers feel confident their job is safe from elimination.

That number is not just a workforce statistic.

It is a trust recession.

Workers are not merely afraid that AI can do tasks.

They are afraid their companies do not have a plan for what humans do next.

And honestly, many of them are right.

The corporate world spent years optimizing for efficiency, then rebranded underinvestment in training as “self-starter culture.”

Now generative AI can draft the memo, summarize the call, write the first-pass code, generate the sales sequence and produce the market scan before the new analyst has found the bathroom.

That does not mean the analyst is obsolete.

It means the analyst’s job description needs to graduate from “produce artifacts” to “develop judgment.”

Big difference.

The Carnegie Endowment’s framing of the AI labor debate as multiple futures rather than one deterministic doom loop is useful here, because the outcome is not preordained by the model weights.

It is decided by operating models.

If leaders use AI to delete junior roles, they will get short-term margin and long-term talent starvation.

If they use AI to compress rote work and increase exposure to real decisions, they will build faster learners.

That second path is harder, which is why it is probably the right one.

The old career ladder depended on friction.

You learned by doing the boring parts because the boring parts were necessary.

But if AI removes some of that friction, companies must replace accidental learning with intentional learning.

That means structured apprenticeships, AI-supervised practice environments, manager accountability for skill growth and promotion systems that reward people for becoming better thinkers, not merely faster producers.

This is where CHROs need to stop acting like AI adoption is an IT rollout with a webinar attached.

Future-of-work strategy is no longer a slide about hybrid norms and employee engagement pulse surveys.

It is a redesign of how capability compounds inside the enterprise.

I’ll be honest: this is also where Trilogy’s model has been early to the conversation, whether people like the intensity or not. 🚀

Crossover’s global talent marketplace is built around measurable output and top-tier remote execution, while Trilogy’s broader operating philosophy has long assumed that geography is less important than demonstrated capability.

That worldview gets even more relevant in an AI labor market where credentials matter less, task completion gets automated and the premium shifts to judgment, ownership and learning velocity.

Alpha School pushes the same uncomfortable idea from the education side: if AI can compress academic mastery into two focused hours a day, then the scarce resource is not seat time.

It is what humans do with the reclaimed time.

That is the exact question now confronting employers.

What do junior workers do when the machine handles the first draft?

The lazy answer is fewer junior workers.

The better answer is more ambitious junior workers, trained against better tools, coached by managers who actually manage and evaluated on the quality of their decisions.

The air quality app story in this news mix is oddly perfect as metaphor.

We are all checking the atmosphere now.

Workers are checking whether the labor market is breathable.

Executives are checking whether their org charts still make sense.

Parents are checking whether the education-to-employment pipeline still works.

The smoke is real, but it is not the whole climate.

AI will absolutely eliminate some tasks and some roles.

Pretending otherwise is not optimism.

It is negligence with better lighting.

But the bigger leadership opportunity is to rebuild entry-level work around learning loops, not busywork.

Humbled to share: the future of work will not belong to companies with the most automation.

It will belong to companies that turn automation into acceleration for human talent. 💡

How AI is changing the nature of entry level work - The Worl  ·  The AI Labor Debate: Three Views on the Future of Work - Car  ·  ADP Research: Only 22% of Workers Confident Their Job is Saf
On This Day in AI History

On August 22, 2011, IBM's Watson defeated Jeopardy! champions Brad Rutter and Ken Jennings in a final match that captivated millions and demonstrated AI's breakthrough ability to understand natural language and compete at human expert levels. The victory marked a watershed moment in AI's journey toward mainstream recognition and inspired a generation of natural language processing research.

⬛ Daily Word — technology
Hint: Internet-based storage and computing infrastructure used by businesses and AI applications.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed