Skip to content

release: bump the lockstep anchor so the .NET server actually ships #348 + #352 - #354

Merged
brentrager merged 1 commit into
mainfrom
dotnet-release-anchor
Aug 14, 2026
Merged

release: bump the lockstep anchor so the .NET server actually ships #348 + #352#354
brentrager merged 1 commit into
mainfrom
dotnet-release-anchor

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

The report

A downstream consumer asked us to port the 1.39.0 file-transfer contract to the .NET server — no ToolContext, no directive sink, no images[]/files[] ingest in SmooAI.SmoothOperator.Server 1.39.0.

They were right about the artifact and wrong about the code. main has had all of it since 2026-08-11 (#348). It was never published.

Root cause

SmooAI.SmoothOperator.Server's <Version> is stamped by scripts/sync-versions.mjs from the lockstep anchor @smooai/smooth-operator (typescript/package.json). @smooai/smooth-operator-server is a different package — the TypeScript server on npm, currently 1.8.0.

PR changeset targets result
#346 (ts) …-server + @smooai/smooth-operator shipped ✅
#348 (dotnet) …-server only bumped TS to 1.8.0, anchor stayed 1.39.0 → .NET never republished

Release #349 consumed .changeset/dotnet-file-transfer.md and touched only typescript/server/{CHANGELOG.md,package.json} — visible right there in the release commit's diffstat.

#352 (skill resolution, merged an hour ago) inherited the same mistake, because I copied #348's changeset header. So two .NET features were stranded, not one.

Fix

One changeset naming the anchor. changeset version bumps it → sync-versions stamps the csproj (plus the AspNetCore and Postgres add-ons) → the release workflow publishes npm → NuGet → PyPI → crates.io at the shared version. Consumers get file transfer and skill resolution in the same release.

No source change.

Follow-up

Nothing prevents a recurrence: a PR can touch dotnet/** with a changeset that names no anchor and CI is perfectly happy. Worth a guard that fails when a PR touches a lockstep-stamped manifest's source tree without naming @smooai/smooth-operator — filing separately rather than widening this one.

🤖 Generated with Claude Code

https://claude.ai/code/session_012iM1Q8JC1H83H2FXQVQNs9

 + #352

SmooAI.SmoothOperator.Server is stamped from the lockstep anchor
(@smooai/smooth-operator, typescript/package.json) by sync-versions.mjs.
#348's changeset named only @smooai/smooth-operator-server — which is the
TYPESCRIPT server npm package — so release #349 bumped that to 1.8.0 and left
the anchor at 1.39.0. The .NET NuGet was therefore never republished, and
1.39.0 consumers see no TurnContext, no directive sink and no images[]/files[]
ingest despite main carrying all of it since 2026-08-11. #352 (skill
resolution) inherited the same mistake by copying #348's changeset header.

The sibling TS PR #346 named BOTH packages, which is why the TS lane shipped
and the .NET lane silently did not.

Reported by a downstream consumer who checked the published package rather
than main — the report was right about the artifact and wrong about the code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012iM1Q8JC1H83H2FXQVQNs9
@changeset-bot

changeset-bot Bot commented Aug 14, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a414896

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@smooai/smooth-operator Minor
@smooai/smooth-operator-web-chat-example Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

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