Skip to content

chore: Upgrade the factory eve agent to 0.39.3 - #13783

Merged
anthonyshew merged 1 commit into
mainfrom
upgrade-eve-agents
Aug 20, 2026
Merged

anthonyshew merged 1 commit into
mainfrom
upgrade-eve-agents

Conversation

@anthonyshew

Copy link
Copy Markdown
Contributor

Why

The eve upgrade mandate requires every agent to run 0.39.1 or later. apps/factory — the only eve agent in this repository — was pinned to ^0.22.5. This takes it to ^0.39.3 (current latest) and migrates the authored agent across the breaking changes in between.

Migration

eve release Breaking change What changed here
0.33.0 defineDynamic accepts only events; a dynamic model has no compiled default and a throwing resolver fails the turn agent/agent.ts drops fallback and the resolver returns a concrete model, absorbing the unparseable-session-id case that fallback used to cover
0.31.0 Continuation-token session APIs replaced with ID-addressed handles; custom channel routes use from(address) / attachSession(sessionId) agent/channels/operator.ts starts runs via from(randomUUID()).send(message, options) and reads run status via attachSession(sessionId).getEventStream(...)
session.started no longer carries runtime.modelId, since a dynamic model resolves only once a step begins agent/lib/control-plane-hook.ts records the model from the first step.started of each turn; recordAgentRunModel writes only when the model changed, so the ledger is not rewritten per model call

Nothing else in the app touched a removed API: schedules still use defineSchedule({ cron, markdown }), the approval function shorthand and "not-applicable" / "user-approval" statuses are unchanged, defineSandbox is unaffected by the custom-backend stop() requirement, vercel.json carries no legacy experimentalServices block, and the operator UI does not use the frontend bindings whose stop() became cancel().

Config change worth a look

eve is added to minimumReleaseAgeExclude in pnpm-workspace.yaml. The workspace gate is 48 hours and every 0.39.x release is younger than that, so without the exclusion resolution fails outright:

ERR_PNPM_NO_MATURE_MATCHING_VERSION  Version 0.39.3 (released 3 hours ago) of eve
does not meet the minimumReleaseAge constraint

