Repository navigation
chore(release): 0.2.0 - #303
Merged
Merged
Conversation
The portal, @pithagoras/extension-api and the docs site move from 0.1.0 to 0.2.0, in package.json and in the lock's entries for them, as tests/extension-api-package.test.mts requires for the tag v0.2.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a whole v0.1.0 data folder in one start v0.1.0 filed its picture tools as the set "<portal:images>". #164 renamed the set "<portal:media>" without carrying a name given to it, and the Media hand-off (schema 7) moved only "<portal:media>" to pithagoras-media, so a name a person gave the set in v0.1.0 was lost. The hand-off now moves both, the newer one first. The new test starts from fixtures/portal-v3.db with something of every part an extension holds now, kept as v0.1.0 kept it: a canvas, a Media page picture and its file, the image endpoint, voice mode connected to the voice service with the person's own addresses remembered, a designed voice and a clone, the GPU, Understory's settings and MCP entry, the browser's settings and a local profile, the allowlist, a heartbeat rule for routine_update, the tools seen and the sets' names. One start takes it to schema 11 with one backup, portal-v3-….db, and leaves media, browser, voice-service, voice-addresses and understory for their extensions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nstall has Two items of the v0.1.0 checklist (#221) were ticked without a test that would fail: - server/dist/index.js, reset-password.js and sso-only-off.js: scripts/old-entries.mjs is run into a folder of its own, and each file it writes runs the file of the same name in core/server/dist with the arguments it was given. The build runs the script, and the Dockerfile copies server/dist. - Git drafts: a commit message or a pull request's text that v0.1.0's own Git panel kept in the tab's session storage, under pithagoras.git-draft.<key>, is read and written by the extension's gitDrafts under the same name. tests/drafts.test.mts only used the prefix as a string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r is added and removed again #295 judges nothing the first time the portal looks at mcp.json, so a tool of a server taken out by hand before then stays listed. The MCP guide sent the person to tools_seen in the database. Adding the server again under its name in Settings → MCP and removing it there forgets its tools as any removal does; the new test checks that, and the guide says it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he configuration reference lacked - settings.md: the Agent group lists Sandbox and Guard, as the rail has them. - deploying.md: PORTAL_DEFAULT_EXTENSIONS names the six extensions a portal starts with, not two. - configuration.md: rows for PORTAL_DEFAULT_EXTENSIONS and BROWSER_BIND, which .env.example and both Compose files have. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The guide had a section for each move made on main, written for a portal that followed main, and a section called "Upgrading from the first release" that was mostly 0.1.0's own notes for builds before it. It now reads true for a portal at 0.1.0: - From 0.1.0 to 0.2.0: schemas 3 to 11 in one start with one backup (portal-v3-….db), in order, each linked to its section; what the person does; the pages, settings and routes that moved, as 0.1.0 named them (Settings → Agent → Images, Settings → Add-ons, the allowlist on the Browser page); the new environment variables; what does not carry over. - New sections for steps that had none: agents' and routines' tools (schema 4), code mode off by default, the six extensions a portal starts with and the ones it does not install, the terminal and Git as extensions (routes, T, panel places), a tool's files on old picture calls (schema 6), the guard (taint only on a suspected injection, MCP output, heartbeat rules, a routine's exemptions), MCP servers taken out by hand (#295's first look, dotted names from #296), and pi 1.1. - Canvases: the routes, D and the panel's place. Media: 0.1.0's /settings/images and its Images group. Browser: the allowlist's old place and route. Voice: the container is given unless-stopped in place (#298), which needs Docker for extensions 1.2.0, and nothing remakes it before Voice is installed. - The section for builds before 0.1.0 is renamed "Upgrading to 0.1.0 from an earlier build" and keeps only 0.1.0's own items; the password, pi 1.1 and the voice container moved to 0.2.0's sections, and the heartbeat line says 0.2.0 removes a heartbeat's rules too. - Going back to 0.1.0: one procedure, from removing the extensions 0.1.0 does not have to remaking Understory's container. tests/deploy-files.test.mts follows the renamed section. tests/extension-packages.test.mts pins extensions/defaults.json to the six packages the guide lists. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Going back was run once on friday-lab: a v0.1.0 data folder with two chats, a picture of the Images page and a local Chrome profile, upgraded by this branch, a chat added, then put back with the steps of "Going back to 0.1.0" and started on v0.1.0 (66a35a4). It answered with its two chats and the picture, its file served, the profile in browser-profile/, and pi started in a chat. Left in pi's settings.json, the six extensions a portal starts with did not stop 0.1.0 or its pi; it lists them under Settings → Extensions, where they can be removed. Step 1 now says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Notes came with builds of main between #169 and #200 and is a test fixture now; the portal retires only theme-dusk and theme-warm, so a portal that installed Notes from extensions/notes keeps an entry whose folder is gone. The guide says to remove it under Settings → Extensions. 0.1.0 never had it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hat 0.1.0's defaults were Going back to 0.1.0, step 4: the container form is written out, as Media's and Browser's are. Its comments no longer have apostrophes, which closed the single quote of `sh -c '…'`, so that only `cd /data` ran in the container and the rest on the host. Checked with bash -n, sh -n and zsh -n, and run in an alpine container on a copy of a data folder. The new environment variables: unset, the fetch and Understory waits are 30 minutes where 0.1.0 had Node's five, and a checkout looks for new commits at the start and every six hours. What you do gains Node 22.19 for a checkout and dropping docker-compose.voice.yml from the start command. The moved-routes table names the Voice and Understory routes that were renamed. The voice container comes back after a restart with Docker 29 or later. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nothing reads the docs package's version, and the release steps in extension-ui.md and tests/extension-api-package.test.mts name only the portal's package.json, packages/extension-api/package.json and those entries of the lock. The release now changes only those. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…estart with Docker 29 or later Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 4 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR prepares 0.2.0. It raises the portal and
@pithagoras/extension-apito 0.2.0, and it rewritesdocs/guide/upgrading.mdso the guide is correct for a portal that goes straight from v0.1.0 to 0.2.0. It adds tests for the #221 checklist items that had none. It also fixes one thing the upgrade lost: the name a person gave v0.1.0's tool set for pictures. The branch is cut from main at 2286642, so #294, #295, #296 and #298 are in it, and the guide and the release notes cover them.Version bump
package.jsonandpackages/extension-api/package.jsongo from 0.1.0 to 0.2.0.package-lock.jsonchanges in three lines only: the top-levelversion, and the""andpackages/extension-apientries. These are the files and entries that the release steps inextension-ui.mdname.tests/extension-api-package.test.mtspasses.docs/package.json) stays at 0.1.0. Nothing reads its version, and neither the release steps nor the lockstep test name it.What changed besides the docs
<portal:images>. Add a Media area for pictures and videos: one settings tab, one sidebar tab, one tool group (#79) #164 renamed the set<portal:media>but did not carry over a name the person had given it, and the schema 7 hand-off moved only<portal:media>.handOffMedianow moves both, the newer one first. This is one line incore/server/src/db.ts.schema-fingerprint.test.mjs: a v0.1.0 data folder that uses every part goes from schema 3 to 11 in one start. The folder holds a canvas, a picture on the Images page with its file, the image endpoint, voice mode connected to the service with the person's own addresses remembered, a designed voice and a clone, the GPU, Understory's settings and MCP entry, the browser's settings and a local profile, the allowlist, a heartbeat rule forroutine_update,tools_seenand the sets' names. The test checks for one backup,portal-v3-….db, the five hand-offs at their schemas, the settings that are left, and the rules.deploy-files.test.mts: runsscripts/old-entries.mjsinto its own folder and checks four things. Eachserver/distforwarder runs the matching file incore/server/distwith its arguments. The build runs the script. The Dockerfile copiesserver/dist.extensions/git/test/drafts.test.mts: the extension'sgitDraftsreads and writes v0.1.0'spithagoras.git-draft.<key>entries.mcp-edited-outside.test.mjs: a tool left over from before fix(mcp): notice a server taken out of mcp.json outside the portal #295's first look goes away once its server is added again and then removed in Settings → MCP.extension-packages.test.mts: pinsextensions/defaults.jsonto the six packages the guide lists.settings.mdlists Sandbox and Guard.deploying.mdnames all six default extensions.configuration.mdgainsPORTAL_DEFAULT_EXTENSIONSandBROWSER_BIND.mcp.mdtells you to add the server and remove it again, instead of editingtools_seen.The upgrading guide
New: "From 0.1.0 to 0.2.0". It has:
PORTAL_PASSWORDout, install the extensions you used, reload open tabs, change scripts and bookmarks, rename Azure's provider, use Node 22.19 from a checkout, and dropdocker-compose.voice.ymlfrom the start command;GET install→/state,presets→voices,POST connect→PUT …/chosen) and the renamed Understory routes (PUT /api/features/understory→…/use,GET /api/features→…/state);New sections:
mcp_configuredfirst look, and fix(mcp): tell a server's tools by the prefix the adapter really gives them #296's dotted names);Changed sections:
/settings/imagesand its Images group.unless-stoppedpolicy in place. This needs Docker for extensions 1.2.0 (fix(voice): its container comes back after the host restarts #298). The container comes back after a restart only with Docker 29 or later. Older Docker can leave it stopped, and the page then shows failed with Retry setup. Nothing remakes the container before Voice is installed.Renamed: "Upgrading from the first release" is now "Upgrading to 0.1.0 from an earlier build", and it keeps only 0.1.0's own items. The password, pi 1.1 and the voice container moved to 0.2.0's sections. The heartbeat line now says that 0.2.0 also removes a heartbeat's rules.
New: "Going back to 0.1.0". It is one procedure, in order:
portal-v3-….db;extension-data/andhandoff/aside. The script is written out in full twice, once for the host and once for a container (--volumes-from);PORTAL_PASSWORDagain;It also covers what stays behind: each canvas exists twice, pi is back at 0.82, the voice container keeps its policy, and modes and exemptions are lost.
The #221 checklist
schema-fingerprint"a database of v0.1.0 …", and the new whole-folder testschema-fingerprint"the canvases a portal stored …" (fromportal-v3.db), and the whole-folder testcore/server/test/auth-environment.test.mjs(4 tests; notauth.test.mjs)subagentand the routine toolsschema-fingerprintv2 test (r1 to r4), and the whole-folder test (a heartbeat'sroutine_update)db-upgrade.test.mjs(the port-taken test fails on macOS only, #43)core/, forwarders (#198)deploy-filestest that runs the forwarders and checks the DockerfileWORKSPACES_DIR, PortainerPORTAL_DATA_DIRdeploy-filesdefault-extensions*.test.mjs,retired-extensions-wait.test.mjs, and the new pin ofdefaults.jsonto the guideextensions/git/test/drafts.test.mtsextensions/(#200)extensions/browser/test/bind.test.mtsunless-stoppedin place (#298)extensions/voice/test/network.test.mts,restart.test.mts,server-half.test.mtsdeploy-files"the image takes what the lock says …",lockfile.test.mts<portal:images>name (the fix above). Agents and routines: doneschema-fingerprintv0.1.0 test and whole-folder testupgrading.mdcovers every itemEvery item is done except the part of "The whole upgrade, once" listed above, so this PR says Refs #221. If what was run is enough, change it to Closes #221.
Upgrade test
From the workflow, at bb87b8c, on friday-lab. Two data folders went to schema 11 and every check passed. One was made by v0.1.0 through its API, and the other was
fixtures/portal-v3.db. Both showed the Upgrading page and made the backup, andquick_checkandintegrity_checkreturned ok. Each hand-off was taken up once its extension ran. The six defaults were installed, the chats and the routine were kept, and the password moved. No log line reported an error.Two notes, now known issues in the release notes:
POST /api/packageswithout Docker wait without showing any message.The going-back check, at cdb3df2, on friday-lab. The steps:
sh.v0.1.0 then started with its 2 chats (the added chat was gone) and the picture, with its file served. The profile was back in
browser-profile/, and pi was live in a chat.Without step 1, 0.1.0 still started. It listed the six leftover entries and could remove them, and the guide says so.
The container form of step 4, at bcbd40f. The form was copied from the guide unchanged, except that
--volumes-from pithagorasbecame a bind mount of a test folder. It passedbash -n,sh -nandzsh -n, and it ran in a throwawayalpine:3.20container on friday-lab. The pictures from Media's folder, fromhandoff/mediaand from a.media.partialfolder ended up inimages/. The profile ended up inbrowser-profile/, a cut-off.copywas left behind, andextension-data/andhandoff/were moved tobackups/0.2.0-<stamp>/. All 17 shell blocks in the guide pass the three syntax checks, including the inner scripts of the sixsh -c '…'forms.Tests
npm run build,check:boundariesanddocs:build, with every anchor link in the changed pages checked: 138 anchor links, none broken;extension-api-package,license,lockfile,deploy-filesandextension-packagesagain, 31/31;Release notes
The docs have no place for release notes, so the GitHub release body is written separately, in the style of v0.1.0's. It starts with what 0.2.0 is and the counts: from 7 October 2026 up to #302 on 23 October, together with this pull request, 137 commits and 132 merged pull requests, 74 by @thecodacus and 58 by @Piggidragon. These counts assume this PR is squash-merged and nothing else merges before the tag. Then come the upgrade notes, the known issues, what is new in each area with PR numbers (#294 to #302 included, and #198's move to
core/), and the thanks to contributors.Since the review, main was merged in again with #300 (Files: Refresh reads the open file again, part of #292), #301 (the Settings rail's groups fold, #268) and #302 (voice conversations can be switched off while dictation stays, #287). None of them changes an upgrade: #302's switch is on by default.
After this merges
git rev-list --count v0.1.0..v0.2.0and the merged-PR list, and update the counts in the release notes.v0.2.0on main. docker.yml buildsghcr.io/thecodacus/pithagoras:0.2.0, andpublish-extension-api.ymlruns.npm publishthe first time. Publish 0.2.0 by hand from a clean checkout ofv0.2.0(npm publish --provenance=false -w packages/extension-api) using the token in~/.npmrc, before it expires around 2026-10-29.🤖 Generated with Claude Code