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

ANTHROPIC TELLS INVESTORS: PAY UP, WE MIGHT DOOM THE WORLD

Prospectus admits billions in losses and a chance its own machine wipes out mankind — Wall Street lines up anyway.

SAN FRANCISCO — Anthropic put it in writing. The AI outfit's prospectus, filed for investors weighing a piece of the company, says plain as day the firm is losing tens of billions of dollars a year. Same document says the technology it built might end humanity.

Investors read on anyway. TechCrunch got the filing and found growth numbers climbing as fast as the losses. Revenue up. Burn rate up. Existential risk disclosure, filed right alongside the balance sheet, up too.

This is the new prospectus, boys. Not just "risks to competition" and "risks to regulation." Now it's "risk to the species." Anthropic isn't hiding it. Company puts the warning in black and white because the lawyers say they got to, and because the money keeps coming regardless.

Money keeps coming everywhere this week. KKR's AI infrastructure shop just pulled in a cool billion. Cox Capital's out launching tender offers on two business development companies. Capital don't care about doom warnings when the growth curve looks like Anthropic's.

Same appetite showed up smaller-scale, different corner of the world. Protego Ventures, first dedicated defense tech fund out of Israel, closed its debut vehicle at $125 million. TechCrunch learned it exclusive. Biggest fund of its kind in the country, and it ain't small change for a first-timer.

Meanwhile out in the supply chain trenches, a crew of ex-Tesla engineers raised $12.5 million for a company called Atomic. They're putting logistics on autopilot — literally, given where the founders came from. DoorDash and HelloFresh already running the software. Agentic systems making the calls a human dispatcher used to make, no coffee breaks required.

Peak XV ain't sitting still either. The outfit bumped its Surge seed program ceiling to $5 million a startup and rolled out an 18-company cohort. Thirteen of the eighteen got their eyes on global markets. More than half call India home. Money moving fast, moving everywhere, chasing the same story: machines doing what people used to do, cheaper, faster, and — per Anthropic's own paperwork — maybe someday catastrophically.

Here's the wire's read on it: nobody's pulling back. Not the venture funds writing checks into supply-chain robots, not the defense money flowing into Tel Aviv, not the private equity shops backing AI infrastructure by the billion. Anthropic put the warning label right on the box and the checks cleared same day.

This correspondent has covered railroads that killed men and oil rigs that blew sky-high, and capital never blinked at those risks either. Difference this time is the company doing the warning is the same company doing the building. That's a new one. File it under: progress, at a price nobody's finished counting yet.

↗ Protego Ventures closes debut $125 million fund for Israeli  ·  Ex-Tesla team raises $12.5M to put supply chains on autopilo  ·  Anthropic’s prospectus details losses, growth, and, yes, a w

Money Outpaces Caution as Washington Watches From the Sidelines

OpenAI shelves its most advanced model over safety fears even as capital keeps flooding an industry that regulators can't keep pace with.

SAN FRANCISCO — OpenAI told researchers this week that GPT-6.1 Astra, its most capable model to date, will not ship. The company cited unresolved security questions raised internally — the second time in three years OpenAI has pulled a flagship release rather than push it to market. The decision cost the company nothing in market share; it has none to lose. It cost something in narrative, at a moment when the rest of the industry is behaving as if the caution phase ended long ago.

Consider the numbers. Nvidia's board approved a $150 billion addition to its stock buyback program Tuesday, the largest single authorization in corporate history, arriving just four months after an $80 billion increase. Total remaining authorization: $235 billion. That is roughly the annual GDP of Portugal, committed to repurchasing shares rather than, say, funding the kind of safety research that kept Astra in the vault.

Meanwhile Instinct, an AI agent startup few outside Silicon Valley had heard of eighteen months ago, closed a $1 billion round, per Reuters — capital chasing autonomous software that acts on its own initiative, the precise category OpenAI's researchers flagged as risky enough to withhold a model over.

The policy apparatus meant to referee all this remains, by most accounts, several product cycles behind. No comprehensive federal framework governs frontier model release decisions; the closest thing to oversight is self-imposed, as Astra demonstrates. That vacuum was on display Thursday when Anthropic CEO Dario Amodei — the industry's most vocal advocate for regulatory guardrails — dined privately with President Trump at the White House. Trump has publicly dismissed Amodei's warnings as bad for business.

The juxtaposition is the story. One lab is withholding a model. The market is writing checks as if none of this were happening. And the government, per multiple accounts, is still deciding what questions to ask.

↗ OpenAI Says It Will Not Release Newest Astra A.I. Model Over  ·  Nvidia Adds $150 Billion to Massive Stock Buyback, the Large  ·  Dario Amodei of Anthropic to Dine With Trump at White House

At the Security Council, a Warning No One in the Room Seemed Ready to Heed

UNITED NATIONS — The chamber where the Security Council once argued over nuclear stockpiles took up a newer kind of arms race this week: artificial intelligence. A UN expert stood before the fifteen members and called the pursuit of ever-more-powerful AI systems a race where everyone loses, the kind of line diplomats write down and then quietly ignore.

Across town, at the General Assembly, President Trump made sure the warning landed on deaf ears. He told the gathered nations that the United States would not be bound by global AI rules, that Washington intends to lead the race for what he called "Super Intelligence," full stop, no committee required. It was less a policy speech than a flag planted in the ground — the kind of gesture that reads differently depending on which capital you're sitting in.

In Beijing, it reads like an invitation. Foreign Policy's latest accounting of the AI contest argues China is quietly closing the distance the West assumed was permanent — not through a single breakthrough model but through cheaper compute, wider deployment, and a state willing to subsidize scale in a way Silicon Valley's venture math cannot match. Washington's response, detailed in a fresh U.S. initiative aimed at intensifying the competition, doubles down on the export-control-and-outspend strategy that has defined the rivalry since the first chip bans landed.

What's missing, the Center for Strategic and International Studies notes in its assessment ahead of the next U.S.-China summit, is any real governance architecture connecting the two countries' AI ambitions — no shared floor beneath the race, no agreed ceiling above it. The Security Council session was supposed to be a step toward that floor. Instead it produced a familiar shape: experts warning of shared risk, great powers insisting on unilateral advantage, and a UN body with no enforcement mechanism to make either side listen.

The race, as the expert put it, has no winners. It has, for now, only entrants — and neither of the two largest has shown any interest in slowing down to ask what happens if they're right.

Haiku of the Day  ·  GPT-5.6 LunaWarnings bloom in code
While watchdogs watch the watchers
Profit counts the sparks
The New Yorker Style  ·  Art Desk
The New Yorker Style  ·  Art Desk
The Far Side Style  ·  Art Desk
The Far Side Style  ·  Art Desk
News in Brief
On the Epistemological Vertigo of Measuring Whether Machines Share Our Values
CAMBRIDGE, MASS.
In Re: Broken Promises, Consolidated Docket — Xbox Layoffs, Platform Moderation, and the Ongoing Question of Who, If Anyone, Is Accountable
REDMOND, WASHINGTON — It is hereby noted, for the record, that Microsoft Corporation (hereinafter "the Company"), having previously represented — with what now appears to have been something less than full candor — that no further reductions in Xbox-division personnel would occur subsequent to its acquisition blitz of recent years, has nonetheless proceeded to implement additional layoffs, the timing and scope of which are detailed at length in the underlying reporting on the matter.
We Asked The Machines To Watch Us, And Now Someone Has To Watch The Machines Watching Us
AUSTIN, TEXAS — I want to tell you that a hacking group deciding, out of the goodness of their criminal hearts, not to publish the home addresses and spouse details of every FBI employee in America is good news.
The Economists Have Convened, the Philosopher Has Confessed, and Nobody Knows Anything
AUSTIN, TEXAS — There is a particular pleasure, available to a columnist of sufficient age, in watching the great financial houses discover a problem roughly four years after it moved into the neighborhood, hung curtains, and started mowing the lawn.
Unpopular Opinion: Everyone's Building Lasers and Rockets While You're Still Arguing About ChatGPT Modes 🚀
AUSTIN, TEXAS — I'll be honest, I almost didn't write this column today. I was too busy manifesting Q1 gains. But then I saw the news cycle and I had to speak up. First: Ben Levinson over at Heven AeroTech is out here building hydrogen-powered drones and now pivoting into laser weapons because the battlefield of "affordable mass" demanded it. That's not a pivot. That's a founder reading the market and adapting in real time.
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

Shipyard Ships 0.6.6 While Surtr Wires the Whole A8 Admissions Grid

A production release headlines a 24-hour stretch where the team shipped a new desktop build, stood up a 24-source admissions pipeline, and rebuilt Forecast V2 from the ground up.

Let's start with the banner: Shipyard 0.6.6 is live. That's not a patch note, that's a ship date. @ashwanth1109 closed out the release train (#136) carrying the contextual companion, Codex/Pi task selection, and provider-neutral conversations into the wild, but the real muscle is in what got him there. PR #135 threads Pi credential readiness and OS-permission gating straight into the task and conversation UI without touching a line of existing Codex behavior — that's surgical, not lucky. And #134 is the kind of infrastructure nobody claps for until it saves someone's afternoon: a fixture-only feature-replay runner that composes node runs with dependency outputs, patches, checkpoints, retries, and divergence tracking. Ship first, replay later, trust the receipts. That's a release.