There is no compliant version that satisfies the mandate, so the gate and the mandate cannot both hold. This follows the existing precedent for first-party packages (next, @next/*, @vercel/geistdocs) and is scoped to eve alone.

Note that this is not the release-age rule the factory agent is bound by: agent/instructions.md and agent/skills/examples_maintenance.md forbid exclusions when upgrading examples, and that guardrail is enforced in create_pull_request only for paths under examples/. This change is outside it and does not weaken it. Happy to drop the exclusion in a follow-up once 0.39.1 clears 48 hours (2026-08-21 04:30 UTC) if you would rather not carry it.

Behavior change to be aware of

eve 0.33.0 made turnPolicy: "steer" the channel default, so a follow-up Slack or GitHub message now cancels and replaces an active turn instead of queueing behind it. Adopted as-is: the automated paths are unaffected because scheduled runs and operator runs each get their own session, and steering is the better interactive behavior. Set turnPolicy: "queue" on those channels if the old wait-for-completion behavior is preferred.

Validation

  • pnpm install --frozen-lockfile — lockfile consistent with the manifests
  • tsc --noEmit -p apps/factory/tsconfig.json — clean
  • eve info — compile ready, 0 errors / 0 warnings, 16 tools, 2 subagents, 2 schedules, 2 skills discovered
  • pnpm test — 24/24 passing
  • pnpm build (eve build && next build) — succeeds
  • oxlint --deny-warnings, oxfmt --check — clean; pre-push hooks passed without --no-verify

🤖 Generated with Claude Code

The eve upgrade mandate requires every agent to run 0.39.1 or later. The
factory app was on 0.22.5, so this takes it to the current release, 0.39.3,
and migrates the authored agent across the breaking changes in between.

- `defineDynamic` no longer accepts `fallback` (0.33.0). The model resolver
  now returns a concrete selection and covers the unparseable-session-id
  case itself, which is what `fallback` used to absorb.
- Custom channel routes replaced continuation-token operations with
  ID-addressed handles (0.31.0). The operator channel starts runs through
  `from(address).send(message, options)` and reads status through
  `attachSession(sessionId)`.
- `session.started` no longer carries `runtime.modelId`, because a dynamic
  model resolves only once a step begins. The control-plane ledger now
  records the model from the first `step.started` of each turn and writes
  only when it changes.

`eve` is excluded from the workspace `minimumReleaseAge` gate: every 0.39.x
release is younger than the configured 48 hours, so resolution fails without
it. The gate still applies to examples maintenance, which owns a separate,
narrower rule against release-age exclusions under `examples/`.

Validated with `pnpm install --frozen-lockfile`, `tsc --noEmit`, `pnpm test`
(24 passing), `pnpm build` (`eve build && next build`), `oxlint
--deny-warnings`, and `oxfmt --check`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Co-Authored-By: Anthony Shew <35677084+anthonyshew@users.noreply.github.com>
@anthonyshew
anthonyshew requested review from a team and tknickman August 20, 2026 02:41
@vercel

vercel Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview Aug 20, 2026 2:42am
examples-designsystem-docs Ready Ready Preview Aug 20, 2026 2:42am
examples-gatsby-web Ready Ready Preview Aug 20, 2026 2:42am
examples-kitchensink-blog Ready Ready Preview Aug 20, 2026 2:42am
examples-nonmonorepo Ready Ready Preview Aug 20, 2026 2:42am
examples-svelte-web Ready Ready Preview Aug 20, 2026 2:42am
examples-tailwind-web Ready Ready Preview Aug 20, 2026 2:42am
examples-vite-web Ready Ready Preview Aug 20, 2026 2:42am
turbo-site Ready Ready Preview Aug 20, 2026 2:42am
turborepo-factory Ready Ready Preview Aug 20, 2026 2:42am

@anthonyshew
anthonyshew merged commit c4fc5c8 into main Aug 20, 2026
50 of 53 checks passed
@anthonyshew
anthonyshew deleted the upgrade-eve-agents branch August 20, 2026 03:40
github-actions Bot added a commit that referenced this pull request Aug 25, 2026
## Release v2.10.12

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/32882264217)

### Changes

- chore: Release Turborepo 2.10.11 (#13765) (`1fb1e86`)
- feat: Refresh documentation social cards (#13764) (`510777b`)
- fix: Preserve showcase logo sizes (#13766) (`b03ec9d`)
- fix: Refine mobile homepage interactions (#13767) (`a253dce`)
- fix: Align homepage KPIs to the right (#13769) (`373fbd3`)
- fix: Prevent homepage KPI overflow (#13770) (`fc02d72`)
- chore: Update Geistdocs to 1.20.4 (#13771) (`0689ad9`)
- perf: Skip Unused Workspace Config Stats (#13746) (`5503fde`)
- chore: Update with-solid example (#13752) (`43c555d`)
- chore: Update with-tailwind example (#13762) (`c436362`)
- perf: Stream dry-run JSON output (#13760) (`8138ce0`)
- chore: Update with-ultracite example (#13772) (`37be819`)
- perf: Merge same-prefix tree-wildcard globs into one directory walk
(#13763) (`59d4901`)
- chore: Update with-svelte example (#13118) (`bebcfc8`)
- chore: Add unified agent control plane (#13757) (`695a172`)
- fix: Remove incremental task caching (#13773) (`3d69e42`)
- chore: Rename agents app to factory (#13774) (`0a01c2d`)
- chore: Update oxlint and oxfmt (#13777) (`9088245`)
- feat: Add security.txt endpoint (#13778) (`5f9260b`)
- feat: Redesign factory control plane (#13775) (`ffd06d4`)
- perf: Replace regex captures with hand-written parsers in berry
lockfile identifiers (#13776) (`00e9f66`)
- chore: Upgrade the factory eve agent to 0.39.3 (#13783) (`c4fc5c8`)
- chore: Update with-rsbuild-module-federation example (#13786)
(`45b1257`)
- perf: Index Berry lockfile resolution overrides by dependency name
(#13787) (`e89eddd`)
- chore: Update remote cache action to v1.1.0 (#13789) (`56162b8`)
- docs: Fix reference links and validation (#13784) (`0423d70`)
- feat: Add SSH command affordance for factory sandboxes (#13779)
(`0cfccdd`)
- fix: Show invalid affected task glob (#13793) (`ef1ef92`)
- perf: Skip unused repository indexing for package listings (#13792)
(`acd5ae5`)
- feat: Rebuild the factory image on every merge to main (#13781)
(`1c165b3`)
- chore: Add full-page terminal SSH sessions to Factory sandbox
inventory (#13780) (`d640c2e`)
- chore: Update with-shell-commands example (#13791) (`476e382`)
- chore: Allow SSH terminal for completed-run sandboxes in Factory
(#13782) (`067dfba`)
- fix: Decouple graceful shutdown tests from the shell commands example
(#13799) (`72fac33`)
- feat: Start ad-hoc factory work from the operator page (#13798)
(`b9d13ca`)
- chore: Update with-solid example (#13797) (`d412981`)
- fix: Rebuild factory images without custom workflows (#13801)
(`0c54a80`)
- feat: Add factory navigation (#13802) (`092ee6d`)
- refactor: Migrate Factory styles to Tailwind (#13803) (`7fe373b`)
- feat: Add durable Factory workspaces (#13804) (`ccd79d3`)
- feat: Stream Factory sandbox as terminal (#13807) (`33d8b24`)
- fix: Restore Factory workspace creation (#13812) (`fd72cca`)
- fix: Update Factory session network policy (#13814) (`c579fec`)
- fix: Improve Factory terminal line spacing (#13815) (`a88e39b`)
- fix: Install Factory publishing skill (#13817) (`7b8cb14`)
- chore: Route Factory publishing through Eve (#13816) (`e05b81c`)
- feat: Standardize Factory meta titles to Turborepo suffix (#13819)
(`fd593b5`)
- perf: Skip Factory chat verification (#13820) (`39137a6`)
- fix: Restore Factory workspaces (#13823) (`0afd4b2`)
- docs: Fix inconsistent Yarn command in basic example (#13825)
(`3dd49d1`)
- chore: Update non-monorepo example (#13808) (`d2a673f`)
- perf: Batch package detail queries (#13809) (`331183e`)
- chore: Update basic example (#13824) (`f06836d`)
- fix: Include virtual tasks in affected query (#13805) (`89a9b78`)
- fix: Add workspace approval controls (#13827) (`02dfd21`)
- fix: Prevent chat SSH command overflow (#13828) (`d9eaff5`)
- fix: Update Factory pull request branches (#13831) (`b670754`)
- chore: Add operator chat model selector (#13833) (`bb2fcb3`)
- fix: Move model selector to workspace creation (#13835) (`72805d7`)
- chore: Skip redundant Factory PR approval (#13837) (`bbe5406`)
- chore: Use geistdocs 1.23.1 (#13834) (`3787c06`)
- chore: Handle feedback on Factory pull requests (#13836) (`a76330b`)
- fix: Escape ampersands in RSS feed enclosure URLs (#13839) (`7107f26`)
- chore: Add automatic issue handling (#13840) (`e1674e4`)
- chore: Alert Slack for low-confidence issues (#13841) (`f153cda`)
- feat: Require high confidence for issue fixes (#13842) (`c97782b`)
- fix: Run pnpm directly on Windows (#13843) (`9d2b03b`)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Aug 27, 2026
## Release v2.10.13-canary.1

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/33018929115)

### Changes

- chore: Release Turborepo 2.10.11-canary.4 (#13759) (`9f94a7d`)
- feat: Expand performance agent toolbox (#13761) (`f924510`)
- docs: Redesign Turborepo homepage (#13702) (`09bf969`)
- fix: Tolerate transient input files (#13734) (`3226457`)
- chore: Release Turborepo 2.10.11 (#13765) (`1fb1e86`)
- feat: Refresh documentation social cards (#13764) (`510777b`)
- fix: Preserve showcase logo sizes (#13766) (`b03ec9d`)
- fix: Refine mobile homepage interactions (#13767) (`a253dce`)
- fix: Align homepage KPIs to the right (#13769) (`373fbd3`)
- fix: Prevent homepage KPI overflow (#13770) (`fc02d72`)
- chore: Update Geistdocs to 1.20.4 (#13771) (`0689ad9`)
- perf: Skip Unused Workspace Config Stats (#13746) (`5503fde`)
- chore: Update with-solid example (#13752) (`43c555d`)
- chore: Update with-tailwind example (#13762) (`c436362`)
- perf: Stream dry-run JSON output (#13760) (`8138ce0`)
- chore: Update with-ultracite example (#13772) (`37be819`)
- perf: Merge same-prefix tree-wildcard globs into one directory walk
(#13763) (`59d4901`)
- chore: Update with-svelte example (#13118) (`bebcfc8`)
- chore: Add unified agent control plane (#13757) (`695a172`)
- fix: Remove incremental task caching (#13773) (`3d69e42`)
- chore: Rename agents app to factory (#13774) (`0a01c2d`)
- chore: Update oxlint and oxfmt (#13777) (`9088245`)
- feat: Add security.txt endpoint (#13778) (`5f9260b`)
- feat: Redesign factory control plane (#13775) (`ffd06d4`)
- perf: Replace regex captures with hand-written parsers in berry
lockfile identifiers (#13776) (`00e9f66`)
- chore: Upgrade the factory eve agent to 0.39.3 (#13783) (`c4fc5c8`)
- chore: Update with-rsbuild-module-federation example (#13786)
(`45b1257`)
- perf: Index Berry lockfile resolution overrides by dependency name
(#13787) (`e89eddd`)
- chore: Update remote cache action to v1.1.0 (#13789) (`56162b8`)
- docs: Fix reference links and validation (#13784) (`0423d70`)
- feat: Add SSH command affordance for factory sandboxes (#13779)
(`0cfccdd`)
- fix: Show invalid affected task glob (#13793) (`ef1ef92`)
- perf: Skip unused repository indexing for package listings (#13792)
(`acd5ae5`)
- feat: Rebuild the factory image on every merge to main (#13781)
(`1c165b3`)
- chore: Add full-page terminal SSH sessions to Factory sandbox
inventory (#13780) (`d640c2e`)
- chore: Update with-shell-commands example (#13791) (`476e382`)
- chore: Allow SSH terminal for completed-run sandboxes in Factory
(#13782) (`067dfba`)
- fix: Decouple graceful shutdown tests from the shell commands example
(#13799) (`72fac33`)
- feat: Start ad-hoc factory work from the operator page (#13798)
(`b9d13ca`)
- chore: Update with-solid example (#13797) (`d412981`)
- fix: Rebuild factory images without custom workflows (#13801)
(`0c54a80`)
- feat: Add factory navigation (#13802) (`092ee6d`)
- refactor: Migrate Factory styles to Tailwind (#13803) (`7fe373b`)
- feat: Add durable Factory workspaces (#13804) (`ccd79d3`)
- feat: Stream Factory sandbox as terminal (#13807) (`33d8b24`)
- fix: Restore Factory workspace creation (#13812) (`fd72cca`)
- fix: Update Factory session network policy (#13814) (`c579fec`)
- fix: Improve Factory terminal line spacing (#13815) (`a88e39b`)
- fix: Install Factory publishing skill (#13817) (`7b8cb14`)
- chore: Route Factory publishing through Eve (#13816) (`e05b81c`)
- feat: Standardize Factory meta titles to Turborepo suffix (#13819)
(`fd593b5`)
- perf: Skip Factory chat verification (#13820) (`39137a6`)
- fix: Restore Factory workspaces (#13823) (`0afd4b2`)
- docs: Fix inconsistent Yarn command in basic example (#13825)
(`3dd49d1`)
- chore: Update non-monorepo example (#13808) (`d2a673f`)
- perf: Batch package detail queries (#13809) (`331183e`)
- chore: Update basic example (#13824) (`f06836d`)
- fix: Include virtual tasks in affected query (#13805) (`89a9b78`)
- fix: Add workspace approval controls (#13827) (`02dfd21`)
- fix: Prevent chat SSH command overflow (#13828) (`d9eaff5`)
- fix: Update Factory pull request branches (#13831) (`b670754`)
- chore: Add operator chat model selector (#13833) (`bb2fcb3`)
- fix: Move model selector to workspace creation (#13835) (`72805d7`)
- chore: Skip redundant Factory PR approval (#13837) (`bbe5406`)
- chore: Use geistdocs 1.23.1 (#13834) (`3787c06`)
- chore: Handle feedback on Factory pull requests (#13836) (`a76330b`)
- fix: Escape ampersands in RSS feed enclosure URLs (#13839) (`7107f26`)
- chore: Add automatic issue handling (#13840) (`e1674e4`)
- chore: Alert Slack for low-confidence issues (#13841) (`f153cda`)
- feat: Require high confidence for issue fixes (#13842) (`c97782b`)
- fix: Run pnpm directly on Windows (#13843) (`9d2b03b`)
- chore: Release Turborepo 2.10.12 (#13844) (`32748f5`)
- fix: Remove unsupported remote cache environment variable (#13845)
(`b4c2eed`)
- fix: Copy TUI selections locally over SSH (#13847) (`03df632`)
- feat: Use uv workspace metadata (#13848) (`fa1ca7d`)
- feat: Support Python virtual environments (#13849) (`7f66dbd`)
- fix: Scope uv lockfile affectedness (#13850) (`1e074f3`)
- test: Isolate uv prune configuration (#13851) (`9f2fd33`)
- fix: Explain disabled uv task caching (#13852) (`0f59d11`)
- fix: Explain uv identity probe failures (#13853) (`eabe73a`)
- fix: Explain uncached Cargo library builds (#13855) (`35ce2fa`)
- fix: Explain disabled Cargo task caching (#13854) (`39821f6`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant