Skip to content

Upgrade Atomic to the stable 0.9.42 release - #726

Merged
lavaman131 merged 1 commit into
mainfrom
atomic-0.9.42
Oct 23, 2026
Merged

lavaman131 merged 1 commit into
mainfrom
atomic-0.9.42

Conversation

@lavaman131

Copy link
Copy Markdown
Collaborator

Upgrades the Atomic harness from the 0.9.41-alpha.1 pre-release to the stable 0.9.42 release.

What changed

  • catalog:harness pins @bastani/atomic 0.9.42. bun.lock now resolves @bastani/atomic, @bastani/atomic-natives (and all eight platform packages), and @bastani/pi-ai at 0.9.42, with no older @bastani/* entries left. Atomic's own @earendil-works/pi-* packages move from 1.3.0 to 1.4.0 with it, and pi-tui adds marked-cjk-friendly.

  • No adapter code change. Nothing from 0.9.41-alpha.2 through 0.9.42 breaks apps/server/src/harness/atomic/*. The steer()/followUp() breaking change and waitForSettled() were already handled in Upgrade Atomic to the 0.9.41-alpha.1 pre-release #720, and that coverage still passes.

  • Shared provider rate limits (new in 0.9.42): after one request gets a 429, every Atomic session in the Chopin server waits for that provider's cooldown before its next request. That includes Planner turns, summary workers, and research workers. Before 0.9.42, each session hit the limit on its own. I checked this with real Atomic sessions against a stub provider that returns 429 with Retry-After: 3:

    • On 0.9.42, a second session's request waited until the cooldown ended.
    • On 0.9.41-alpha.1, the second session's request went out immediately.
    • Aborting a turn while it waits ends it without sending the request.

    docs/self-hosting.md now lists this as an Atomic caveat. Chopin sets no configureProviderRequestBudget() and passes no resourceAdmission, because both are optional.

  • Storage adapters by package name (new in 0.9.42): the shared top-level storage setting can now name an adapter package, which is what atomic storage join writes for libSQL. A Planner session's explicit journal still takes precedence, so its workflow runs stay in Chopin's journal. A new test in atomic/full.test.ts runs a real workflow with that setting pointing at an adapter that isn't installed. It passes. With the adapter's journal option removed, it fails with Could not load storage adapter. The same setting does reach the Planner's Intercom broker: a real run wrote the broker's tables to the operator's selected database. docs/hosted-agent.md now says so.

  • No effect on Chopin:

    • Device-code /login: Chopin never runs /login. auto copies the host login. The connector's "sign in with /login" guidance is still accurate.
    • Trimming a trailing newline from { "file": … } secrets: Chopin configures no storage secrets.
    • Interactive Ctrl+C and queue fixes: Chopin drives sessions through the SDK.
    • Workflow failure containment: no change needed.
    • Operator workflows.localWorkers and workflows.admission settings: I tried both against a real Planner workflow, and its question still reached Decisions.
  • docs/self-hosting.md now names 0.9.42.

The connector is unchanged. It installs @bastani/atomic without pinning a version.

No UI changes, so there is no visual preview.

Verification

  • bun test: 6734 pass, 22 skip, 0 fail. This includes harness/atomic/*, atomic.contract.test.ts, and atomic/full.test.ts.
  • bun run types and bun run ci both pass.
  • The server Docker image builds. The container imports Atomic 0.9.42 and starts healthy with HARNESS=atomic.
  • Targeted bun run e2e (run-card, setup-agents, machines, harness-children, chat-mentions): 24 passed.

The harness catalog now pins @bastani/atomic 0.9.42, and the lockfile
resolves @bastani/atomic, @bastani/atomic-natives with its eight platform
packages, and @bastani/pi-ai at 0.9.42, with no older @Bastani package
left. Atomic's own @earendil-works pi packages move from 1.3.0 to 1.4.0
with it, and pi-tui brings in marked-cjk-friendly.

Nothing between 0.9.41-alpha.1 and 0.9.42 breaks the Atomic adapter, and
it needs no code change. The steer() and followUp() change and
waitForSettled() were already handled with 0.9.41-alpha.1.

Atomic now shares a provider's rate limit across the whole process: after
one request gets a 429, every Atomic session in the server, Planner turns
and workers alike, waits for that provider's cooldown before its next
request. A real run confirmed the wait and that aborting a waiting turn
ends it without sending the request. The self-hosting guide describes this
and names the new version. Chopin sets no request budget and passes no
resourceAdmission; both are optional.

Atomic's shared top-level storage setting can now name an adapter by
package, as atomic storage join writes for libSQL. A Planner session's
explicit journal still outranks it, so its workflow runs stay in Chopin's
journal. A new test runs a workflow with such a selection whose adapter is
not installed; it fails if the adapter stops passing the journal. That
setting does reach the Planner's Intercom broker, which the hosted-agent
guide now says.

Device-code login, the trailing-newline trim for file storage secrets,
local workflow worker pools, and the interactive queue fixes do not reach
Chopin: it never runs /login, configures no storage secret, and drives
sessions through the SDK. Operator settings for worker pools and workflow
admission were tried against a real Planner workflow and do not break it.

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline (fast subagents)
Assistant-verification: bun test (6734 pass, 22 skip, 0 fail), bun run types, bun run ci
Assistant-verification: new journal test fails when the adapter stops passing its journal, passes with it
Assistant-verification: real Atomic sessions show a shared provider cooldown on 0.9.42 and none on 0.9.41-alpha.1
Assistant-verification: docker build of the server image; container started healthy with HARNESS=atomic and imports Atomic 0.9.42
Assistant-verification: targeted bun run e2e (24 passed)
User-preference: Keep Atomic and its transitive packages on the same release everywhere
Co-authored-by: Alex Lavaee <alexlavaee@microsoft.com>
@lavaman131 lavaman131 self-assigned this Oct 23, 2026
@lavaman131
lavaman131 merged commit 650d56a into main Oct 23, 2026
24 checks passed
@lavaman131
lavaman131 deleted the atomic-0.9.42 branch October 23, 2026 16:25
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