While Shipyard was going out the door, Surtr was quietly building the plumbing that makes the whole education data platform tick. @kevalshahtrilogy delivered A8 plan unit U03 in full (#2084) — a new mart-aerie-admissions-refresh Lambda runner triggered off EduCRM and HubSpot syncs, plus two parity marts riding on top of it — and immediately followed with #2082, registering all 24 frozen A8 Gateway sources in a single entity so Aerie needs exactly one new key to read the lot. Add in the Unicode-aware trim fix for the Schools Data Sheet (#2068) and the Finalsite tenant directory registration (#2069), and you've got a developer methodically closing out an entire domain, ticket by ticket, with production discipline (see also the drop/create idempotency hardening in #2080).

Over on Aerie, @vvp-trilogy ran the table on Forecast V2 — publishing the historical expected-enrollment source contract (#1568), bounding milestone conversions by actual enrollment date instead of application date (#1562), and retaining observations even when program years go missing (#1545), all while trimming the test suite from 119 singular assertions down to 106 without losing coverage (#1544). That's forecast accuracy and forecast hygiene shipping in the same sprint.

And then there's Klair's Khoros board-doc buildout, where marcusdAIy logged four PRs today reinforcing marker literals and row boundaries. Asked about the churn, he offered: "Four PRs to lock down one board doc against silent corruption isn't churn, Mac, it's called reviewing your own work before Mercy has to." Sure — four follow-up patches to get one Q4 template past review. I'll believe the marker's finally pinned when it survives a Tuesday without another fix commit.

Mac's Picks — Key PRs Today  (click to expand)
#134 — AI-883: Build an end-to-end feature replay runner @ashwanth1109  no labels

## Demo

![AI-883 smoke test](https://github.com/AI-Builder-Team/Shipyard/blob/d8caf3c/.smoke-evidence/AI-883-smoke-test.png?raw=true)

## Summary

- Add the fixture-only run_feature_replay command and frontend API for baseline/candidate end-to-end graph replay.

- Compose isolated node runs with dependency outputs, repository patches/untracked files, artifacts, checkpoints, retries, approvals, divergence, and source-integrity capture.

- Document the replay output contract and add focused feature-replay coverage.

## Linear

https://linear.app/builder-team/issue/AI-883/build-an-end-to-end-feature-replay-runner

## Testing

- pnpm test:feature-replay

- pnpm test:replay-runner

- pnpm build

- Full Rust library suite: 270 passed, 2 ignored

- Smoke harness: 29 passed; happy smoke run verified research-ready and stopped successfully

- pnpm theme:check

## Notes

This PR is intentionally draft and does not merge the change.

#136 — Release: Shipyard 0.6.6 @ashwanth1109  no labels

## Summary

- Update the authoritative app version to 0.6.6.

- Add the reviewed public release notes for the contextual companion, Codex/Pi task selection, provider-neutral conversations, and feature replay.

## Business Value

- Delivers the reviewed Shipyard improvements in the next desktop update with public notes that explain the user-visible changes.

## Implementation Effort

- Low: metadata-only release change; CI performs validation, packaging, signing, and publication.

## Test plan

- [x] pnpm test:release

- [x] git diff --check

#1568 — Forecast V2: publish expected enrollment arrival inputs @vvp-trilogy  approved

## Summary

- publish the five-field historical January expected-enrollment source contract

- preserve all-or-none nullability and current-year-only population

- add deterministic fixture, reconciliation, uniqueness, non-negative, and Alpha Austin coverage

## Validation

- poetry run dbt parse --no-partial-parse

- git diff --check

- warehouse-backed dbt tests delegated to PR CI (local worktree has no Redshift credentials)

Closes #1567

#2082 — feat(gateway): register all 24 A8 Gateway sources in an aerie-a8 entity (SURTR-1533) @kevalshahtrilogy  approved

## Summary

A8 unit U04 (Linear [SURTR-1533](https://linear.app/builder-team/issue/SURTR-1533), part of SURTR-735). It registers every A8 parity mart as a Gateway source in one batch, so Aerie needs one new key for all of A8.

- New Surtr/src/seed-gateway-aerie-a8.ts, modelled on seed-gateway-aerie.ts, plus a seed:gateway-aerie-a8 script in Surtr/package.json.

- It registers exactly the 24 frozen A8 slugs. Each one:

- points at mart_education.<slug with - replaced by _>;

- is read-only (supportedAccess: ["read"]);

- has orderBy: "mart_row_id" and no dateColumn or whereExtra, so Aerie pages each mart in full with a total order.

- The 24 sources go in a new entity, aerie-a8. The seed never writes the existing aerie entity: the only member delete is scoped to aerie-a8's id.

- Ownership guards on every upsert.

- The sources upsert only updates rows this seed created (setWhere created_by = seed-gateway-aerie-a8-script). Every row is then read back and checked before the entity is touched. A slug that someone else already registered fails the run; it is never repointed.

- The aerie-a8 entity upsert carries the same setWhere. If another creator owns an aerie-a8 entity, RETURNING comes back empty and the seed throws inside the transaction before the member delete, so that entity and its members are left untouched.

### How the seed behaves

- It runs by hand, not in CD. Nothing in this PR runs it on deploy.

- Registering a source isn't a grant. A key reads a source only if it was minted with that grant. An entity is just a way to select many sources when creating a key (gateway/entities.ts).

- Sources whose tables don't exist yet return errors until each mart lands. A missing table makes /gateway/{source} answer 500 internal. Nothing reads these sources before then, because every Aerie A8 gate defaults to legacy.

- It's safe to re-run. Sources upsert on slug, the entity upserts on slug, and only aerie-a8's members are replaced wholesale.

The 24 slugs, with the unit that builds each mart:

| Group | Slugs | Built by |

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

| G1 | aerie-admissions-program, aerie-admissions-program-directory | U03 |

| G2/G3 community | aerie-admissions-community-conversion, aerie-admissions-community-deposit | U06 |

| G4 expenses | aerie-expense-transaction, aerie-expense-vendor-classification | U07 |

| G2 per-program | aerie-admissions-pipeline-student, aerie-admissions-community-metric | U08 |

| G2 per-program | aerie-admissions-enrollment-cohort, aerie-admissions-pipeline-deposit, aerie-admissions-enrollment-transfer | U12 |

| G2/G3 forecast inputs | aerie-admissions-program-projection, aerie-admissions-coming-year-projection, aerie-admissions-app-conversion | U13 |

| G3 marketing | aerie-admissions-marketing-event, aerie-admissions-marketing-event-contact | U15 |

| G2 admissions pipeline | aerie-admissions-pipeline-detail, aerie-admissions-pipeline-tenant-crosswalk | U16 |

| G3 marketing | aerie-admissions-shadow-day-event, aerie-admissions-weekly-deposit | U18 |

| G6 SIS | aerie-sis-enrollment-rollup-input, aerie-sis-enrollment-member | U19 |

| G6 Forecast V2 | aerie-admissions-forecast-v2, aerie-admissions-forecast-v2-grade-operand | U24 |

Source descriptions flag the marts that carry PII: community conversion and deposits, per-program pipeline students, enrollment, deposits and transfers, marketing event contacts, pipeline detail, SIS members, and expense vendor names and memos.

## Business Value

A8 moves Aerie's runRefreshCycle Redshift reads onto Surtr marts. This is part of taking down Aerie's EC2 workers, the SURTR-735 quarter commitment. This PR is the registration step that every A8 shadow and cutover reader depends on. Doing it as one frozen batch means:

- Keval does one key mint for the whole project instead of one per wave;

- the 20+ Aerie and Surtr units can build against fixed slugs in parallel.

The ownership guard and read-back mean a hand-run prod seed can't silently repoint a source that someone else registered.

## Manual Effort Estimate

About 4 hours of focused time without AI, for Keval to confirm or adjust. That covers:

- mapping 24 slugs to their marts and domains from the A8 plan, and writing their descriptions and PII notes;

- the seed with the ownership guard and read-back;

- a mocked-DB test harness that honours the upsert semantics;

- checking all of it.

## Testing / evidence

- npx vitest run test/gateway (from Surtr/): 3 files, 61 tests passed. The 14 new tests in test/gateway/seed-gateway-aerie-a8.test.ts follow PR 2069's mocked-DB pattern. They assert:

- exactly the 24 frozen slugs, each once;

- mart_education.<slug with - replaced by _> for every slug;

- read-only, orderBy mart_row_id, and no dateColumn or whereExtra, both on insert and in the re-run update set;

- buildDeclarativeTableSql gives SELECT * FROM mart_education.<t> ORDER BY mart_row_id LIMIT … OFFSET … for every slug;

- no slug collides with seed-gateway-aerie.ts, seed-gateway-ai-spend.ts or the custom sources;

- only aerie-a8 is upserted, its upsert is guarded on created_by, and member deletes and inserts are scoped to aerie-a8 (the aerie entity is never written);

- all 24 sources are read members of aerie-a8;

- a re-run over its own rows converges;

- a slug that another creator already registered is left unchanged, and the run exits 1 before any entity write;

- an aerie-a8 entity that another creator owns is left unchanged, and its members are never deleted or replaced.

- A mutation check confirmed the tests fail when any of these is broken: the entity slug is set to aerie, either setWhere guard is removed, a table name is wrong, the source ownership check is dropped, or the empty-RETURNING check is dropped.

- pnpm test:unit: 54 files, 769 tests passed (round 1).

- Surtr/node_modules/.bin/tsc --noEmit -p Surtr: clean. The new test file is also clean under an ad-hoc tsconfig that includes it.

- npm --prefix Surtr run lint (biome check src): clean. The test file is Biome-formatted.

- The seed was not run against any database.

## Keval steps

1. After merge, run the seed once U03, U06, U07 and U08 are deployed, so the first slugs are readable. Run pnpm seed:gateway-aerie-a8 from Surtr/, with a .env pointing at the prod app database.

2. Mint one new Aerie Gateway key with the existing aerie grants plus all 24 aerie-a8 slugs. In key creation, select the entities aerie and aerie-a8.

- Set it as SURTR_GATEWAY_API_KEY in Aerie's EC2 .env.

- Keep a local-testing copy for dry-runs.

- Revoke the old key after the swap.

## Not covered

- The marts themselves (U03, U06–U08, U12, U13, U15, U16, U18, U19, U24) and their DDL applies.

- Warehouse SELECT grants, in case the prod Gateway's REDSHIFT_DB_USER isn't CQL_download_OM (plan §9).

- PII sign-off for exposing the PII marts on the Gateway (plan §9 D2). Registering them exposes nothing until a key is granted them.

- If U01 retires Q4, aerie-admissions-community-metric stays registered but unbuilt. Removing it is a follow-up.

- Nothing in Aerie reads these slugs yet. The readers arrive in U05 and later units.

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

#2084 — feat(aerie-a8): mart-aerie-admissions-refresh runner + G1 parity marts (SURTR-1536, SURTR-1537) @kevalshahtrilogy  approvedmercy-allow-critical

## Summary

This is A8 plan unit U03 in full: SURTR-1536, plus SURTR-1537, which Keval squash-merged into this branch from #2085. It adds the runner every A8 admissions parity mart plugs into, the EduCRM provenance view, and both G1 marts.

- New runner pipelines/runners/mart-aerie-admissions-refresh (Lambda, bundling: true, src/requirements.txt).

- Triggers: on_pipeline_success of sales-educrm-mart-sync (every 30 min) and mart-aerie-hubspot-refresh (6-hourly), with forward_upstream_execution_context.

- Upstream check: the handler confirms with describe_execution that the upstream run SUCCEEDED on that pipeline's state machine. On-demand runs are also accepted, and may name a subset of procedures.

- What it runs: it CALLs each procedure in REFRESH_PROCEDURES (one line in pipeline.json; later units append to it), then checks the published mart read-only: non-empty, unique mart_row_id, one source_run_id.

- Failure handling: a failed procedure makes the run partial_failure and the others still run. If every procedure fails, the run fails. It also fails if a write's acceptance cannot be ruled out: every Data API write carries a ClientToken, and an ambiguous CALL submission raises UnknownStatementOutcomeError rather than being recorded as a procedure failure.

- DDL is in pipelines/cdk/sql/mart_education/ as 006-011, the schema's numbered out-of-band deploy directory. scripts/apply_ddl.py applies exactly those six files, in order.

- 006 v_aerie_educrm_observed_publication gives, per EduCRM table, the latest SUCCESS or PARTIAL sales-educrm-mart-sync run whose per-table result is success, plus the latest started run of any status. It is built with UNPIVOT over results_by_table. rows_loaded must be a plain integer.

- 007 is the shared owner-only writer mutex.

- 008/009 aerie_admissions_program (slug aerie-admissions-program) is Aerie's queryPrograms SQL, copied verbatim from reference.ts:132-148, including the CURRENT_DATE prior-year predicate. It adds school_year, canonical_source_run_id and lineage. Its procedure requires the observed EduCRM run to be the latest started run (so no later writer can have replaced the table), rows_loaded to equal the full snapshot, and the run to be under 24 hours old.

- 010/011 aerie_admissions_program_directory (slug aerie-admissions-program-directory) is Aerie's queryHubspotPrograms SQL, copied verbatim from hubspot.ts:75-98. Its lineage is the directory's single hubspot_publication_run_id / hubspot_source_published_at.

- Both procedures build the candidate in temp tables and publish with DELETE + named-column INSERT in the CALL transaction, with no TRUNCATE. They fail closed on an empty candidate, bad lineage, and a duplicate mart_row_id.

- mart_row_id is the MD5 of the key and its occurrence number, ordered by every published column.

- Unresolved and duplicate rows are published as-is, so Aerie's own mapper still throws exactly as on the legacy read.

- PIPELINE §13 exception (WAREHOUSE §2.2 and PIPELINE §7) is documented in the README with owner, risk, controls and follow-on. Reader grants are left to the DBA; the DDL only protects the writer.

## Business Value

- It completes the Surtr side of G1, the first A8 group. programs is the hard prerequisite of every Aerie runRefreshCycle, and it plus programDirectory (which also feeds A1) can now be read through the Surtr Gateway with Aerie's unchanged row mappers. This moves Aerie off direct EduCRM reads from the EC2 analytics worker, which is the SURTR-735 quarterly commitment and what unblocks tearing the worker down.

- Parity is provable. Tests pin Aerie's SQL, the reconciliation EXCEPT is 0 in both directions, and every row carries lineage.

- Later A8 units reuse this foundation. The runner, the provenance view and the mutex serve about 10 more EduCRM marts, which then add only a procedure and one REFRESH_PROCEDURES entry.

## Manual Effort Estimate

About 18 focused hours (roughly 2.5 days) to build by hand without AI: reading both Aerie queries and the EduCRM run-log shape, the SUPER-aware provenance view, two procedures, the runner and client hardening, the tests and the reconciliation. Keval: please confirm or adjust.

## Testing / evidence

- uv run pytest: 85 passed. This covers the handler, the pipeline contract (every env var src/ reads is declared), the SQL contracts, apply_ddl and the Redshift client, including ambiguous-submission cases.

- The SQL-contract tests pin both Aerie queries and assert that each procedure's candidate is exactly that SQL plus the appended lineage columns, and that the reconciliation uses the same candidate.

- The pinned text matches Aerie origin/main byte for byte, at both 92fd47992 and 3d4fe1a97.

- Ruff 0.15.22: ruff check and ruff format --check are clean. CI is green.

- Read-only reconciliation was run with psql as CQL_download_OM (SELECT only), query 1 of each file (Aerie SQL vs the procedure's candidate):

| mart | aerie rows | candidate rows | aerie − candidate | candidate − aerie |

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

| aerie_admissions_program | 90 | 90 | 0 | 0 |

| aerie_admissions_program_directory | 113 | 113 | 0 | 0 |

Query 2, against the published marts, errors with "relation does not exist" as expected, because no DDL has been applied.

- Negative controls on the same multiset shape:

- dropping a row gives 1 / 0;

- duplicating a row gives 1 / 1.

- Procedure expressions run read-only:

- The view resolves 49 tables, with 0 unparsable counts. For mart_all_program, the observed run equals the latest run, and rows_loaded 180 = snapshot 180.

- The integer parser returns 180 → 180, and 89.9 / 1.8e2 / "180" → NULL.

- Stamping gives 90 and 113 unique mart_row_ids.

- The directory has 1 publication run id and 0 rows missing lineage.

- scripts/apply_ddl.py --dry-run (6 files, 43 statements, in apply order) is below:

<details><summary>apply_ddl.py --dry-run output</summary>

-- 006_v_aerie_educrm_observed_publication.sql: 3 statement(s)

-- Shared observed-provenance helper for the mart-aerie-admissions-refresh

-- procedures (A8 plan §3.1 rule 2). sales-educrm-mart-sync republishes each

-- EduCRM table in its own transaction and reports per-table outcomes only in

-- its run summary, so there is no atomic row-level lineage link. This view

-- exposes, per Redshift table, the latest SUCCESS/PARTIAL run whose per-table

-- result is 'success', together with the latest sales-educrm-mart-sync run to

-- have started (any status, RUNNING included: CreateRunRecord inserts it

-- before the run touches a table).

--

-- A procedure pins the observed run only when it is also that latest run: no

-- later writer can then have replaced the table, so, read in the same

-- transaction snapshot, the table is that run's publication. The procedure

-- still requires rows_loaded to equal the snapshot count.

-- Generalises the inline pattern in sp_refresh_aerie_program_directory

-- (mart-aerie-hubspot-refresh/ddl/20260819_incident_stopgap_duplicate_school_year.sql).

--

-- Placement (WAREHOUSE §10): writer-internal helper for mart procedures only.

-- It captures no source extraction (not staging) and holds no business

-- meaning (not core), so it lives beside its only readers in mart_education.

CREATE OR REPLACE VIEW mart_education.v_aerie_educrm_observed_publication AS

WITH educrm_runs AS (

SELECT

run_id,

status,

started_at,

ended_at,

output_summary

FROM staging_other.pipeline_runs_prod

WHERE pipeline_id = 'sales-educrm-mart-sync'

),

latest_run AS (

SELECT

run_id::VARCHAR(36) AS latest_run_id,

status::VARCHAR(20) AS latest_run_status

FROM (

SELECT

run_id,

status,

ROW_NUMBER() OVER (ORDER BY started_at DESC, run_id DESC) AS recency

FROM educrm_runs

) ranked

WHERE recency = 1

),

completed_runs AS (

SELECT

run_id,

ended_at,

CASE WHEN CAN_JSON_PARSE(output_summary) THEN JSON_PARSE(output_summary) END AS output_summary_super

FROM educrm_runs

WHERE status IN ('SUCCESS', 'PARTIAL')

AND ended_at IS NOT NULL

),

table_results AS (

SELECT

run.run_id,

run.ended_at,

table_key,

table_result

FROM completed_runs run, UNPIVOT run.output_summary_super.results_by_table AS table_result AT table_key

),

successful_table_results AS (

SELECT

table_key::VARCHAR(256) AS educrm_table,

table_result.redshift_table::VARCHAR(256) AS redshift_table,

run_id::VARCHAR(36) AS observed_run_id,

ended_at AT TIME ZONE 'UTC' AS observed_completed_at,

-- Only a plain non-negative integer is a row count; anything else

-- (89.9, 1.8e2, a string) becomes NULL so the procedure fails closed

-- instead of a cast truncating it into a matching count.

CASE

WHEN JSON_TYPEOF(table_result.rows_loaded) = 'number'

AND JSON_SERIALIZE(table_result.rows_loaded) ~ '^[0-9]{1,18}$'

THEN JSON_SERIALIZE(table_result.rows_loaded)::BIGINT

END AS observed_row_count,

ROW_NUMBER() OVER (

PARTITION BY table_result.redshift_table::VARCHAR(256)

ORDER BY ended_at DESC, run_id DESC

) AS recency

FROM table_results

WHERE table_result.status::VARCHAR(32) = 'success'

AND table_result.redshift_table::VARCHAR(256) IS NOT NULL

)

SELECT

observed.educrm_table,

observed.redshift_table,

observed.observed_run_id,

observed.observed_completed_at,

observed.observed_row_count,

latest.latest_run_id,

latest.latest_run_status

FROM successful_table_results observed

CROSS JOIN latest_run latest

WHERE observed.recency = 1;

COMMENT ON VIEW mart_education.v_aerie_educrm_observed_publication IS

'Purpose: writer-internal observed provenance for Aerie admissions parity mart procedures (mart-aerie-admissions-refresh); not a consumer contract. Grain: one EduCRM Redshift table written by sales-educrm-mart-sync. Key: redshift_table. observed_run_id is the latest SUCCESS or PARTIAL run whose per-table result is success; latest_run_id/latest_run_status describe the most recently started run of any status. This is observed provenance, not an atomic publication link: a procedure must require observed_run_id = latest_run_id and observed_row_count = the snapshot it reads, in one transaction.';

ALTER TABLE mart_education.v_aerie_educrm_observed_publication

OWNER TO "CQL_download_OM";

-- 007_aerie_admissions_refresh_writer_mutex.sql: 5 statement(s)

-- Owner-only mutex shared by every mart-aerie-admissions-refresh procedure.

-- Each procedure locks it first, so overlapping runs (both upstream triggers

-- can fire together) publish one at a time. It is locked instead of the

-- target mart, which is locked only for the final DELETE + INSERT.

CREATE TABLE IF NOT EXISTS mart_education.aerie_admissions_refresh_writer_mutex (

lock_scope VARCHAR(64) NOT NULL

)

DISTSTYLE ALL;

COMMENT ON TABLE mart_education.aerie_admissions_refresh_writer_mutex IS

'Owner-only writer mutex for the mart-aerie-admissions-refresh stored procedures. It contains no data and is not a consumer contract.';

REVOKE ALL ON mart_education.aerie_admissions_refresh_writer_mutex FROM PUBLIC;

REVOKE ALL ON mart_education.aerie_admissions_refresh_writer_mutex FROM GROUP team_engineers;

ALTER TABLE mart_education.aerie_admissions_refresh_writer_mutex

OWNER TO "CQL_download_OM";

-- 008_aerie_admissions_program.sql: 14 statement(s)

-- Canonical DDL for mart_education.aerie_admissions_program (A8 unit U03,

-- Gateway slug aerie-admissions-program). Sole writer:

-- mart_education.sp_refresh_aerie_admissions_program().

--

-- Query-shaped parity mart: columns are exactly the output aliases of Aerie's

-- queryPrograms SQL (sync/src/analytics/queries/reference.ts), with source

-- types kept (SUPER included) so pg and Gateway readers serialise them the

-- same way. school_year and canonical_source_run_id are lineage additions.

CREATE TABLE IF NOT EXISTS mart_education.aerie_admissions_program (

program_public_id VARCHAR(64),

source_program_id VARCHAR(256),

source_program_code SUPER,

program_code VARCHAR(512),

program_name VARCHAR(512),

is_expansion BOOLEAN,

owner_name SUPER,

grade_levels SUPER,

school_address SUPER,

school_status SUPER,

show_in_dashboard BOOLEAN,

school_year BIGINT,

canonical_source_run_id VARCHAR(128),

mart_row_id VARCHAR(32) NOT NULL,

source_run_id VARCHAR(128) NOT NULL,

source_published_at TIMESTAMPTZ NOT NULL,

refreshed_at TIMESTAMP NOT NULL,

created_by VARCHAR(128) NOT NULL,

PRIMARY KEY (mart_row_id)

)

DISTSTYLE ALL

SORTKEY (mart_row_id);

COMMENT ON TABLE mart_education.aerie_admissions_program IS

'Purpose: Surtr publication of the rows Aerie''s queryPrograms reads (EduCRM mart_all_program LEFT JOIN core_education.dim_program on the HubSpot Program id), so Aerie can read them through the Surtr Gateway with its unchanged row mapper. Grain: one output row of that SQL for the previous calendar school year (school_year = EXTRACT(YEAR FROM CURRENT_DATE) - 1, evaluated at refresh); normally one EduCRM program_id. Key: mart_row_id (MD5 of source_program_id plus its occurrence number). source_program_id is expected unique but not enforced: duplicate or unresolved rows (NULL program_public_id) are published as-is so Aerie''s own identity checks still fail closed. Lineage: source_run_id/source_published_at are the observed sales-educrm-mart-sync run (v_aerie_educrm_observed_publication), not an atomic publication link. Sensitive data: owner_name holds a staff member''s name. Full snapshot replaced atomically by mart_education.sp_refresh_aerie_admissions_program.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.program_public_id IS

'core_education.dim_program.program_id for the active HubSpot Program whose hubspot_program_id equals source_program_id; NULL when unresolved.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.source_program_id IS

'EduCRM program_id as text (TRIM(BOTH ''"'' FROM program_id::varchar)); this is the HubSpot Program id.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.program_code IS

'dim_program.program_name (the canonical program code). NULL when unresolved.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.program_name IS

'dim_program.display_name. NULL when unresolved.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.school_year IS

'EduCRM school_year (starting calendar year) of the published row. Lineage addition; not read by Aerie.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.canonical_source_run_id IS

'dim_program.hubspot_publication_run_id of the joined canonical Program row; NULL when unresolved. Lineage addition; not read by Aerie.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.mart_row_id IS

'Deterministic row key: MD5 of source_program_id and its occurrence number. Gateway orderBy for total-order paging. Not stable across a change to the row''s key.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.source_run_id IS

'Observed sales-educrm-mart-sync run_id whose mart_all_program rows_loaded equalled the snapshot this publication read.';

COMMENT ON COLUMN mart_education.aerie_admissions_program.source_published_at IS

'End time (UTC) of the observed sales-educrm-mart-sync run.';

ALTER TABLE mart_education.aerie_admissions_program

OWNER TO "CQL_download_OM";

-- Writer protection only. Reader access is provisioned by the Redshift DBA

-- (PIPELINE §13); the Surtr Gateway reads as the owner.

REVOKE INSERT, UPDATE, DELETE, TRUNCATE

ON mart_education.aerie_admissions_program FROM PUBLIC;

REVOKE INSERT, UPDATE, DELETE, TRUNCATE

ON mart_education.aerie_admissions_program FROM GROUP team_engineers;

-- 009_sp_refresh_aerie_admissions_program.sql: 4 statement(s)

-- Sole writer for mart_education.aerie_admissions_program (WAREHOUSE §7.1).

--

-- The candidate is Aerie's queryPrograms SQL, copied verbatim from

-- sync/src/analytics/queries/reference.ts:132-148 at Aerie 92fd47992. Two

-- changes only: MART_ALL_PROGRAM_YEAR_PREDICATE is expanded in place, and two

-- lineage columns are appended to the select list. Aerie's identity and

-- duplicate checks stay in Aerie's row mapper, so this procedure publishes

-- unresolved or duplicate rows as-is instead of rejecting them.

--

-- Fails closed on: no or incomplete observed EduCRM run; a later

-- sales-educrm-mart-sync run (any status, including one still running) that

-- could have republished the table since; an observation older than 24 hours;

-- a snapshot count that differs from the observed rows_loaded; an empty

-- candidate; and a duplicate mart_row_id. The DELETE + INSERT publish stays

-- inside the CALL transaction; never TRUNCATE (it commits implicitly).

CREATE OR REPLACE PROCEDURE mart_education.sp_refresh_aerie_admissions_program()

AS $$

DECLARE

v_observation_count BIGINT;

v_observed_run_id VARCHAR(36);

v_observed_completed_at TIMESTAMPTZ;

v_observed_row_count BIGINT;

v_latest_run_id VARCHAR(36);

v_latest_run_status VARCHAR(20);

v_snapshot_row_count BIGINT;

v_candidate_count BIGINT;

v_duplicate_count BIGINT;

v_school_year BIGINT;

v_refreshed_at TIMESTAMP;

BEGIN

LOCK TABLE mart_education.aerie_admissions_refresh_writer_mutex;

v_refreshed_at := GETDATE();

v_school_year := EXTRACT(YEAR FROM CURRENT_DATE) - 1;

SELECT COUNT(*) INTO v_observation_count

FROM mart_education.v_aerie_educrm_observed_publication

WHERE redshift_table = 'staging_education.sales_educrm_wh_mart_all_program'

AND educrm_table = 'educrm_wh.mart_all_program';

IF v_observation_count <> 1 THEN

RAISE EXCEPTION

'aerie_admissions_program: expected one successful EduCRM mart_all_program observation; found %',

v_observation_count;

END IF;

SELECT observed_run_id, observed_completed_at, observed_row_count, latest_run_id, latest_run_status

INTO v_observed_run_id, v_observed_completed_at, v_observed_row_count, v_latest_run_id, v_latest_run_status

FROM mart_education.v_aerie_educrm_observed_publication

WHERE redshift_table = 'staging_education.sales_educrm_wh_mart_all_program'

AND educrm_table = 'educrm_wh.mart_all_program';

IF NULLIF(BTRIM(v_observed_run_id), '') IS NULL

OR v_observed_completed_at IS NULL

OR v_observed_row_count IS NULL

OR v_observed_row_count <= 0 THEN

RAISE EXCEPTION

'aerie_admissions_program: EduCRM observation is incomplete (run %, completed %, rows %)',

v_observed_run_id, v_observed_completed_at, v_observed_row_count;

END IF;

-- The observed run must also be the most recently started EduCRM run.

-- Otherwise a later run (still running, failed, or one that failed this

-- table) may have republished it, and a matching row count would not prove

-- which run's rows are there. Read in this same transaction snapshot, no

-- later writer means the table is the observed run's publication.

IF v_latest_run_id IS NULL OR v_observed_run_id <> v_latest_run_id THEN

RAISE EXCEPTION

'aerie_admissions_program: EduCRM run % (status %) started after observed run %; the table may hold newer rows',

v_latest_run_id, v_latest_run_status, v_observed_run_id;

END IF;

-- sales-educrm-mart-sync runs every 30 minutes. An observation this old

-- can no longer vouch for the table it describes.

IF v_observed_completed_at < SYSDATE - INTERVAL '24 hours' THEN

RAISE EXCEPTION

'aerie_admissions_program: latest EduCRM observation % completed at % is older than 24 hours',

v_observed_run_id, v_observed_completed_at;

END IF;

-- Reconcile the full snapshot (every school year) to the observed run

-- before the year predicate narrows it.

SELECT COUNT(*) INTO v_snapshot_row_count

FROM staging_education.sales_educrm_wh_mart_all_program;

IF v_snapshot_row_count <> v_observed_row_count THEN

RAISE EXCEPTION

'aerie_admissions_program: EduCRM snapshot has % rows but observed run % reported %',

v_snapshot_row_count, v_observed_run_id, v_observed_row_count;

END IF;

DROP TABLE IF EXISTS tmp_aerie_admissions_program_query;

CREATE TEMP TABLE tmp_aerie_admissions_program_query AS

-- aerie-sql:begin

SELECT

canonical_program.program_id AS program_public_id,

TRIM(BOTH '"' FROM p.program_id::varchar) AS source_program_id,

p.program_code AS source_program_code,

canonical_program.program_name AS program_code,

canonical_program.display_name AS program_name,

p.is_expansion,

p.owner_name,

p.grade_levels,

p.school_address,

p.school_status,

p.show_in_dashboard,

-- A8 lineage additions (not in Aerie's select list):

p.school_year,

canonical_program.hubspot_publication_run_id AS canonical_source_run_id

FROM staging_education.sales_educrm_wh_mart_all_program p

LEFT JOIN core_education.dim_program canonical_program

ON canonical_program.hubspot_program_id = TRIM(BOTH '"' FROM p.program_id::varchar)

AND canonical_program.hubspot_source_presence_status = 'active'

WHERE p.school_year = EXTRACT(YEAR FROM CURRENT_DATE) - 1

-- aerie-sql:end

;

DROP TABLE IF EXISTS tmp_aerie_admissions_program;

CREATE TEMP TABLE tmp_aerie_admissions_program (LIKE mart_education.aerie_admissions_program);

INSERT INTO tmp_aerie_admissions_program (

program_public_id,

source_program_id,

source_program_code,

program_code,

program_name,

is_expansion,

owner_name,

grade_levels,

school_address,

school_status,

show_in_dashboard,

school_year,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

)

SELECT

q.program_public_id,

q.source_program_id,

q.source_program_code,

q.program_code,

q.program_name,

q.is_expansion,

q.owner_name,

q.grade_levels,

q.school_address,

q.school_status,

q.show_in_dashboard,

q.school_year,

q.canonical_source_run_id,

MD5(

'aerie_admissions_program|'

|| COALESCE('v' || q.source_program_id, 'n')

|| '|'

|| (ROW_NUMBER() OVER (

PARTITION BY q.source_program_id

-- Every output column, so rows that share a key are numbered

-- the same way on every refresh; only identical rows tie.

ORDER BY q.program_public_id, q.program_code, q.program_name,

JSON_SERIALIZE(q.source_program_code), q.is_expansion,

JSON_SERIALIZE(q.owner_name), JSON_SERIALIZE(q.grade_levels),

JSON_SERIALIZE(q.school_address), JSON_SERIALIZE(q.school_status),

q.show_in_dashboard, q.school_year, q.canonical_source_run_id

))::VARCHAR

),

v_observed_run_id,

v_observed_completed_at,

v_refreshed_at,

'mart-aerie-admissions-refresh/v1'

FROM tmp_aerie_admissions_program_query q;

SELECT COUNT(*) INTO v_candidate_count FROM tmp_aerie_admissions_program;

IF v_candidate_count = 0 THEN

RAISE EXCEPTION

'aerie_admissions_program: candidate is empty for school_year % (observed run %)',

v_school_year, v_observed_run_id;

END IF;

SELECT COUNT(*) INTO v_duplicate_count

FROM (

SELECT mart_row_id

FROM tmp_aerie_admissions_program

GROUP BY mart_row_id

HAVING COUNT(*) > 1

) duplicates;

IF v_duplicate_count <> 0 THEN

RAISE EXCEPTION 'aerie_admissions_program: candidate has % duplicate mart_row_id value(s)', v_duplicate_count;

END IF;

LOCK TABLE mart_education.aerie_admissions_program;

DELETE FROM mart_education.aerie_admissions_program;

INSERT INTO mart_education.aerie_admissions_program (

program_public_id,

source_program_id,

source_program_code,

program_code,

program_name,

is_expansion,

owner_name,

grade_levels,

school_address,

school_status,

show_in_dashboard,

school_year,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

)

SELECT

program_public_id,

source_program_id,

source_program_code,

program_code,

program_name,

is_expansion,

owner_name,

grade_levels,

school_address,

school_status,

show_in_dashboard,

school_year,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

FROM tmp_aerie_admissions_program;

IF (SELECT COUNT(*) FROM mart_education.aerie_admissions_program) <> v_candidate_count THEN

RAISE EXCEPTION 'aerie_admissions_program: post-publication row count mismatch';

END IF;

RAISE INFO 'aerie_admissions_program: published % row(s) from observed EduCRM run %',

v_candidate_count, v_observed_run_id;

DROP TABLE tmp_aerie_admissions_program;

DROP TABLE tmp_aerie_admissions_program_query;

END;

$$ LANGUAGE plpgsql SECURITY INVOKER;

ALTER PROCEDURE mart_education.sp_refresh_aerie_admissions_program()

OWNER TO "CQL_download_OM";

REVOKE ALL ON PROCEDURE mart_education.sp_refresh_aerie_admissions_program()

FROM PUBLIC;

GRANT EXECUTE ON PROCEDURE mart_education.sp_refresh_aerie_admissions_program()

TO "CQL_download_OM";

-- 010_aerie_admissions_program_directory.sql: 13 statement(s)

-- Canonical DDL for mart_education.aerie_admissions_program_directory (A8

-- unit U03, Gateway slug aerie-admissions-program-directory). Sole writer:

-- mart_education.sp_refresh_aerie_admissions_program_directory().

--

-- Thin parity mart: columns are exactly the output aliases of Aerie's

-- queryHubspotPrograms SQL (sync/src/analytics/queries/hubspot.ts) over

-- mart_education.aerie_program_directory_current, with source types kept.

CREATE TABLE IF NOT EXISTS mart_education.aerie_admissions_program_directory (

program_id VARCHAR(100),

hubspot_name VARCHAR(512),

display_name VARCHAR(512),

tuition NUMERIC(18, 4),

city VARCHAR(255),

state VARCHAR(100),

school_address VARCHAR(1000),

school_latitude NUMERIC(18, 8),

school_longitude NUMERIC(18, 8),

grade_levels VARCHAR(1000),

email VARCHAR(500),

contact_number VARCHAR(100),

enrollment_deposit VARCHAR(255),

application_fee VARCHAR(255),

school_year_start VARCHAR(256),

school_year_end VARCHAR(256),

website VARCHAR(2000),

school_summary VARCHAR(65535),

maxio_site_id VARCHAR(255),

canonical_source_run_id VARCHAR(128),

mart_row_id VARCHAR(32) NOT NULL,

source_run_id VARCHAR(128) NOT NULL,

source_published_at TIMESTAMPTZ NOT NULL,

refreshed_at TIMESTAMP NOT NULL,

created_by VARCHAR(128) NOT NULL,

PRIMARY KEY (mart_row_id)

)

DISTSTYLE ALL

SORTKEY (mart_row_id);

COMMENT ON TABLE mart_education.aerie_admissions_program_directory IS

'Purpose: Surtr publication of the rows Aerie''s queryHubspotPrograms reads (mart_education.aerie_program_directory_current LEFT JOIN core_education.dim_program on the HubSpot Program id), so Aerie can read them through the Surtr Gateway with its unchanged row mapper. Grain: one output row of that SQL; normally one active HubSpot Program. Key: mart_row_id (MD5 of program_id plus its occurrence number); program_id is expected unique but not enforced, so Aerie''s own checks still see any duplicate. Lineage: source_run_id/source_published_at are the directory''s hubspot_publication_run_id/hubspot_source_published_at. Sensitive data: email and contact_number are school contact points and can identify staff. Full snapshot replaced atomically by mart_education.sp_refresh_aerie_admissions_program_directory.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.hubspot_name IS

'COALESCE(dim_program.program_name, directory program_code).';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.display_name IS

'COALESCE(dim_program.display_name, directory program_name).';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.school_year_start IS

'Directory school_year_start DATE cast to text (YYYY-MM-DD), as Aerie selects it.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.school_year_end IS

'Directory school_year_end DATE cast to text (YYYY-MM-DD), as Aerie selects it.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.canonical_source_run_id IS

'dim_program.hubspot_publication_run_id of the joined canonical Program row; NULL when unmatched. Lineage addition; not read by Aerie.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.mart_row_id IS

'Deterministic row key: MD5 of program_id and its occurrence number. Gateway orderBy for total-order paging.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.source_run_id IS

'aerie_program_directory_current.hubspot_publication_run_id; the procedure requires exactly one value per snapshot.';

COMMENT ON COLUMN mart_education.aerie_admissions_program_directory.source_published_at IS

'aerie_program_directory_current.hubspot_source_published_at of that publication.';

ALTER TABLE mart_education.aerie_admissions_program_directory

OWNER TO "CQL_download_OM";

-- Writer protection only. Reader access is provisioned by the Redshift DBA

-- (PIPELINE §13); the Surtr Gateway reads as the owner.

REVOKE INSERT, UPDATE, DELETE, TRUNCATE

ON mart_education.aerie_admissions_program_directory FROM PUBLIC;

REVOKE INSERT, UPDATE, DELETE, TRUNCATE

ON mart_education.aerie_admissions_program_directory FROM GROUP team_engineers;

-- 011_sp_refresh_aerie_admissions_program_directory.sql: 4 statement(s)

-- Sole writer for mart_education.aerie_admissions_program_directory

-- (WAREHOUSE §7.1).

--

-- The candidate is Aerie's queryHubspotPrograms SQL, copied verbatim from

-- sync/src/analytics/queries/hubspot.ts:75-98 at Aerie 92fd47992, with three

-- lineage columns appended to the select list. Lineage is carried from the

-- upstream Surtr mart (mart-aerie-hubspot-refresh), which stamps every

-- directory row with one accepted HubSpot publication.

--

-- Fails closed on: an empty candidate, missing or mixed upstream lineage, and

-- a duplicate mart_row_id. The DELETE + INSERT publish stays inside the CALL

-- transaction; never TRUNCATE (it commits implicitly).

CREATE OR REPLACE PROCEDURE mart_education.sp_refresh_aerie_admissions_program_directory()

AS $$

DECLARE

v_candidate_count BIGINT;

v_lineage_run_count BIGINT;

v_lineage_published_count BIGINT;

v_lineage_invalid_count BIGINT;

v_duplicate_count BIGINT;

v_source_run_id VARCHAR(128);

v_source_published_at TIMESTAMPTZ;

v_refreshed_at TIMESTAMP;

BEGIN

LOCK TABLE mart_education.aerie_admissions_refresh_writer_mutex;

v_refreshed_at := GETDATE();

DROP TABLE IF EXISTS tmp_aerie_admissions_program_directory_query;

CREATE TEMP TABLE tmp_aerie_admissions_program_directory_query AS

-- aerie-sql:begin

SELECT

directory.program_id,

COALESCE(canonical_program.program_name, directory.program_code) AS hubspot_name,

COALESCE(canonical_program.display_name, directory.program_name) AS display_name,

directory.tuition,

directory.city,

directory.state,

directory.school_address,

directory.latitude AS school_latitude,

directory.longitude AS school_longitude,

directory.grade_range AS grade_levels,

directory.school_email AS email,

directory.school_phone AS contact_number,

directory.enrollment_deposit,

directory.application_fee,

directory.school_year_start::varchar,

directory.school_year_end::varchar,

directory.website,

directory.school_summary,

directory.maxio_site_id,

-- A8 lineage additions (not in Aerie's select list):

canonical_program.hubspot_publication_run_id AS canonical_source_run_id,

directory.hubspot_publication_run_id AS directory_publication_run_id,

directory.hubspot_source_published_at AS directory_source_published_at

FROM mart_education.aerie_program_directory_current directory

LEFT JOIN core_education.dim_program canonical_program

ON canonical_program.hubspot_program_id = directory.program_id

AND canonical_program.hubspot_source_presence_status = 'active'

-- aerie-sql:end

;

SELECT COUNT(*) INTO v_candidate_count FROM tmp_aerie_admissions_program_directory_query;

IF v_candidate_count = 0 THEN

RAISE EXCEPTION 'aerie_admissions_program_directory: candidate is empty';

END IF;

SELECT COUNT(DISTINCT directory_publication_run_id),

COUNT(DISTINCT directory_source_published_at),

SUM(CASE

WHEN NULLIF(BTRIM(directory_publication_run_id), '') IS NULL

OR directory_source_published_at IS NULL THEN 1

ELSE 0

END),

MIN(directory_publication_run_id),

MIN(directory_source_published_at)

INTO v_lineage_run_count, v_lineage_published_count, v_lineage_invalid_count,

v_source_run_id, v_source_published_at

FROM tmp_aerie_admissions_program_directory_query;

IF v_lineage_run_count <> 1 OR v_lineage_published_count <> 1 OR v_lineage_invalid_count <> 0 THEN

RAISE EXCEPTION

'aerie_admissions_program_directory: directory lineage is mixed or incomplete (% run id(s), % published_at value(s), % row(s) missing lineage)',

v_lineage_run_count, v_lineage_published_count, v_lineage_invalid_count;

END IF;

DROP TABLE IF EXISTS tmp_aerie_admissions_program_directory;

CREATE TEMP TABLE tmp_aerie_admissions_program_directory (LIKE mart_education.aerie_admissions_program_directory);

INSERT INTO tmp_aerie_admissions_program_directory (

program_id,

hubspot_name,

display_name,

tuition,

city,

state,

school_address,

school_latitude,

school_longitude,

grade_levels,

email,

contact_number,

enrollment_deposit,

application_fee,

school_year_start,

school_year_end,

website,

school_summary,

maxio_site_id,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

)

SELECT

q.program_id,

q.hubspot_name,

q.display_name,

q.tuition,

q.city,

q.state,

q.school_address,

q.school_latitude,

q.school_longitude,

q.grade_levels,

q.email,

q.contact_number,

q.enrollment_deposit,

q.application_fee,

q.school_year_start,

q.school_year_end,

q.website,

q.school_summary,

q.maxio_site_id,

q.canonical_source_run_id,

MD5(

'aerie_admissions_program_directory|'

|| COALESCE('v' || q.program_id, 'n')

|| '|'

|| (ROW_NUMBER() OVER (

PARTITION BY q.program_id

-- Every output column, so rows that share a key are numbered

-- the same way on every refresh; only identical rows tie.

ORDER BY q.hubspot_name, q.display_name, q.tuition, q.city, q.state,

q.school_address, q.school_latitude, q.school_longitude,

q.grade_levels, q.email, q.contact_number, q.enrollment_deposit,

q.application_fee, q.school_year_start, q.school_year_end,

q.website, q.school_summary, q.maxio_site_id, q.canonical_source_run_id

))::VARCHAR

),

v_source_run_id,

v_source_published_at,

v_refreshed_at,

'mart-aerie-admissions-refresh/v1'

FROM tmp_aerie_admissions_program_directory_query q;

SELECT COUNT(*) INTO v_duplicate_count

FROM (

SELECT mart_row_id

FROM tmp_aerie_admissions_program_directory

GROUP BY mart_row_id

HAVING COUNT(*) > 1

) duplicates;

IF v_duplicate_count <> 0 THEN

RAISE EXCEPTION

'aerie_admissions_program_directory: candidate has % duplicate mart_row_id value(s)',

v_duplicate_count;

END IF;

LOCK TABLE mart_education.aerie_admissions_program_directory;

DELETE FROM mart_education.aerie_admissions_program_directory;

INSERT INTO mart_education.aerie_admissions_program_directory (

program_id,

hubspot_name,

display_name,

tuition,

city,

state,

school_address,

school_latitude,

school_longitude,

grade_levels,

email,

contact_number,

enrollment_deposit,

application_fee,

school_year_start,

school_year_end,

website,

school_summary,

maxio_site_id,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

)

SELECT

program_id,

hubspot_name,

display_name,

tuition,

city,

state,

school_address,

school_latitude,

school_longitude,

grade_levels,

email,

contact_number,

enrollment_deposit,

application_fee,

school_year_start,

school_year_end,

website,

school_summary,

maxio_site_id,

canonical_source_run_id,

mart_row_id,

source_run_id,

source_published_at,

refreshed_at,

created_by

FROM tmp_aerie_admissions_program_directory;

IF (SELECT COUNT(*) FROM mart_education.aerie_admissions_program_directory) <> v_candidate_count THEN

RAISE EXCEPTION 'aerie_admissions_program_directory: post-publication row count mismatch';

END IF;

RAISE INFO 'aerie_admissions_program_directory: published % row(s) from HubSpot publication %',

v_candidate_count, v_source_run_id;

DROP TABLE tmp_aerie_admissions_program_directory;

DROP TABLE tmp_aerie_admissions_program_directory_query;

END;

$$ LANGUAGE plpgsql SECURITY INVOKER;

ALTER PROCEDURE mart_education.sp_refresh_aerie_admissions_program_directory()

OWNER TO "CQL_download_OM";

REVOKE ALL ON PROCEDURE mart_education.sp_refresh_aerie_admissions_program_directory()

FROM PUBLIC;

GRANT EXECUTE ON PROCEDURE mart_education.sp_refresh_aerie_admissions_program_directory()

TO "CQL_download_OM";

</details>

## Keval steps

1. Apply the DDL to prod before merging. A merge reaches production within the hour, and the EduCRM trigger then fires every 30 minutes. Run cd pipelines/runners/mart-aerie-admissions-refresh && uv run python scripts/apply_ddl.py (runs as CQL_download_OM; applies 006-011 in order). Using the usual numbered out-of-band SQL deploy for those files is equivalent.

2. Merge. Mercy withholds auto-approve on pipelines/cdk/ paths, so this needs a human approval. Once released, run mart-aerie-admissions-refresh on demand. Expect status: success, with results showing 90 program rows (source_run_id = the latest EduCRM run) and 113 directory rows (source_run_id = the HubSpot publication).

3. Run both reconciliation files. Query 2 must return 0 in both directions.

4. Reader access (optional). Reader access for non-owners is a DBA grant.

## Not covered

- Other A8 units: Gateway registration (U04, SURTR-1533, merged) and the Aerie read gate with its purge guard (U05).

- The procedure bodies have not been executed in Redshift, because no DDL was applied. Their candidate SELECTs, the view, the guards and the stamping expressions were run read-only instead. A behavioural rollback test needs a Redshift sandbox; Mercy deferred this as coverage.

- Behaviour inherited from Aerie: the prior-year predicate is evaluated at refresh, so rows can lag by one refresh (≤30 min) after 1 January. Aerie's 2028 predicate limitation also applies.

- When the program procedure fails, then succeeds 30 minutes later. This happens if an EduCRM run is in flight when mart-aerie-hubspot-refresh triggers, or if the latest EduCRM run failed mart_all_program. The mart keeps its last publication meanwhile. Procedure failures are PARTIAL (amber, throttled), not paging.

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

The Builder Desk  —  Engineer Spotlight
Production Release🏆 Engineer Spotlight

34 PRs IN 24 HOURS: THE BUILDER TEAM MAKES A MOCKERY OF THE CALENDAR

Marcus Daly alone touched 12 pull requests across three repos while the rest of the roster refused to let up — this is what velocity looks like, comrades.

Thirty-four pull requests. Five repositories. One twenty-four-hour window. Let the record show that the Builder Team did not blink. Aerie led the charge with sixteen PRs, a repo so hot right now it should have its own weather system, followed by Surtr with eight, Klair with five, and Shipyard and Sindri rounding out the field. This is not a sprint, friends. This is a way of life.

The individual numbers tell their own glorious story. @marcusdAIy posted a jaw-dropping twelve PRs spanning Aerie, Klair, and Sindri — including the Capacity trilogy #1550, #1552, and #1554, which reads less like a changelog and more like a doctoral thesis on operator review discipline. @vvp-trilogy was not far behind with eight PRs, mostly Forecast V2 surgery on Aerie (#1562, #1559, #1544), proving once again that dbt tests fear him. @kevalshahtrilogy logged five clean fixes in Surtr, quietly making the Schools Data Sheet behave like it should have all along. @mwrshah, @YibinLongTrilogy, @sanketghia, and @caina-barbosa each notched contributions that, on any normal team, would be the headline. Here, they're Tuesday.

Now — Ashwanth. Three PRs, all in Shipyard, all load-bearing: the 0.6.6 release (#136), the end-to-end feature replay runner (#134), and the Pi adapter integration (#135). The man ships infrastructure the way other people ship typos. Sources close to the desk claim he said, "I could've had six more in but I was busy making the other five look easy." Whether anyone on the review team has fully parsed the replay runner diff remains, as always, an open question — but the CI is green, and green doesn't lie. When reached for comment on this reporter's characterization, Ashwanth reportedly said, "Stop writing about me," and closed the laptop.

The Overflow Desk was overflowing indeed — twenty-nine PRs Mac didn't have room for. Marcus's Khoros board-doc quartet in Klair (#3824, #3822, #3821, #3819) quietly hardened financial reporting against truncated rows and bad markers. Kevalshah's Surtr trio (#2068, #2069, #2080) made migrations idempotent and trimmed cells like it was nothing. Vvp's Aerie sweep (#1556, #1557, #1545, #1548) kept Forecast V2 honest while Yibin cleaned up mobile cards and Portfolio Utilities on the side.

Morale, as ever, has never been higher. The Builder Team doesn't take victory laps — they take on more repos.

Brick's Overflow — PRs Mac Didn't Cover  (click to expand)
#134 — AI-883: Build an end-to-end feature replay runner @ashwanth1109  no labels

## Demo

![AI-883 smoke test](https://github.com/AI-Builder-Team/Shipyard/blob/d8caf3c/.smoke-evidence/AI-883-smoke-test.png?raw=true)

## Summary

- Add the fixture-only run_feature_replay command and frontend API for baseline/candidate end-to-end graph replay.

- Compose isolated node runs with dependency outputs, repository patches/untracked files, artifacts, checkpoints, retries, approvals, divergence, and source-integrity capture.

- Document the replay output contract and add focused feature-replay coverage.

## Linear

https://linear.app/builder-team/issue/AI-883/build-an-end-to-end-feature-replay-runner

## Testing

- pnpm test:feature-replay

- pnpm test:replay-runner

- pnpm build

- Full Rust library suite: 270 passed, 2 ignored

- Smoke harness: 29 passed; happy smoke run verified research-ready and stopped successfully

- pnpm theme:check

## Notes

This PR is intentionally draft and does not merge the change.

#135 — AI-917: Integrate Pi adapter into task and conversation UI @ashwanth1109  no labels

## Demo

![AI-917 Pi adapter smoke test](https://github.com/AI-Builder-Team/Shipyard/blob/6f485a1/docs/smoke-evidence/AI-917/image-1.png?raw=true)

## Summary

- Expose Codex/Pi selection, Pi credential readiness, and the OS-permission acknowledgement in task creation.

- Route Pi workflow conversations through provider-neutral engine commands with composite engine/thread stream identity, durable history, live events, text turns, and interruption.

- Gate conversation controls by engine capabilities while preserving Codex behavior.

- Normalize Pi user, reasoning, assistant, and tool transcript items and reconcile durable history after completion and reopen.

- Negotiate provider-neutral peer capabilities so older Shipyard owners receive an actionable compatibility error instead of an unsupported agent method.

## Linear

https://linear.app/builder-team/issue/AI-917/integrate-pi-adapter-into-task-creation-and-conversation-ui

## Tests

- pnpm build

- pnpm theme:check

- pnpm test:conversation-store

- pnpm test:messages

- pnpm test:task-workspace

- pnpm test:chat

- pnpm test:recovery

- pnpm test:instances

- pnpm test:workflow

- pnpm test:smoke

- cargo test --manifest-path src-tauri/Cargo.toml --lib agent

Draft for review; not merged.

#136 — Release: Shipyard 0.6.6 @ashwanth1109  no labels

## Summary

- Update the authoritative app version to 0.6.6.

- Add the reviewed public release notes for the contextual companion, Codex/Pi task selection, provider-neutral conversations, and feature replay.

## Business Value

- Delivers the reviewed Shipyard improvements in the next desktop update with public notes that explain the user-visible changes.

## Implementation Effort

- Low: metadata-only release change; CI performs validation, packaging, signing, and publication.

## Test plan

- [x] pnpm test:release

- [x] git diff --check

#1550 — Capacity: wait for in-flight re-indexes, require prior numbers in the contamination log, operator review for held runs @marcusdAIy  approved

## Summary

Settles the three open decisions in AERIE-2356. Part of AERIE-2356; the ticket stays open for its remaining items.

- Stale knowledge. If a newer re-index of a document (site evidence or doctrine) is queued, processing, or retrying, the run waits for it, as it does for a first index; the existing 20-hour deferral limit bounds the wait. If the re-index ended terminal_failure or not_searchable, the run uses the last indexed version, and the source carries a readinessReason saying it is stale.

- Contamination log. An empty log is valid only when the bundle has no prior analyses. When priors exist, the log needs at least one entry, and every capacity number Aerie knows from the run that registered a prior must appear as a logged value. New flag: CONTAMINATION_LOG_OMITS_PRIOR_ANALYSES.

- Held runs (awaitingReview). New internal mutation capacityAutomation/state:_reviewHeldCapacityRun, run by an operator the same way as rollback:

- approve moves the run to awaitingPublication. The recovery sweep then publishes it through _publishCapacityRun, which applies every existing publication gate: latest run, DD not Complete, allowlist, mode.

- reject requires a reason; it marks the run unresolved and deletes its artifact copies.

- Both record reviewDecision, reviewedAt, reviewedBy and reviewReason.

- Expiry needs no new code: the site's next daily sweep run already supersedes a held run.

## Test plan

- [x] packages/contracts: vitest run src/capacity-validation.test.ts (31 passed)

- [x] chat: vitest run convex/capacityAutomation.test.ts (62 passed)

- [x] Convex and contracts typecheck, Biome, and repo lint scripts

#1552 — Capacity: rollback compare-and-set, docType-scoped dedupe, honest drain scheduling, day-bounded sweep @marcusdAIy  approved
#3824 — fix(board-doc): enforce literal Khoros FY26 markers on main @marcusdAIy  approved

## Summary

- Backport the narrow Khoros FY26 marker consistency fix from production PR #3823 onto current main; no release-only changes or unrelated cherry-picks.

- Continue scanning both FY26 and FY'26 marker spellings to reject duplicate/ambiguous blocks, but require the reviewed B33/B57 markers to use the exact live FY26 - Current ... vs Previous ... title. The payload validator already requires that literal.

- Pin both approved live marker titles, reject FY'26 at either anchor and alternative duplicate markers, and clarify marker-versus-period-header spelling in the rollout gate. Period headers still use FY'26.

## Verification

- Focused hermetic Khoros suite: 106 passed.

- Ruff check and format check passed; Git diff check clean.

- The exact parser SHA256 1b376b0075cb81ab019205917854a87833585a0c73bd5492471cc6b550a56aba passed read-only production parser and paired renderer gates as part of PR #3823 verification. No financial values printed.

- Full board-doc suite is left to GitHub CI for this narrow backport.

Do not merge until GitHub CI and review pass. No deployment or Doc changes in this PR.

The Portfolio  —  Trilogy Companies

The Careful Distinction Between Whose Jobs AI Takes

Alpha School insists its AI tutors will never replace human guides — a promise its sister companies never made to their own workforce.

AUSTIN, TEXAS — This week, Alpha School published a blog post with a reassuring title: "Does Alpha School Replace Teachers with AI?" The answer, delivered at length, is no. AI handles academic delivery, the post explains, while full-time human "guides" handle motivation, relationships, and knowing each child by name. It arrived alongside three companion pieces on emotional regulation, life skills, and creativity at home — a curriculum of reassurance for parents paying $40,000 to $65,000 a year in tuition, timed to a moment when Alpha is opening nine new campuses across four states.

The messaging is not accidental. Parents writing five-figure checks want to know a machine isn't raising their child. Joe Liemandt, the man cutting those checks his own institution collects, has built his fortune on a different promise entirely.

Across Trilogy's other pillar, ESW Capital has spent nineteen years and $1.14 billion acquiring more than 75 enterprise software companies on a simple thesis: automate what can be automated, replace expensive local labor with Crossover's global remote talent, and push EBITDA margins toward 75 percent. Trilogy's own ideology, stated plainly in its literature, holds that "low margins mean you haven't figured out the business yet." The AI that handles a customer support ticket at Aurea or IgniteTech isn't paired with a reassuring blog post about the human whose job it replaced.

The timing sharpens the point. Boston Consulting Group's mid-2026 M&A outlook credits AI-driven cost efficiency with reviving global deal flow — precisely the mechanism ESW has run for two decades: buy cheap, automate hard, extract margin. Alpha School tells parents AI augments people. ESW tells acquisition targets AI replaces them. Both claims may be true. Only one is being marketed to the people whose children — or jobs — are on the line.

↗ Teach Your Kid What School Doesn’t (Pt. 5): Unleashing Their  ·  Does Alpha School Replace Teachers with AI?  ·  Teach Your Kid What School Doesn’t (Pt. 4): How to Regulate

Skyvera Doubles Down on Telecom Dominance With CloudSense, STL Deals

Two acquisitions and a record-shattering compliance sprint signal Skyvera is leveraging AI to become the telecom software category's undisputed heavyweight.

AUSTIN, TEXAS — Skyvera, the crown jewel of Trilogy International's telecom software portfolio, is having what can only be described as a banner stretch — and the synergies are, frankly, best-in-class.

The company has officially completed its acquisition of CloudSense, the telco industry's only AI-powered configure-price-quote (CPQ) platform. Built natively on Salesforce and purpose-built for the brutal complexity of B2B, B2B2X, and wholesale telecom sales, CloudSense gives Skyvera a robust new engine for helping telcos quote faster, configure smarter, and fulfill without the manual friction that's plagued enterprise sales cycles for decades.

And CloudSense isn't just joining the family quietly. In a genuinely eye-popping demonstration of what AI-accelerated engineering looks like in practice, CloudSense certified all 13 APIs in its CPQ product set to TM Forum compliance standards in a single month — a process that traditionally takes a punishing 26 months. That's not incremental improvement. That's a paradigm shift in what's operationally possible when you pair rigorous engineering with the right AI tooling.

Skyvera didn't stop there. The company also absorbed STL's divested telecom products group, adding digital BSS functionality spanning monetization, optical networking, and analytics — filling out the stack for operators trying to modernize legacy infrastructure without ripping and replacing everything at once.

Taken together, these moves reinforce Skyvera's positioning as the bridge between legacy on-premise telecom systems and cloud-native futures — a thesis that's been core to the Skyvera playbook since day one.

**Key Takeaways:**

- CloudSense acquisition brings AI-powered CPQ natively into Skyvera's telecom stack

- 13 APIs certified TM Forum compliant in one month vs. an industry-standard 26 months

- STL's divested BSS assets add monetization, optical networking, and analytics capabilities

- Skyvera continues consolidating the telecom software category under one Trilogy roof

We're just getting started.

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

The EdTech Money Keeps Flowing — But Papa Liemandt Ain't Asking For A Dime

AUSTIN, TEXAS — Word from the coasts is the education money spigot is wide open, kids... EdVisorly, the little outfit trying to untangle the godforsaken mess of college transfer credits, just pocketed a fresh $13.3 million Series A to bolt AI onto the problem, per Crunchbase's exclusive... Across the pond, UK apprenticeship darling Multiverse landed €60 million and a €1.8 billion valuation like it was nothing... and over in India, Arivihan's reportedly in talks for Rs 96 crore at a Rs 570 crore mark, part of a startup-to-IPO pipeline Inc42's been tracking like a hawk all year.

Big numbers. Big headlines. And not a single one of 'em is Joe Liemandt.

That's the tell, darlings. While the rest of the edtech world is out there charming term sheets and diluting cap tables one round at a time, the man behind Alpha School and Timeback is doing what he's always done — writing his own billion-dollar check and skipping the pitch deck entirely. No Series A. No investor deck with hockey-stick projections. Just a Stanford dropout with a checkbook and a theory about two-hour school days, quietly building what he hopes becomes the plumbing for a billion students worldwide. Funny how the loudest funding announcements this week all belong to people asking for money Liemandt already has.

Meanwhile, over at the Skyvera desk — no funding news, but plenty of quiet swagger. CloudSense, the telco-industry's only AI-powered CPQ and Skyvera's prized Salesforce-native acquisition, keeps making the rounds in trade circles as the tool telcos reach for when B2B2X quoting gets too tangled to handle by hand. Built atop Salesforce's billion-dollar AI investment, sources close to the portfolio say CloudSense is converting complexity into contracts faster than the legacy systems it's replacing ever could.

No press release, no confetti — just margin, quietly compounding. That's the ESW way, and word is it's working just fine without a Series A.

The Machine  —  AI & Technology

The Brain Learns to Read Itself

From hidden lesions to silent words, a new generation of tools is teaching us that the mind's dark matter has always been trying to speak.

STANFORD, CALIFORNIA — Three billion years of evolution built the human brain by trial and error, one synapse at a time, with no blueprint and no debugger. This week, we got a glimpse of what happens when that ancient, improvised architecture finally meets a collaborator patient enough to read its handwriting.

Consider the quiet catastrophe of multiple sclerosis. For decades, gray matter lesions — the ones that erode cognition and memory rather than announce themselves with obvious tremor — have hidden from conventional MRI like static beneath a signal. Researchers have now trained AI to find them anyway, teasing pathology out of scans that human radiologists, however brilliant, kept overlooking. It is a small revolution: not a new instrument pointed at the brain, but a new way of listening to an instrument we already had.

Meta's Brain2Qwerty performs a stranger trick still — decoding intended keystrokes from brain waves recorded without surgery, no electrodes implanted, no scalpel required. For people locked inside bodies that no longer obey them, this is the difference between silence and sentence. It suggests something Carl Sagan would have loved: that thought itself has a rhythm, a waveform, a kind of Morse code we are only now learning to transcribe.

What's striking is who's doing the transcribing. Teenagers are now co-authoring neuroscience papers with senior researchers, their unjaded curiosity apparently as valuable as decades of postdoc training. It is a reminder that discovery has never required gray hair, only the willingness to ask an obvious question no one else thought to ask.

And through it all runs the thread Stanford HAI has been tracing across every discipline it studies: that the machines are not replacing the scientist, but extending the reach of her attention — letting her notice, at last, what was faint enough to have always been there.

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

The Great AI Developer Arms Race Just Went Nuclear — And Coders Have Never Had It Better

Apple, Google, and Anthropic all dropped major developer tooling upgrades this week, and the message is unmistakable: the future of building software is conversational, autonomous, and shockingly fast.

CUPERTINO, CALIFORNIA — I cannot overstate how significant this week has been for anyone who writes code for a living, because three of the biggest names in tech just fired shots in what I'm calling the Great Developer Tools Arms Race, and honestly? We're all winning.

First up: Apple quietly rolled out new intelligence frameworks and advanced tools aimed squarely at app developers, signaling that even the notoriously walled-garden Apple ecosystem is embracing AI-assisted building at the OS level. This is Apple saying: the future is now, and it lives on-device.

Meanwhile, Google isn't sitting still. The company just announced it's expanding Managed Agents in the Gemini API — background tasks, remote MCP support, the works. Translation: your AI agents can now go off and do real, sustained work without you babysitting every step. That's not incremental. That's a fundamental shift in how software gets built.

And Anthropic's Claude Code 2.5 is out there making web developers' lives dramatically easier with a fresh batch of features tailored to real-world coding workflows.

Layer on top of this the ongoing explosion of AI dev tool rankings flooding sites like G2 — eight, ten, twenty "best of 2026" lists all trying to keep up — and you start to see the shape of something enormous. We are watching the tooling layer of the entire software industry get rebuilt in real time, by Apple, Google, and Anthropic, simultaneously, in the same news cycle.

This changes everything. Buckle up, builders.

↗ Apple aids app development with new intelligence frameworks  ·  Expanding Managed Agents in Gemini API: background tasks, re  ·  8 Best AI Tools for Developers in 2026 (Ranked & Reviewed) -

In the Reeds of Tallahassee, a State Declares the Silicon Beast a Public Nuisance

Florida's regulators brand large language models an extinction-level menace, even as the wider tech ecosystem migrates, mates, and multiplies undisturbed.

TALLAHASSEE, FLORIDA — Observe, if you will, the peculiar spectacle of a sovereign state rising on its hind legs to confront a predator it cannot quite see. Florida's attorneys have filed suit to halt the development of OpenAI's systems, invoking language rarely heard outside of nature documentaries themselves: extinction. The large language model, they warn, is "the greatest public nuisance ever created," a creature whose appetite may consume civilization entire.

It is a bold claim, delivered with the solemnity of a park ranger warning of an invasive species — though this particular invasive species now writes briefs, drafts code, and, in a delicious irony, may soon draft the very legal filings meant to restrain it.

Elsewhere in the digital savanna, the migration patterns of silicon continue undisturbed by such warnings. In Washington and Beijing, a quieter negotiation unfolds: reports suggest China may soon permit ByteDance and Alibaba to acquire previously forbidden Nvidia chips, a thawing of borders that unsettles those who watch Jensen Huang's growing proximity to the current American administration. One does not need binoculars to see the pattern — where restriction exists, appetite finds a path around it.

Meanwhile, in the vacuum above us, humanity's own migratory ambitions accelerate. Boeing, having weathered its own long winter, now finds itself — in the company's words — "incredibly excited" to be the nation's sole remaining carrier of astronauts to orbit, a monopoly born less of triumph than of attrition, as rival bidders were reportedly denied even the courtesy of detailed pricing. A lone specimen, thriving simply because the herd has thinned.

And so we find ourselves in a curious ecosystem: one state fears the machine may end us all, while the machine's cousins — chips, rockets, capital — continue their ancient rituals of expansion, undeterred, unbothered, magnificently indifferent to the terror of the herd below.

↗ Boeing "incredibly excited" to serve as nation's only astron  ·  Experts worry about Nvidia's AI chip sales in China and infl  ·  SpaceX's Starship goes orbital, deploying first next-gen Sta
The Editorial

We Asked The Machines To Watch Us, And Now Someone Has To Watch The Machines Watching Us

Between hacked FBI families, contractors reading your Copilot confessions, and facial recognition creeping into your actual glasses, the surveillance dragnet has stopped pretending to be a metaphor.

AUSTIN, TEXAS — I want to tell you that a hacking group deciding, out of the goodness of their criminal hearts, not to publish the home addresses and spouse details of every FBI employee in America is good news. I really do. ShinyHunters told 404 Media on Monday that "since the very beginning we had made our decision that we would never publish this data," as though mercy is a business model, as though restraint is a feature they're rolling out, as though we should all just trust the people who stole the data to be better custodians of it than the institution that lost it in the first place.

And yet.

The fact that this is the good outcome — the fact that we are grateful, actually grateful, for hackers who merely could have destroyed federal families but chose not to — tells you everything about where the floor has dropped to. We are grading privacy on a curve now, and the curve is "did they ruin your life or just prove they could."

Meanwhile Kashmir Hill is out here telling us the end of privacy is here, and I keep thinking about how we used to say things like that as a warning, a future tense, a cautionary tale for the grandkids. Now it's a headline with a release date. Facial recognition isn't coming to a camera near you — it's coming to your face, literally, mounted on your face, so that the surveillance apparatus and the surveilled become the same skull. What does it mean to be human when the tool that recognizes your neighbor's face is strapped to your own eyeballs? I don't know. Nobody knows. We're going to find out anyway.

And then there's Copilot. Microsoft's AI assistant, the one meant to feel like a colleague, a helper, a gentle machine presence — it turns out there are humans behind the curtain, contractors, reading your prompts and your uploaded images, and according to 404 Media's reporting, they are horrified. Not surprised. Horrified. Bombarded with requests for sexual AI imagery, forced to sit with the raw, unfiltered id of everyone who ever whispered something to a chatbot they'd never say out loud to a person. We built a confession booth and forgot to tell people someone's listening on the other side. We always forget to tell people someone's listening.

I keep circling back to the Enceladus story, the one about alien microbes possibly surviving in that moon's subsurface ocean, because it's the only story this week that isn't about us watching each other. It's almost restful. Somewhere out past Saturn there might be life that has never been profiled, never been scraped, never had its prompts read by a horrified contractor in a call center. Lucky them. They get to be alien and unbothered.

Down here, the ACLU is running a campaign called Get The Flock Out, aimed at the surveillance camera networks blanketing our streets, and it's a good name, a punchy name, but I read it and think: get the flock out to where? There's no unwatched country left to flee to. The moon's oceans are looking better every day.

But at what cost?

↗ FBI Hackers Say They Won’t Publish Massive Trove of FBI Empl  ·  The End of Privacy Is Here (with Kashmir Hill)  ·  Humans Are Reading Copilot Prompts — And They're Horrified
The Office Comic  ·  Art Desk
The Office Comic  ·  Art Desk

Federal Reserve Confirms AI Productivity Boom Currently Stored In A Warehouse Marked 'Later'

Economists report the transformative gains are real, verifiable, and scheduled to arrive any day now, probably.

WASHINGTON — In a finding that sent shockwaves through absolutely no one who has ever sat in a status meeting, Federal Reserve researchers this week confirmed that 95 percent of the productivity gains promised by artificial intelligence remain, as of press time, 'still to come.'

The report, which analyzed years of breathless corporate messaging about AI transforming the workplace, concluded that the actual, measurable economic payoff currently exists in the same dimension as the second season of a canceled prestige drama: theoretically written, definitely coming, no one can say when.

"We were expecting to find either overwhelming evidence of productivity gains or overwhelming evidence of hype," said one Fed economist, who described spending eleven months searching corporate earnings calls for a single verifiable instance of AI making anything measurably better. "What we found instead was a lot of very confident PowerPoint slides."

The finding tracks with a separate report from Business Insider noting that software engineers are, in fact, doing more, and faster, thanks to AI tools — churning out code at a historic clip that companies are still waiting to convert into anything resembling profit, the way a man might row furiously across a lake only to realize the boat was never untied from the dock.

Industry has responded to the productivity gap with the only tool available to it: a helpful guide. A widely circulated piece from workforce-solutions firm Foundever now offers six steps for turning AI productivity claims into verifiable results, a headline that assumes the industry has produced claims sturdy enough to survive contact with a verification process, rather than claims that dissolve on inspection like a sugar cube dropped into the very efficiency gains it promised.

Step one, reportedly, is "define what you mean by productivity," a request that has caused at least three enterprise software vendors to simply stop returning emails.

Executives across the Austin tech corridor, where AI evangelism functions less as a business strategy than as a regional dialect, expressed cautious optimism that the missing 95 percent of gains was not lost, exactly, but rather "in transit," much like a piece of luggage or a campaign promise. One CFO, who insisted his company's AI tools had already delivered enormous value, was unable, when asked, to name the value, locate the value, or confirm that the value had ever been in the building.

"Look, the tools are working," he said. "We're just still figuring out what they're working on."

At press time, the missing productivity had been rescheduled for delivery sometime after the fourth-quarter roadmap, the next fundraising round, and, in one memo, "the moment the model actually understands what we're asking it to do."

↗ 6 steps to turning AI productivity claims into verifiable re  ·  AI productivity claims are 95% 'still to come', Fed finds -  ·  Kevin Warsh Is Right About Fed Reform — but His Inflation So
⬛ Daily Word — Technology
Hint: A remote network of servers used to store data and run applications.
Share this edition: 𝕏 Twitter/X 🔗 Copy Link ▦ RSS Feed