Skip to content

Write the 1.0.0 changelog from the code - #1066

Draft
jerelvelarde wants to merge 6 commits into
CopilotKit:mainfrom
jerelvelarde:jerel/changelog-1.0.0
Draft

jerelvelarde wants to merge 6 commits into
CopilotKit:mainfrom
jerelvelarde:jerel/changelog-1.0.0

Conversation

@jerelvelarde

Copy link
Copy Markdown
Contributor

The problem

## Unreleased is the release notes, and docs/releasing.md trusts none of it as written: before a cut, every change since the last tag is checked against its diff and the section is rewritten from what the code shows. 1.0.0 is cut by running Create release PR with major, which promotes ## Unreleased to ## 1.0.0 exactly as it stands. Since v0.3.1, fifteen PRs have landed, and #1065 (the kite) is about to.

As written, four of those fifteen had no entry. Several over- or understated what changes for an existing deployment. And one, #1055, renames a tenant id in a way that stops an existing personal edition from starting, with nothing in the notes to say so.

The approach

This rebuilds ## Unreleased the way #1045 did for 0.3.1. Every change since v0.3.1 (47cc61d and before), plus #1065, is checked against its diff. An entry stays only where the code proves it, gets rewritten where it misstates the change, and is added where nothing mentioned one. #1049, #1052, #1053 and #1057 gain entries. #1025 changes only the README, so it has none. #1061 and #1062 become one section. #1047 splits into the Intelligence rc.7 changes and the CopilotKit runtime changes.

Before upgrading comes first, as in 0.3.1. There are no migrations: the newest file in server/drizzle/ is still 0077_channel_opening, and #1056's Learning queue Job runs in the bundled Intelligence's own PostgreSQL, which the notes now say. Six things change for an existing deployment. OpenBot Desktop becomes the personal edition on its next Start, with what that turns off, and the tenant id moves (both #1055). Every Bot gets every skill once in the personal edition (#1032). A Helm upgrade replaces the bundled Intelligence's PostgreSQL pod, and the Learning queue Job's longer deadline is lost under --reuse-values (#1047, #1056). The Learning model moves to config.learning.model (#1051). With telemetry on, the new CopilotKit runtime forwards each run's analytics context (#1047).

The tenant id is the one to read before cutting. #1055 changed examples/personal/brand.yaml's tenant id from personal to openbot, so a Desktop install keeps its Bots when it switches packages. A personal edition already running on examples/personal still has the Personal Assistant owned by the package under the old id. On this release the package sync refuses to adopt it, and the server stops at start with Tenant package agent "personal-assistant" collides with a user-created agent. This was reproduced on a scratch Postgres by syncing v0.3.1's package and then this one. The notes give the one-line UPDATE that renames the package row; it was tested. Desktop, moving from fintech to personal, syncs fine. Fixing this in code before the cut is the better outcome, and if that happens, that bullet should go.

Only CHANGELOG.md changes. package.json, the chart and the Cargo files are left alone: the release action writes them, and it refuses to run when package.json names a version that was never tagged.

What is not covered

  • No recording: this changes notes, not the product.
  • Intelligence rc.7's fixes come from the descriptions of Intelligence #2250, #2252 and #2254, not from code in this repo. That rc.5 to rc.7 replaces the PostgreSQL pod follows the chart README and Give Learning's queue migration time to wait out Intelligence's database restart #1056; there was no Helm here to watch it happen.
  • The CopilotKit canary's Stop and lock behaviour was read in the installed runtime, not run.
  • The app and Desktop weren't run for this. Wording was checked against the source.
  • A database holding both an openbot and a personal package row would hit the unique constraint on the rename. The notes don't cover that case.
  • release-policy.json isn't here. As 8d0ea17 did for 0.3.1, it's a commit on the release PR the action opens; the draft is under Merge notes.

Verification

  • bun run format:check: clean.
  • bun test scripts/release-prepare.test.ts scripts/release-version.test.ts: 29 pass, 0 fail.
  • bun scripts/release-prepare.ts major stable on a scratch copy of the release files printed version=1.0.0 and base=main. It promoted Unreleased to ## 1.0.0 under a fresh empty Unreleased, and moved package.json, the chart's appVersion and both Cargo files to 1.0.0.
  • The draft policy below, in a scratch clone with tags: VERSION=v1.0.0 bun scripts/release-manifest.ts --validate-policy describes v1.0.0, and tests/release-policy.test.ts passes 18 of 18.

Merge notes

This is stacked on #1065. Its own change is the last commit: compare. Merge #1065 first. Anything else that lands on main before the cut needs its entry checked the same way.

After this merges, run Create release PR from main with bump: major and kind: stable. Then add this release-policy.json to the PR the action opens. It lists both v0.3.0 and v0.3.1, because Desktop refuses to move an install whose release isn't listed, and a Mac app still on 0.3.0 goes straight to Latest. Both releases end at 0077_channel_opening.

{
  "$schema": "./shared/release-policy.schema.json",
  "version": "v1.0.0",
  "compatibility": {
    "launcherApi": 1,
    "configSchema": 1,
    "extensionApi": 1,
    "database": {
      "from": ["0077_channel_opening"],
      "to": "0077_channel_opening",
      "rollbackCompatible": false
    },
    "intelligenceCapabilities": []
  },
  "upgrade": {
    "fromVersions": ["v0.3.0", "v0.3.1"],
    "requiresDowntime": true,
    "recovery": "restore-backup"
  }
}

Changelog

  • This is the changelog.

The Pro pixel kite picked for OpenBot 1.0, drawn by kite-draw.ts to the mascot spec's numbers
(Filled, pixel eyes, a face only at contact): a pure function of time and a per-Bot seed, put on
canvas by Kite, BotKite and OpenBotKite. Every kite that animates shares one frame loop; a resting
kite draws once. It honours reduced motion and dark mode, holds still at 32 px and under (only the
status square moves), and shows no face under 22 px.

A Bot's state comes from what main already knows: the roster's attention counts (waiting, error,
paused as sleeping, a reply to read as done), a turn in flight for the conversation's kite, and a
busy conversation in the sidebar. Each Bot keeps its orb's colour slot (the same FNV-1a hash) and
gets a sail pattern from the hash's next bits. OpenBot's own mark everywhere is the violet kite,
including the skins' frames and the OpenBot for Business icon.

Removes AgentOrb, BotOrb, ai-core, orb-palette and the orb logo PNG; renames botLook "orb" to
"kite".
…r state

A Bot's page drew its kite idle until the attention counts arrived, even when its lifecycle
already said paused. The roster and the page now each have a test that reads the state every
kite is drawn in.
…ilm use

The product's kite is violet quarters on the site, in the film and in the favicon. The app drew
it with a plain sail; the sign-in, onboarding, New Bot, skins' frames and the OpenBot for Business
icon now match.
…inct

Release Notes and Research Desk share the orb's plum, and the bits after the colour gave them the
same top sail too. Bits 16 to 18 give all fifteen Bots in the examples a livery of their own, and
a test now holds that.
…t's own kite

From review of this branch:
- A resting kite asks for no frames, so a zoom or a move to another screen left it at the old
  resolution. It now redraws when devicePixelRatio changes.
- One Bot in 64 landed on violet quarters, OpenBot's own kite. That Bot takes the next sail and
  keeps its colour; none of the examples' Bots change.
- Kites draw in a layout effect, so a newly mounted one is never shown as an empty frame.
- A kite at 32 px and under draws at most about thirty frames a second while its square moves.
- The changelog said every Bot keeps its colour. It keeps its place in the palette; the palette is
  the brand's, so the teal slot becomes graphite and the sky slot teal.
Rebuilt from each change since v0.3.1 (CopilotKit#1032, CopilotKit#1049, CopilotKit#1050, CopilotKit#1052, CopilotKit#1053, CopilotKit#1047, CopilotKit#1054, CopilotKit#1056,
against its diff. Entries are kept where the code proves them, rewritten where they overstated or
understated, and added for CopilotKit#1049, CopilotKit#1052, CopilotKit#1053 and CopilotKit#1057, which had none. CopilotKit#1025 changes only the
README and has no entry.

Before upgrading names what changes for an existing deployment: OpenBot Desktop becoming the
personal edition, the personal package's tenant id moving from personal to openbot (a personal
edition on examples/personal stops at start until its package row is renamed), every Bot getting
every skill once in the personal edition, the bundled Intelligence's PostgreSQL restart and
Learning queue Job deadline, the Learning model moving to config.learning.model, and the analytics
context the new CopilotKit runtime forwards. No migration lands: the database stays at
0077_channel_opening.
@jerelvelarde
jerelvelarde force-pushed the jerel/changelog-1.0.0 branch from 6083d7d to 14c200f Compare November 6, 2026 23:27

This branch has not been deployed

No deployments
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