From aba1ebd927e7a952ceaaf1c4c2b5496c1c78bbab Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Mon, 19 Oct 2026 21:17:33 -0700 Subject: [PATCH 1/6] Bump versions to 0.1.0a16 Bump the Python package and browser Studio bundle to 0.1.0a16, the desktop product to 0.1.0-alpha.16 with native installer counter 0.1.16, and the Agentic and Files workers to 0.1.8 pinned to core 0.1.0a16. Regenerate the core, worker and Cargo lockfiles and point the documented install commands at v0.1.0a16. --- README.md | 18 +++++----- desktop/RELEASE.md | 8 ++--- desktop/package-lock.json | 4 +-- desktop/package.json | 2 +- desktop/src-tauri/Cargo.lock | 2 +- desktop/src-tauri/Cargo.toml | 2 +- desktop/src-tauri/tauri.conf.json | 6 ++-- docs/README.md | 4 +-- docs/guides/ai-workers.md | 2 +- docs/guides/desktop.md | 50 ++++++++++++++-------------- docs/guides/docker-development.md | 4 +-- docs/guides/learning-path.md | 6 ++-- docs/guides/local-platform.md | 8 ++--- docs/guides/standalone.md | 6 ++-- docs/guides/studio-step-reference.md | 4 +-- docs/guides/studio.md | 36 ++++++++++---------- docs/guides/weave-ai.md | 2 +- docs/installation.md | 28 ++++++++-------- docs/reference/local-runtime.md | 2 +- docs/reference/native-openapi.md | 2 +- pyproject.toml | 2 +- src/firefly_weave/__init__.py | 2 +- uv.lock | 2 +- workers/agentic/pyproject.toml | 4 +-- workers/agentic/uv.lock | 4 +-- workers/files/pyproject.toml | 4 +-- workers/files/uv.lock | 4 +-- 27 files changed, 109 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 3daf4e1f..5d8d79c0 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ maps service tasks, user tasks, gateways, and timers to Weave steps. ## What you get -The **v0.1.0a15 alpha** release provides the **API, CLI, Python SDK, and Studio** +The **v0.1.0a16 alpha** release provides the **API, CLI, Python SDK, and Studio** visual workspace, with human-task inboxes, email conversations, execution management, and administration of people and access. Run Weave as a standalone service or embed it in another product. @@ -81,7 +81,7 @@ See the illustrated [AI workflow guide](docs/guides/ai-workers.md) and Read the [capability matrix](docs/capabilities.md) for tested boundaries and live-provider checks that remain environment-specific. -Studio runs in your browser from the [installed CLI](docs/guides/studio.md#install-the-alpha15-browser-application) +Studio runs in your browser from the [installed CLI](docs/guides/studio.md#install-the-alpha16-browser-application) or as a [desktop app](docs/guides/desktop.md). The macOS desktop bundles are ad-hoc signed, not Developer ID signed or notarized, so macOS may ask you to approve them; do not use the alpha5 macOS installers, which were damaged. The @@ -119,7 +119,7 @@ integration code. Each has its own guide, so you can stop at the result you need ## Install and discover the CLI On macOS, Linux, or WSL, install **Python 3.12 or newer** with `venv` support, -then run this block in Bash or Zsh. It installs the pinned **v0.1.0a15 alpha** +then run this block in Bash or Zsh. It installs the pinned **v0.1.0a16 alpha** into your user account without `sudo`, Git, or Docker: ```sh @@ -127,12 +127,12 @@ into your user account without `sudo`, Git, or Docker: # Stop if downloading the installer fails. set -o pipefail curl --proto '=https' --tlsv1.2 -fsSL \ - https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/install.sh \ - | sh -s -- --version v0.1.0a15 + https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/install.sh \ + | sh -s -- --version v0.1.0a16 ) ``` -Expected: `Installed Firefly Weave 0.1.0a15:` followed by the command's path. Then +Expected: `Installed Firefly Weave 0.1.0a16:` followed by the command's path. Then make the default command directory available in this terminal and look around: ```sh @@ -146,7 +146,7 @@ weave help workflow weave docs platform ``` -Expected: `Firefly Weave 0.1.0a15`, the command overview, the `workflow` +Expected: `Firefly Weave 0.1.0a16`, the command overview, the `workflow` commands, and the address of the platform guide. You do not need to learn every command first: help explains each family and its next steps. The [installation guide](docs/installation.md) covers choosing Python, a permanent @@ -179,7 +179,7 @@ Compose files and setup helpers. Clone the tag that matches the CLI: ```sh # Keep the platform files at the same version as the CLI. -git clone --branch v0.1.0a15 --single-branch https://github.com/fireflyframework/firefly-weave.git +git clone --branch v0.1.0a16 --single-branch https://github.com/fireflyframework/firefly-weave.git cd firefly-weave # Check prerequisites, then start a persistent Docker platform and a sign-in account. @@ -265,7 +265,7 @@ path, and the detailed diagrams. ## Current release and limits -The recommended installation is **v0.1.0a15**, an **alpha** release. Download +The recommended installation is **v0.1.0a16**, an **alpha** release. Download packages and checksums from [GitHub Releases](https://github.com/fireflyframework/firefly-weave/releases). The documentation on a branch describes the source on that branch; a release tag diff --git a/desktop/RELEASE.md b/desktop/RELEASE.md index 04025858..7f20a0e4 100644 --- a/desktop/RELEASE.md +++ b/desktop/RELEASE.md @@ -17,16 +17,16 @@ SPDX-License-Identifier: Apache-2.0 --> # Desktop release versions -The alpha15 product version is `0.1.0-alpha.15` in npm, Cargo and Tauri. It corresponds -to Python `0.1.0a15` and the repository prerelease tag `v0.1.0a15`. +The alpha16 product version is `0.1.0-alpha.16` in npm, Cargo and Tauri. It corresponds +to Python `0.1.0a16` and the repository prerelease tag `v0.1.0a16`. -Windows MSI uses the explicit numeric version `0.1.15`. Tauri's pinned bundler rejects +Windows MSI uses the explicit numeric version `0.1.16`. Tauri's pinned bundler rejects nonnumeric prerelease identifiers when deriving MSI versions; its `windows.wix.version` override supplies the valid numeric installer version while filenames retain the product version. MSI compares only the first three fields. Future desktop alpha and stable releases must advance this numeric installer counter: the stable product `0.1.0` must not reset the MSI counter to `0.1.0`. The macOS internal bundle version also uses -numeric `0.1.15`; its displayed product version remains the alpha product version. +numeric `0.1.16`; its displayed product version remains the alpha product version. The Desktop installers workflow builds on four native runners and is dispatchable by an exact branch/tag ref. Versioned, target-specific unsigned artifacts contain only diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 96c36db8..2047af5c 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "@firefly-weave/desktop", - "version": "0.1.0-alpha.15", + "version": "0.1.0-alpha.16", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@firefly-weave/desktop", - "version": "0.1.0-alpha.15", + "version": "0.1.0-alpha.16", "license": "Apache-2.0", "devDependencies": { "@tauri-apps/cli": "2.12.1" diff --git a/desktop/package.json b/desktop/package.json index b8f74e30..cc24d4eb 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@firefly-weave/desktop", - "version": "0.1.0-alpha.15", + "version": "0.1.0-alpha.16", "private": true, "license": "Apache-2.0", "scripts": { diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 54738b17..4a5ff440 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -794,7 +794,7 @@ checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" [[package]] name = "firefly-weave-studio" -version = "0.1.0-alpha.15" +version = "0.1.0-alpha.16" dependencies = [ "serde", "serde_json", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index 9b98dde7..60dcf5ce 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -16,7 +16,7 @@ [package] name = "firefly-weave-studio" -version = "0.1.0-alpha.15" +version = "0.1.0-alpha.16" description = "Firefly Weave Studio desktop" authors = ["Firefly Software Foundation"] license = "Apache-2.0" diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index a0b54830..6d525cb5 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Firefly Weave Studio", - "version": "0.1.0-alpha.15", + "version": "0.1.0-alpha.16", "identifier": "io.getfirefly.weave.studio", "build": { "frontendDist": "../bootstrap" @@ -53,7 +53,7 @@ "y": 160 } }, - "bundleVersion": "0.1.15", + "bundleVersion": "0.1.16", "signingIdentity": "-", "entitlements": "entitlements.plist" }, @@ -62,7 +62,7 @@ "type": "downloadBootstrapper" }, "wix": { - "version": "0.1.15" + "version": "0.1.16" } }, "icon": [ diff --git a/docs/README.md b/docs/README.md index d97f278c..597ae3d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -44,7 +44,7 @@ gives the steps and what you finish with. | An administrator | Install the platform, configure sign-in, and give people access | [Start a local platform](guides/local-platform.md) | [Identity and secrets](operations/identity-and-secrets.md), [remote deployment](operations/remote-deployment.md), [people and access](guides/people-and-access.md), and [configuration](operations/configuration.md) | | An operator | Keep runs healthy, fix incidents, upgrade, and back up | [Connect the CLI](guides/connect-to-api.md), then [manage runs](guides/execution-management.md) | [Incidents](reference/incident-operations.md), [troubleshooting](operations/troubleshooting.md), [observability](operations/observability.md), [upgrades](operations/upgrades.md), [backup](operations/backup-restore.md), and [debug-session retention](operations/retention.md) | -Start each path by [installing the CLI](installation.md) from the v0.1.0a15 +Start each path by [installing the CLI](installation.md) from the v0.1.0a16 release. [Who does what](guides/roles-and-lifecycle.md) explains these roles with an @@ -101,7 +101,7 @@ Run one command block, check its **Expected** result, then continue. Comments inside code blocks explain why each command is there. When a terminal shows server logs, keep it open and use a second terminal for client commands. -The guides pin the **v0.1.0a15 alpha** release, a preview, which includes every +The guides pin the **v0.1.0a16 alpha** release, a preview, which includes every feature they describe, such as saved platforms, REST calls without code, and the Studio editor. When a guide shows how to work with an alpha6 or earlier client or server, it says so. diff --git a/docs/guides/ai-workers.md b/docs/guides/ai-workers.md index de556f8f..45e9c866 100644 --- a/docs/guides/ai-workers.md +++ b/docs/guides/ai-workers.md @@ -27,7 +27,7 @@ Use [Weave AI](weave-ai.md) when *you*, the person using Studio, want an explanation or a proposed definition change. Weave AI has separate configuration and does not execute workflow AI tasks. -The examples here use Weave **0.1.0a15** and the **0.1.7 Agentic worker package**, +The examples here use Weave **0.1.0a16** and the **0.1.8 Agentic worker package**, whose core dependency is pinned to that Weave version. The catalog references below retain their own `1.0.0` definition and task versions. diff --git a/docs/guides/desktop.md b/docs/guides/desktop.md index 81e60b55..474f58e2 100644 --- a/docs/guides/desktop.md +++ b/docs/guides/desktop.md @@ -44,31 +44,31 @@ start them: ## Choose an installer Choose a matching installer **actually attached** to the -[v0.1.0a15 release](https://github.com/fireflyframework/firefly-weave/releases/tag/v0.1.0a15). -The desktop product version is `0.1.0-alpha.15`; its bundled Python host is -`0.1.0a15`. macOS bundles use **ad-hoc signing** for resource integrity; they are +[v0.1.0a16 release](https://github.com/fireflyframework/firefly-weave/releases/tag/v0.1.0a16). +The desktop product version is `0.1.0-alpha.16`; its bundled Python host is +`0.1.0a16`. macOS bundles use **ad-hoc signing** for resource integrity; they are **not Developer ID signed and not notarized**. Windows installers remain unsigned. Build and frozen-host smoke checks do not establish interactive GUI testing on every operating system. Your organization's installation policy still applies. | Computer | Target | Installer filename | | --- | --- | --- | -| macOS Apple silicon | `aarch64-apple-darwin` | `firefly-weave-studio-0.1.0-alpha.15-aarch64-apple-darwin.dmg` | -| macOS Intel | `x86_64-apple-darwin` | `firefly-weave-studio-0.1.0-alpha.15-x86_64-apple-darwin.dmg` | -| Windows x64 | `x86_64-pc-windows-msvc` | `firefly-weave-studio-0.1.0-alpha.15-x86_64-pc-windows-msvc.exe` or `.msi` | -| Linux x64 | `x86_64-unknown-linux-gnu` | `firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.deb` or `.AppImage` | +| macOS Apple silicon | `aarch64-apple-darwin` | `firefly-weave-studio-0.1.0-alpha.16-aarch64-apple-darwin.dmg` | +| macOS Intel | `x86_64-apple-darwin` | `firefly-weave-studio-0.1.0-alpha.16-x86_64-apple-darwin.dmg` | +| Windows x64 | `x86_64-pc-windows-msvc` | `firefly-weave-studio-0.1.0-alpha.16-x86_64-pc-windows-msvc.exe` or `.msi` | +| Linux x64 | `x86_64-unknown-linux-gnu` | `firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.deb` or `.AppImage` | Download the chosen installer and its target's checksum inventory, `weave-studio-TARGET-SHA256SUMS`, from that same release. The matrix describes filenames, not a promise that every asset is already available. If your matching -asset is absent, use the [browser installation](studio.md#install-the-alpha15-browser-application) +asset is absent, use the [browser installation](studio.md#install-the-alpha16-browser-application) instead. Alpha4 Python releases do not contain Studio or desktop installers. **Do not use the alpha5 macOS installers.** Their outer application bundle lacked its resource seal, causing macOS to report that the application was damaged. Alpha6 added explicit ad-hoc bundle signing and a strict verification gate for both -the built application and the application enclosed in its DMG, and alpha15 keeps -them. Download the matching alpha15 asset rather than attempting to bypass the +the built application and the application enclosed in its DMG, and alpha16 keeps +them. Download the matching alpha16 asset rather than attempting to bypass the alpha5 failure. Ad-hoc integrity does not establish publisher trust or Gatekeeper acceptance. @@ -110,9 +110,9 @@ This follows Tauri's [sidecar model](https://v2.tauri.app/develop/sidecar/) and ```sh # Inspect the downloaded installer without opening it. cd ~/Downloads - shasum -a 256 firefly-weave-studio-0.1.0-alpha.15-aarch64-apple-darwin.dmg + shasum -a 256 firefly-weave-studio-0.1.0-alpha.16-aarch64-apple-darwin.dmg # Show the expected digest for this exact filename. - grep 'firefly-weave-studio-0.1.0-alpha.15-aarch64-apple-darwin.dmg$' weave-studio-aarch64-apple-darwin-SHA256SUMS + grep 'firefly-weave-studio-0.1.0-alpha.16-aarch64-apple-darwin.dmg$' weave-studio-aarch64-apple-darwin-SHA256SUMS ``` Both displayed digests must match. For Intel, replace `aarch64-apple-darwin` @@ -150,9 +150,9 @@ matching `weave-studio-x86_64-pc-windows-msvc-SHA256SUMS` inventory first. ```powershell # Inspect the downloaded EXE before running it. Set-Location "$HOME\Downloads" -Get-FileHash .\firefly-weave-studio-0.1.0-alpha.15-x86_64-pc-windows-msvc.exe -Algorithm SHA256 +Get-FileHash .\firefly-weave-studio-0.1.0-alpha.16-x86_64-pc-windows-msvc.exe -Algorithm SHA256 # Compare the digest with the line for this exact filename. -Select-String -Path .\weave-studio-x86_64-pc-windows-msvc-SHA256SUMS -Pattern 'firefly-weave-studio-0.1.0-alpha.15-x86_64-pc-windows-msvc.exe$' +Select-String -Path .\weave-studio-x86_64-pc-windows-msvc-SHA256SUMS -Pattern 'firefly-weave-studio-0.1.0-alpha.16-x86_64-pc-windows-msvc.exe$' ``` Expected: `Get-FileHash` prints a `Hash` value, and `Select-String` prints the @@ -160,8 +160,8 @@ inventory line for the same file. For MSI, substitute `.msi` in both commands. Compare the two digests without regard to letter case; stop on a mismatch. Double-click the verified installer, complete its setup, then open **Firefly Weave Studio** from the Start menu. The installer may need network access to provision WebView2. Unsigned-installation warnings remain -subject to your organization's policy. The MSI's internal version is `0.1.15`, a -monotonic Windows Installer counter; the displayed product remains alpha15. +subject to your organization's policy. The MSI's internal version is `0.1.16`, a +monotonic Windows Installer counter; the displayed product remains alpha16. ## Install on Linux @@ -172,8 +172,8 @@ application where your distribution supports its runtime. Download the matching ```sh # Enter the download directory, verify this exact file, then install only on success. cd ~/Downloads && - grep 'firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.deb$' weave-studio-x86_64-unknown-linux-gnu-SHA256SUMS | sha256sum --check && - sudo apt install ./firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.deb + grep 'firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.deb$' weave-studio-x86_64-unknown-linux-gnu-SHA256SUMS | sha256sum --check && + sudo apt install ./firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.deb ``` Expected: `sha256sum` prints the file name followed by `OK`, and only then does @@ -183,9 +183,9 @@ application launcher. For AppImage: ```sh # Verify this exact portable file; a failed or missing checksum prevents launch. cd ~/Downloads && - grep 'firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.AppImage$' weave-studio-x86_64-unknown-linux-gnu-SHA256SUMS | sha256sum --check && - chmod +x firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.AppImage && - ./firefly-weave-studio-0.1.0-alpha.15-x86_64-unknown-linux-gnu.AppImage + grep 'firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.AppImage$' weave-studio-x86_64-unknown-linux-gnu-SHA256SUMS | sha256sum --check && + chmod +x firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.AppImage && + ./firefly-weave-studio-0.1.0-alpha.16-x86_64-unknown-linux-gnu.AppImage ``` Linux requires the distribution's WebKitGTK runtime, and AppImage execution may @@ -480,7 +480,7 @@ with a text editor. **Untested platform cases.** On macOS 11.0 to 11.2 the webview lacks the download support the app relies on, so an export may save nothing even though the confirmation appears; use macOS 11.3 or later, or the -[browser installation](studio.md#install-the-alpha15-browser-application). macOS +[browser installation](studio.md#install-the-alpha16-browser-application). macOS may ask whether Firefly Weave Studio can use your Downloads folder the first time you export. On Windows, WebView2 may ask whether to allow the second of the two files. @@ -637,8 +637,8 @@ source checkout, you can run that same gate on an explicitly downloaded DMG: ```sh # Verify resource integrity without launching the application. -# Replace the path with the actual alpha15 installer you downloaded. -.venv/bin/python desktop/scripts/verify_macos_bundle.py /path/to/firefly-weave-studio-0.1.0-alpha.15-aarch64-apple-darwin.dmg +# Replace the path with the actual alpha16 installer you downloaded. +.venv/bin/python desktop/scripts/verify_macos_bundle.py /path/to/firefly-weave-studio-0.1.0-alpha.16-aarch64-apple-darwin.dmg ``` The build also smoke-tests the frozen host after Tauri signs it. Hardened runtime @@ -693,7 +693,7 @@ After this workflow exists on `main` and on the reviewed release tag, dispatch i ```sh # Replace this example with the exact reviewed tag that contains the workflow. -gh workflow run desktop-notarized.yml --ref v0.1.0a15 -f notarize=true +gh workflow run desktop-notarized.yml --ref v0.1.0a16 -f notarize=true ``` Approve the protected environment only after checking the tag and commit. Both diff --git a/docs/guides/docker-development.md b/docs/guides/docker-development.md index 60694d73..ff7465f7 100644 --- a/docs/guides/docker-development.md +++ b/docs/guides/docker-development.md @@ -40,10 +40,10 @@ application development. ```sh # Confirm that the installed CLI matches the source version below. weave --version -# Expected: Firefly Weave 0.1.0a15. +# Expected: Firefly Weave 0.1.0a16. # Download the matching operator files into a new, dedicated directory. -git clone --branch v0.1.0a15 --depth 1 \ +git clone --branch v0.1.0a16 --depth 1 \ https://github.com/fireflyframework/firefly-weave.git weave-platform-a15 cd weave-platform-a15 ``` diff --git a/docs/guides/learning-path.md b/docs/guides/learning-path.md index 8b474216..054064d6 100644 --- a/docs/guides/learning-path.md +++ b/docs/guides/learning-path.md @@ -65,7 +65,7 @@ have what you need. One person often has several roles, especially on a laptop. [Who does what](roles-and-lifecycle.md) explains the roles and the permissions each one needs. -**Every path starts with the v0.1.0a15 release.** [Install the CLI](../installation.md) +**Every path starts with the v0.1.0a16 release.** [Install the CLI](../installation.md) first. The release includes everything these paths use: the Studio editor and its API action builder, saved platforms (`weave auth setup`), REST calls without code, and `weave platform user`. @@ -75,7 +75,7 @@ code, and `weave platform user`. You draw processes, add approvals and API calls, and run them. **What you need:** the CLI and -[Studio's browser application](studio.md#install-the-alpha15-browser-application), +[Studio's browser application](studio.md#install-the-alpha16-browser-application), or the [desktop app](desktop.md), and, from step 4 on, a platform: your team's server address and an account, or a [local platform](local-platform.md), which needs Docker. @@ -84,7 +84,7 @@ needs Docker. | --- | --- | --- | | 1 | [Concepts](../concepts.md), including [Coming from BPM/BPMN](../concepts.md#coming-from-bpmbpmn) | The vocabulary: workflow, step, activation, run, and how BPMN ideas map to them | | 2 | [Your first workflow](../quickstart.md) | A workflow validated and simulated on your computer, with no platform | -| 3 | [Install Studio](studio.md#install-the-alpha15-browser-application), then [draw your first workflow](studio.md#try-it-draw-your-first-workflow) | A process drawn in the visual editor and checked as you edit | +| 3 | [Install Studio](studio.md#install-the-alpha16-browser-application), then [draw your first workflow](studio.md#try-it-draw-your-first-workflow) | A process drawn in the visual editor and checked as you edit | | 4 | [Start a local platform](local-platform.md), its steps 1 to 8, or [connect Studio](studio.md#connect-to-a-platform) to your team's platform | A platform where you can publish, run, and approve; on the local platform, create your person with every role, as its step 5 explains | | 5 | [Step reference](studio-step-reference.md) | The right properties for each kind of step | | 6 | [Human tasks](human-tasks.md) | An approval assigned to real reviewers; a task manager creates the reviewer binding with the CLI | diff --git a/docs/guides/local-platform.md b/docs/guides/local-platform.md index 8395e34d..f8f670fa 100644 --- a/docs/guides/local-platform.md +++ b/docs/guides/local-platform.md @@ -86,8 +86,8 @@ decides which features the platform has. With the alpha7 CLI from directory, and keep any checkout you already use for development untouched: ```sh -# Download the alpha15 release's operator files into a new directory. -git clone --branch v0.1.0a15 --single-branch https://github.com/fireflyframework/firefly-weave.git firefly-weave-local +# Download the alpha16 release's operator files into a new directory. +git clone --branch v0.1.0a16 --single-branch https://github.com/fireflyframework/firefly-weave.git firefly-weave-local # Run the following steps from that matching checkout. cd firefly-weave-local ``` @@ -367,8 +367,8 @@ Studio is the visual editor. Because the CLI and Studio share saved platforms, Studio opens already connected to the platform you saved in step 6. **First install Studio's browser application** if you have not yet: download -the matching alpha15 bundle and install it as in -[Install the alpha15 browser application](studio.md#install-the-alpha15-browser-application). +the matching alpha16 bundle and install it as in +[Install the alpha16 browser application](studio.md#install-the-alpha16-browser-application). Then start Studio: ```sh diff --git a/docs/guides/standalone.md b/docs/guides/standalone.md index 5bfa4d86..ad42fcd0 100644 --- a/docs/guides/standalone.md +++ b/docs/guides/standalone.md @@ -96,18 +96,18 @@ checkout. If you do not already have it, run: ```sh # Clone the alpha7 release that matches the CLI, then install its locked dependencies. -git clone --branch v0.1.0a15 --single-branch \ +git clone --branch v0.1.0a16 --single-branch \ https://github.com/fireflyframework/firefly-weave.git cd firefly-weave uv sync --locked --python 3.12 ``` -The clone selects the same **v0.1.0a15** release as the CLI installation guide. +The clone selects the same **v0.1.0a16** release as the CLI installation guide. A detached-HEAD message is expected when Git opens a release tag; this tutorial does not require creating a branch or editing application source. If you already have a checkout, enter its root and run `git describe --tags --exact-match`. -For this released walkthrough, the result must be `v0.1.0a15`. If the checkout has +For this released walkthrough, the result must be `v0.1.0a16`. If the checkout has another version or local development work, preserve it and clone the release into a separate directory by adding a new directory name to the clone command above. Contributors intentionally using unreleased source should use that checkout's diff --git a/docs/guides/studio-step-reference.md b/docs/guides/studio-step-reference.md index 9a73f6e8..0d2d91b4 100644 --- a/docs/guides/studio-step-reference.md +++ b/docs/guides/studio-step-reference.md @@ -31,13 +31,13 @@ Studio writes the same versioned definition language that you can edit as YAML or build with the CLI and the Python SDK, so every choice here is visible in the **Source** tab. -**This page describes the Studio 0.1.0a15 editor.** The step kinds and native +**This page describes the Studio 0.1.0a16 editor.** The step kinds and native human tasks are also part of alpha6, but several controls described here, such as the canvas step picker, the searchable action picker, the **Value** / typed input rows with **Use data** and **Calculate…**, the schema designer, the API action builder, and the simulation setup and panel, are new in 0.1.0a7. An alpha6 or earlier browser bundle does not have them; to see the same screens, -[install the alpha15 browser application](studio.md#install-the-alpha15-browser-application). +[install the alpha16 browser application](studio.md#install-the-alpha16-browser-application). **How to use this page:** diff --git a/docs/guides/studio.md b/docs/guides/studio.md index 9f6cf85d..e57ecf9e 100644 --- a/docs/guides/studio.md +++ b/docs/guides/studio.md @@ -38,10 +38,10 @@ computer at `127.0.0.1`. That host keeps your saved platforms, which it shares with the `weave` command line, and keeps your sign-in in the operating system's credential store. The page never receives your tokens. -**This page describes Studio 0.1.0a15.** An alpha6 or earlier browser bundle +**This page describes Studio 0.1.0a16.** An alpha6 or earlier browser bundle shows an earlier connection assistant, which imports a login configuration file, and lacks the editor features and API actions described here. To follow this -page, [install the alpha15 browser application](#install-the-alpha15-browser-application). +page, [install the alpha16 browser application](#install-the-alpha16-browser-application). ![Studio and runtime boundaries](../diagrams/studio-and-runtime.svg) @@ -55,7 +55,7 @@ happens on the platform and keeps running after you close Studio. | Your goal | What must be running | Start here | | --- | --- | --- | | Open Studio as a native desktop app | A matching desktop build for your operating system | [Install desktop](desktop.md) | -| Draw, import, or validate a workflow on your computer | Studio's local host; no account | [Install Studio](#install-the-alpha15-browser-application), then [work locally](#work-locally-without-signing-in) | +| Draw, import, or validate a workflow on your computer | Studio's local host; no account | [Install Studio](#install-the-alpha16-browser-application), then [work locally](#work-locally-without-signing-in) | | Learn the editor with a small example | Studio's local host | [Try it: draw your first workflow](#try-it-draw-your-first-workflow) | | Configure steps in the new editor's step details | Studio's local host | [Configure a step in step details](#configure-a-step-in-step-details) | | Save and run workflows on your laptop | Studio plus a separate local Weave platform | [Start the platform](local-platform.md), then [connect Studio](#connect-to-a-platform) | @@ -72,45 +72,45 @@ computer. You can create, import, edit, and validate workflow definitions. Connect when you want to save them to a shared platform, run processes, or handle tasks. This status does not mean your computer has lost its internet connection. -## Install the alpha15 browser application +## Install the alpha16 browser application Alpha7 includes the Studio host. Its browser assets are an optional, matching release bundle; the Python wheel does not embed the Angular application. Alpha4 does not include Studio. Download all files from the same -[v0.1.0a15 release](https://github.com/fireflyframework/firefly-weave/releases/tag/v0.1.0a15). +[v0.1.0a16 release](https://github.com/fireflyframework/firefly-weave/releases/tag/v0.1.0a16). The CLI installer does not automatically fetch or install the Studio ZIP. -Use Python 3.12 or newer. The alpha15 CLI installer includes the Studio host +Use Python 3.12 or newer. The alpha16 CLI installer includes the Studio host and authentication dependencies, but downloads no browser ZIP automatically. These Bash/Zsh commands need neither Node nor a source checkout: ```sh # Install the pinned CLI into its isolated installation directory. # Review the installer first using the download-and-inspect alternative in Installation. -curl --fail --location https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/install.sh \ - | sh -s -- --version v0.1.0a15 +curl --fail --location https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/install.sh \ + | sh -s -- --version v0.1.0a16 # Make the installed command available in this terminal. export PATH="$HOME/.local/bin:$PATH" # Check that the host version matches the browser bundle you will install. weave --version # Keep the downloaded optional browser bundle and its digest together. -mkdir weave-studio-alpha15 -cd weave-studio-alpha15 -curl --fail --location --remote-name https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/firefly-weave-studio-0.1.0a15.zip -curl --fail --location --remote-name https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/firefly-weave-studio-0.1.0a15.zip.sha256 +mkdir weave-studio-alpha16 +cd weave-studio-alpha16 +curl --fail --location --remote-name https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/firefly-weave-studio-0.1.0a16.zip +curl --fail --location --remote-name https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/firefly-weave-studio-0.1.0a16.zip.sha256 # Verify the bundle on macOS. Stop if the check fails. -shasum -a 256 --check firefly-weave-studio-0.1.0a15.zip.sha256 +shasum -a 256 --check firefly-weave-studio-0.1.0a16.zip.sha256 # On Linux, use sha256sum --check in place of shasum -a 256 --check. # Install only the bundle whose version and verified digest match this host. -weave studio install --bundle firefly-weave-studio-0.1.0a15.zip \ - --sha256 "$(awk '{print $1}' firefly-weave-studio-0.1.0a15.zip.sha256)" +weave studio install --bundle firefly-weave-studio-0.1.0a16.zip \ + --sha256 "$(awk '{print $1}' firefly-weave-studio-0.1.0a16.zip.sha256)" # Start the local host without opening a browser automatically. weave studio --no-browser ``` -Expected: `weave --version` prints `Firefly Weave 0.1.0a15`, the checksum line +Expected: `weave --version` prints `Firefly Weave 0.1.0a16`, the checksum line ends with `OK`, and the install prints `Studio installed at PATH. Start it with: weave studio`. The host then prints `Firefly Weave Studio · Local authoring (no platform selected)`, or `Firefly Weave Studio · Platform: NAME` when a saved @@ -132,7 +132,7 @@ or the [remote deployment guide](../operations/remote-deployment.md). **This route is for contributors,** and for trying changes made after the latest release; the release bundle above already has everything this page -describes. To reproduce the alpha15 release exactly, check out `v0.1.0a15` +describes. To reproduce the alpha16 release exactly, check out `v0.1.0a16` instead; development `main` can differ from released assets. From the repository root, install the development dependencies first. Node 24 @@ -168,7 +168,7 @@ while you use Studio. **Already installed a release browser bundle?** Installed bundles are kept per version, and a checkout can report the same version as the latest release, for -example `0.1.0a15`. A plain `weave studio` then keeps serving the installed +example `0.1.0a16`. A plain `weave studio` then keeps serving the installed release screens, and `weave studio install` keeps that bundle instead of replacing it. Always start a source build with `--assets studio/dist/studio/browser`. diff --git a/docs/guides/weave-ai.md b/docs/guides/weave-ai.md index ca9140df..75e9c882 100644 --- a/docs/guides/weave-ai.md +++ b/docs/guides/weave-ai.md @@ -28,7 +28,7 @@ Weave AI has its own configuration per environment. It never reads a workflow's `llmProfiles`, and changing an LLM step does not change the assistant. The Studio **AI models** examples and named provider-connection selection -shown here use Weave **0.1.0a15**. Use the matching **0.1.7 Agentic worker +shown here use Weave **0.1.0a16**. Use the matching **0.1.8 Agentic worker package** for the independently deployed Weave AI gateway. ## Follow a question through review diff --git a/docs/installation.md b/docs/installation.md index dc7c727c..63dbc6ff 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -27,18 +27,18 @@ The installer puts the CLI in its own Python environment, so your applications' packages are never affected. It includes local authoring, the API client with sign-in support, OpenAPI import, and the host that runs Studio. Studio's browser application is a separate download; see the -[Studio guide](guides/studio.md#install-the-alpha15-browser-application). +[Studio guide](guides/studio.md#install-the-alpha16-browser-application). ## Choose the installation path -**Recommended:** install the pinned **v0.1.0a15 alpha** below. You do not need Git, +**Recommended:** install the pinned **v0.1.0a16 alpha** below. You do not need Git, a source checkout, Docker, or `sudo`. An alpha is a preview release: use it to evaluate Weave, and check the [current limits](capabilities.md). | Your situation | Start here | | --- | --- | | You want to write, check, and simulate workflows, connect to your team's platform by its address (`weave auth setup`), or call REST APIs without code | [Install a release](#install-a-release), then [check the result](#check-the-result) | -| You want the visual editor in your browser | [Install Studio](guides/studio.md#install-the-alpha15-browser-application) | +| You want the visual editor in your browser | [Install Studio](guides/studio.md#install-the-alpha16-browser-application) | | You want a native desktop app | [Desktop installation](guides/desktop.md) | | You contribute code, or want to try changes made after the release | [Install the current source](#install-the-current-source) | | You already have the CLI | [Upgrade or select another version](#installation-locations-and-upgrades) | @@ -89,8 +89,8 @@ explicitly: # Stop if downloading the installer fails. set -o pipefail curl --proto '=https' --tlsv1.2 -fsSL \ - https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/install.sh \ - | sh -s -- --version v0.1.0a15 + https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/install.sh \ + | sh -s -- --version v0.1.0a16 ) ``` @@ -100,7 +100,7 @@ environment; and tests the new command before it makes it available. The first installation can take several minutes. No services start and no cloud resources are created. -Expected, at the end: `Installed Firefly Weave 0.1.0a15: PATH`, then `Run: PATH +Expected, at the end: `Installed Firefly Weave 0.1.0a16: PATH`, then `Run: PATH --help`, where `PATH` is the new command (by default `~/.local/bin/weave`). When that directory is not on your `PATH`, the installer also prints the `export` line to add. The last line says where earlier environments are kept for @@ -112,7 +112,7 @@ instead: ```sh # Download the installer to a file instead of running it directly. curl --proto '=https' --tlsv1.2 -fsSL \ - https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/install.sh \ + https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/install.sh \ -o weave-install.sh ``` @@ -121,7 +121,7 @@ editor, then run it: ```sh # Install the same pinned release with the reviewed file. -sh weave-install.sh --version v0.1.0a15 +sh weave-install.sh --version v0.1.0a16 ``` Expected: the same output as above. Keep the file if you want to reuse it for @@ -147,7 +147,7 @@ weave version --output json weave docs platform ``` -Expected: `Firefly Weave 0.1.0a15`; the help with its command groups and +Expected: `Firefly Weave 0.1.0a16`; the help with its command groups and examples; one JSON object with `version`, `apiVersion`, and `irVersion`; and the address of the platform guide. The Firefly banner appears only in the main help; it never appears in command results or JSON output. @@ -183,7 +183,7 @@ remove or move the Python interpreter the environment was built with. ### Select a version or release channel -The explicit `--version v0.1.0a15` makes an installation repeatable. To upgrade, +The explicit `--version v0.1.0a16` makes an installation repeatable. To upgrade, use the installer URL and `--version` value of the new release shown on [GitHub Releases](https://github.com/fireflyframework/firefly-weave/releases). Tags start with `v`; `weave --version` shows the package version without it. @@ -192,7 +192,7 @@ With a downloaded `weave-install.sh`, you can select a channel instead: | Command | What it installs | | --- | --- | -| `sh weave-install.sh --version v0.1.0a15` | Exactly this documented alpha | +| `sh weave-install.sh --version v0.1.0a16` | Exactly this documented alpha | | `sh weave-install.sh --prerelease` | The most recently published release, including alpha previews | | `sh weave-install.sh` | The latest stable release only | @@ -236,7 +236,7 @@ removal option: # Stop if downloading the installer fails. set -o pipefail curl --proto '=https' --tlsv1.2 -fsSL \ - https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a15/install.sh \ + https://github.com/fireflyframework/firefly-weave/releases/download/v0.1.0a16/install.sh \ | sh -s -- --uninstall ) ``` @@ -257,7 +257,7 @@ delete them yourself if you want no trace. | What you see | Why | What to do | | --- | --- | --- | | A Python version or `venv` error | The selected Python is older than 3.12, or lacks `venv` | Set `WEAVE_INSTALL_PYTHON` to Python 3.12 or newer; install your distribution's `venv` package | -| No installable release was found | You asked for the latest stable release, and only alphas exist | Run the pinned `v0.1.0a15` command above, or add `--prerelease` | +| No installable release was found | You asked for the latest stable release, and only alphas exist | Run the pinned `v0.1.0a16` command above, or add `--prerelease` | | Missing installer assets | The selected release is older than this installer | Choose `v0.1.0a2` or later; never mix files from different releases | | A checksum mismatch | A downloaded file is not the published one | Stop, and download the complete release again from the same trusted source | | The installer refuses to replace `weave` | Another program already uses that command path | Choose a different `--bin-dir`, or inspect the old command before replacing it yourself | @@ -268,7 +268,7 @@ delete them yourself if you want no trace. This route installs **unreleased development source from `main`**, for contributors and for trying changes made after the latest release. You do not -need it for any feature this documentation describes: the v0.1.0a15 release +need it for any feature this documentation describes: the v0.1.0a16 release includes them. Behavior on `main` can change before the next release. Follow the documentation of the same checkout. diff --git a/docs/reference/local-runtime.md b/docs/reference/local-runtime.md index 1e1c93a8..769f1c04 100644 --- a/docs/reference/local-runtime.md +++ b/docs/reference/local-runtime.md @@ -411,7 +411,7 @@ supervision, none of which the local setup scripts provision. The locked framework is the published **PyFly 26.9.15**; the exact wheel hash and upstream commit are in the [project metadata](../../pyproject.toml). The API -package version is `0.1.0a15`; a checkout of `main` can carry unreleased changes +package version is `0.1.0a16`; a checkout of `main` can carry unreleased changes on top of it. Validate readiness, an authorized workflow, and your [backup and restore procedure](../operations/backup-restore.md) in the environment you intend to operate. diff --git a/docs/reference/native-openapi.md b/docs/reference/native-openapi.md index 16bcaa91..5e898956 100644 --- a/docs/reference/native-openapi.md +++ b/docs/reference/native-openapi.md @@ -118,7 +118,7 @@ each of these. ## Versions and what the document proves - The document's `info.version` is the API version, `1`. It is separate from - the package version (`0.1.0a15`) and from the workflow language version + the package version (`0.1.0a16`) and from the workflow language version (`weave/v1alpha1`). - The exporter uses PyFly 26.9.15. The exact URL, SHA-256, and upstream provenance are in [project metadata](../../pyproject.toml) and the lockfile. diff --git a/pyproject.toml b/pyproject.toml index 2d3fc6d7..7aa1143a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ build-backend = "hatchling.build" [project] name = "firefly-weave" -version = "0.1.0a15" +version = "0.1.0a16" description = "API-first workflow orchestration and integration platform built on PyFly" readme = "README.md" license = "Apache-2.0" diff --git a/src/firefly_weave/__init__.py b/src/firefly_weave/__init__.py index eccdf6e3..795f7501 100644 --- a/src/firefly_weave/__init__.py +++ b/src/firefly_weave/__init__.py @@ -16,4 +16,4 @@ """Firefly Weave's offline contracts and workflow tooling.""" -__version__ = "0.1.0a15" +__version__ = "0.1.0a16" diff --git a/uv.lock b/uv.lock index a35c9646..94569f90 100644 --- a/uv.lock +++ b/uv.lock @@ -715,7 +715,7 @@ wheels = [ [[package]] name = "firefly-weave" -version = "0.1.0a15" +version = "0.1.0a16" source = { editable = "." } dependencies = [ { name = "click" }, diff --git a/workers/agentic/pyproject.toml b/workers/agentic/pyproject.toml index ed259bf7..6d20a822 100644 --- a/workers/agentic/pyproject.toml +++ b/workers/agentic/pyproject.toml @@ -20,13 +20,13 @@ build-backend = "hatchling.build" [project] name = "weave-agentic-worker" -version = "0.1.7" +version = "0.1.8" license = "Apache-2.0" license-files = ["LICENSE", "NOTICE"] description = "Lease-bound Firefly Agentic model worker for Firefly Weave" requires-python = ">=3.13,<3.15" dependencies = [ - "firefly-weave==0.1.0a15", + "firefly-weave==0.1.0a16", "pyfly[oauth2-client] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.09.15/pyfly-26.9.15-py3-none-any.whl#sha256=c712b314cbaaaaec9aa7ec7f256fb8a31e6faf228e3bd52715356fd689c8943b", "fireflyframework-agentic @ https://github.com/fireflyframework/fireflyframework-agentic/releases/download/v26.09.0/fireflyframework_agentic-26.9.0-py3-none-any.whl#sha256=a6ecb82abd54c9a1d4fa71af46593b57228ed3336e41ea0f0e821724d9bf0224", "httpx>=0.28.1,<1", diff --git a/workers/agentic/uv.lock b/workers/agentic/uv.lock index 4442df69..121b6cd9 100644 --- a/workers/agentic/uv.lock +++ b/workers/agentic/uv.lock @@ -676,7 +676,7 @@ wheels = [ [[package]] name = "firefly-weave" -version = "0.1.0a15" +version = "0.1.0a16" source = { directory = "../../" } dependencies = [ { name = "click" }, @@ -3164,7 +3164,7 @@ wheels = [ [[package]] name = "weave-agentic-worker" -version = "0.1.7" +version = "0.1.8" source = { editable = "." } dependencies = [ { name = "firefly-weave" }, diff --git a/workers/files/pyproject.toml b/workers/files/pyproject.toml index 17343ce9..4462fdde 100644 --- a/workers/files/pyproject.toml +++ b/workers/files/pyproject.toml @@ -20,12 +20,12 @@ build-backend = "hatchling.build" [project] name = "weave-files-worker" -version = "0.1.7" +version = "0.1.8" license = "Apache-2.0" license-files = ["LICENSE", "NOTICE"] description = "Lease-bound FTP, SFTP and cloud-drive transfers for Firefly Weave" requires-python = ">=3.12,<3.15" -dependencies = ["firefly-weave[worker]==0.1.0a15", "httpx>=0.28.1,<1", "aioftp==0.28.0", "asyncssh==2.24.0"] +dependencies = ["firefly-weave[worker]==0.1.0a16", "httpx>=0.28.1,<1", "aioftp==0.28.0", "asyncssh==2.24.0"] [project.scripts] weave-files-worker = "weave_files_worker.main:run" diff --git a/workers/files/uv.lock b/workers/files/uv.lock index b1d6d5f6..bfb802bd 100644 --- a/workers/files/uv.lock +++ b/workers/files/uv.lock @@ -230,7 +230,7 @@ wheels = [ [[package]] name = "firefly-weave" -version = "0.1.0a15" +version = "0.1.0a16" source = { directory = "../../" } dependencies = [ { name = "click" }, @@ -1296,7 +1296,7 @@ wheels = [ [[package]] name = "weave-files-worker" -version = "0.1.7" +version = "0.1.8" source = { editable = "." } dependencies = [ { name = "aioftp" }, From 7cb872418aba8e03478fa7b4da8a87afbe1e667b Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Mon, 19 Oct 2026 21:19:57 -0700 Subject: [PATCH 2/6] Write the 0.1.0a16 changelog and upgrade notes Turn the unreleased notes into the 0.1.0a16 section, grouped by area, and add what had not been listed yet: Studio's Operate area, the new editor's canvas, and the test and CI changes. Drop the call compiler's note that child runs do not start yet, now that they do. Add the alpha16 upgrade row and turn the notes after alpha15 into what changes in alpha16, with the measured migration times, upgrading CLIs and SDKs with the server, and finishing runs that use calls or loops before any rollback. --- CHANGELOG.md | 426 ++++++++++++++++++++---------------- docs/capabilities.md | 10 +- docs/operations/upgrades.md | 48 +++- 3 files changed, 292 insertions(+), 192 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb79d718..fbd2c21c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,8 +18,27 @@ SPDX-License-Identifier: Apache-2.0 # Changelog -## Unreleased +## 0.1.0a16 +### Workflow language + +- The compiler checks and compiles **Call a workflow** (`callWorkflow`) against + the exact published version it calls: that version must opt in with + `spec.callable` (any workflow, or only `allowedCallers`), `with` is checked + against its input schema, a `businessKey` must be text of 1 to 200 characters, + and the step returns the called workflow's output, a `{status, runId, output, + error}` envelope with `onFailure: continue`, or `null` with `mode: detach`. New + diagnostics `WV-COMP-UNKNOWN_WORKFLOW`, `CALL_NOT_CALLABLE`, `CALL_RECURSION`, + `CALL_DEPTH` (more than 8 calls deep, the new compiler limit + `max_call_depth`), and `CALL_MODE` point at the field to fix. The called + version is locked as an interface dependency: the caller's artifact carries + that version's definition, so its digest matches the published one, but + compiling, importing, and activating the caller read only its input and output + schemas. Activation takes `workflow_activation_ids`, one live + activation of each called version in the same environment, and refuses wrong + or missing pins with `422 WV-READINESS-CALL`. Workflows without calls compile to + the same bytes as before. `weave workflow explain` and `weave workflow graph` show calls, + and the SDK's `WorkflowBuilder.with_callable()` writes `spec.callable`. - Workflows can call other workflows. A **Call a workflow** step starts the exact version it names as a separate child run of the pinned activation, under the calling run's principal, which must still hold `run.start`. A waiting call @@ -44,23 +63,51 @@ SPDX-License-Identifier: Apache-2.0 reached its caller (`WV-RUN-PURGE-BLOCKED`). Upgrade CLIs and SDKs together with the server: older clients reject the new `call_completed` event type and `caller` field when they validate history and runs. -- With the new editor, Mapped values in step details are **formulas** such as - `input.amount > 1000 and exists(input.email)`: suggestions from the data the - field can read, references as pills, plain-word messages that never block - typing (text that doesn't parse shows **Not applied** and keeps the last - formula), a standard form on blur, **Edit formula** beside the input's - fields, and drops at the pointer. Templates take any formula between - `{{ }}`. Under a Mapped field, `= value` and the **Result** panel show what it - gives with the trigger's test input, computed in the browser with the - platform's rules (held to them by `scripts/studio_expression_corpus.py`); - formulas reading secret values are never previewed, and previews send - nothing. **Call an API** shows the full address of its request. Studio now - includes CodeMirror (`@codemirror/state`, `@codemirror/view`, MIT), loaded - with the first formula field. See `docs/reference/formulas.md`. -- Publish… and Simulate show why they stopped (for example, an account that - can't publish actions) as soon as Studio has loaded the code that publishes - the workflow's own actions, instead of waiting for another change on the - page. +- The compiler checks and compiles **Loop over items** (`forEach`): `/item`, + `/index`, and `/loops//…` inside a loop body, a typed list of results after + it, `WV-COMP-LOOP_*` diagnostics for wrong items, scope, nesting, limits, and + signals in a body (with a suggested `maxItems` for a loop budget that is too + high), and an IR `forEach` node with an `each` edge and an `each` join that + requires the `flow.forEach` feature. A platform that does not list the + feature refuses to publish, import, or activate such a workflow with + `WV-IR-UNSUPPORTED`; workflows without loops compile to the same bytes as + before. The compiler limits add `max_loop_items`, `max_loop_depth`, and + `max_run_iterations`. Studio's local host answers `POST /studio/local/scope` + with the data a field may use, including the current loop item and position. +- Loops run. A **Loop over items** (`forEach`) step runs its body once per + element, `concurrency` at a time, in one run, and its output lists one result + per element in element order, whatever order the iterations finish in. Each + iteration's steps, tasks, human tasks, waits, and incidents use their own + instance key (`send[2]`); a task incident in one iteration suspends the run, a + `fail` step in one fails it, and canceling ends every iteration. Finished + iterations are removed from the run state. An `items` value that is not a list, + more elements than `maxItems`, or results over the 1 MiB payload limit open + `WV-RUNTIME-LOOP-ITEMS`, `WV-RUNTIME-LOOP-LIMIT`, or `WV-RUNTIME-LOOP-OUTPUT`. + A long loop yields after 4,000 units of work in one event and continues about + one scanner poll later; the capabilities response reports the budget as + `operations.runtime.loop_units_per_turn`. The platform now lists + `flow.forEach` and `forEach` in its language manifest and capabilities, so it + publishes, imports, and activates workflows with loops. Debug sessions run + loops with the same reducer. New counters `weave.loop_iterations` (`status: + ok` for each collected result, `cancelled` for each iteration still running + when its run ends) and `weave.loop_yields`. Upgrade the CLI and SDK together with the server: older + clients do not know the human task `instance_key` and `iteration` fields or + the new capability fields. +- Evaluating an expression inside a loop body and admitting a long event no + longer walk data that has not changed since the event started, so a loop's + cost grows linearly with its number of elements. +- Run state, history, tasks, deadlines, and incidents name each run of a step by + its instance key, which equals the step ID outside loops, so existing workflows + keep byte-identical transitions and history. Deadline scans, incident + resolution, replay, exported history, and debug sessions find the step behind + any instance key. +- Human task views add `instance_key` and `iteration` for tasks created inside a + loop iteration; both are omitted for every other task. +- The capacity check of one event's work runs at its end and after every 64 + steps or 1 MiB of new step output, instead of after every step. Work over + capacity is still refused, but the refusal can happen at a later step of the + same event, and when a later step of that event fails, the run opens that + step's incident instead. - Simulations and debug sessions address loop iterations. A mock under `node:send[2]` answers iteration 2 of `send` only and wins over `node:send`, which wins over `action:` mocks; a breakpoint on `send[2]` stops before that @@ -80,6 +127,9 @@ SPDX-License-Identifier: Apache-2.0 lists them in `result.missing_features` when a session is created, read or sent a command, and the CLI lists them in its message. Upgrade the SDK together with the server to read debug views of workflows with loops. + +### Runs, incidents, and workers + - Serve bounded run summaries and classified step timelines with fresh scoped authorization. Timeline output remains optional; legacy timings stay unknown. Logs remain unavailable with HTTP 501. @@ -166,13 +216,6 @@ SPDX-License-Identifier: Apache-2.0 `registered_desc`, unknown times last. Cursors issued before the upgrade are refused, unknown query parameters are rejected, and an out-of-range `limit` answers `WV-VALIDATION` instead of `WV-PAGE`. Pages stay limited to 8 MiB. -- Studio's Workers page asks the platform for current workers, last contact - first, and for every worker with **Show retired workers**. Earlier Studio - hosts and desktop apps get the - reduced default list from an upgraded server, because the Studio bridge - forwards answers unchanged: their Workers page lists only current workers, and - **Show revoked workers** shows none. Upgrade Studio and the desktop app with - the server. - Worker reads and lists add optional `placement` (target, deployment and component), matched from the latest complete, unexpired observation of the targets the reader may read, and `drained_at`, when the worker started @@ -213,8 +256,103 @@ SPDX-License-Identifier: Apache-2.0 and reads degraded after 3 failed cycles in a row or among the last 20. An outbox cycle that cannot start a delivery, because the platform is not ready or no delivery slot is free, is neither a success nor a failure. -- Studio's host bridge forwards the environment summary, the telemetry - settings and `releases.usage`. + +### AI and connections + +- Run AI tasks on a local Ollama model: `weave platform ai enable --ollama auto|host|container` + (or `--ollama-url URL`) sets up the AI gateway, the Agentic worker, a version 2 AI + policy, development-only private-origin entries and a keyless `ollama-local` + connection, and tests a real model call; `ai status`, `ai disable` and `ai models` + complete it. +- Model endpoints accept plain HTTP only through private-origin entries with + `purpose: model` that send no credential. The reserved secret handle + `no-credential` marks such connections and is never resolved; operator grants + under that name are ignored with a warning, and `weave platform secret set` + refuses it. +- New operation `ai_connections.test`; `weave connections test` on an AI connection + now calls the model through the AI gateway instead of always reporting failure. + AI connection tests, dedicated or generic, share a limit of six per minute per + person and answer 429 `WV-AI-RATE-LIMITED` beyond it. +- The AI gateway gains `POST /v1/test` and `POST /v1/models`, and the API accepts a + plain HTTP gateway endpoint on a loopback address that a private-origin `model` + entry with loopback credentials lists. An endpoint with a trailing slash is refused. +- The Agentic worker reports `LLM_MODEL_NOT_FOUND`, `LLM_UNREACHABLE`, `LLM_AUTH`, + `LLM_RATE_LIMITED`, `LLM_CONTEXT_LIMIT` and `LLM_NO_TOOL_SUPPORT` instead of + `LLM_PROVIDER`, accepts `WEAVE_AGENTIC_CAPACITY`, and signs in and calls the API + over plain HTTP only through `worker-auth` and `platform-api` private-origin entries. +- The worker and the AI gateway read version 2 AI policies; version 1 files keep + working with a warning to migrate. +- New AI operations, each in one environment and rechecking the caller's current + grants: `ai_endpoints.list` and `ai_models.list` (`catalog.read`) return the + approved endpoints and cached model metadata, with tool support as Ollama + reports it; `refresh=true` asks the AI gateway again and needs + `connection.manage`. `ai_readiness.read` returns eight ordered setup checks from + stored records, without calling a provider. `ai_setup.publish` publishes the + built-in AI Connector and Action (`definition.publish`), and `ai_setup.grant` + authorizes admitted Agentic releases for a connection (`connection.manage`); + repeating either changes nothing. `bindable_connections.list` + (`connection.bind`) lists only the connection revisions the caller may bind, + without configuration or secret handles. Discovery never pulls a model. +- With an AI policy mounted on the API (`WEAVE_AI_POLICY_FILE`), new activations + of workflows with AI task (`llm`) steps answer 422 `WV-ACTIVATION-AI-PROVIDER` + when a step's provider differs from its connection's, and 422 + `WV-ACTIVATION-AI-MODEL` when the policy does not approve the model for the + connection's endpoint. An unreadable policy answers 503 `WV-AI-POLICY` for + activations with AI task steps only. Without a policy, activation is unchanged. +- Saving an AI connection now refreshes its model list before `connections.create` + answers, which can take up to about 20 seconds. When the policy approves the + connection's endpoint and the AI gateway is configured, the refresh contacts the + provider through the gateway and spends one of the six AI test admissions per + person per minute; a refresh that cannot call the gateway spends none. +- `ai_connections.test` and `connections.test` of an AI connection refresh the + model list after the test, within the test's admission, so they answer later. +- `connections.test` is cancelled when its client disconnects, for every connector + type: the result and the `connection.test.completed` audit are not written. +- AI connection tests are dated with the database clock, which readiness also + uses, so a test that just passed reads as healthy on every API process. +- A new activation checks `connection.bind` for each bound connection revision on + both the request's token and the caller's stored grants. A token whose stored + grant was removed gets 403, and grants limited to specific revisions now bind + exactly those revisions. +- Replaying an activation `Idempotency-Key` now requires the caller's current + `release.activate` grant: a caller whose grant was revoked gets 403 (or 401) + instead of the stored 201 answer. + +### Reliability under load + +- Starting a run no longer slows down as executions accumulate. The usage accounting that runs on every run start + and every change to quota-counted records read every reservation in the database, one per run ever started, and + now finds its reservation and allocation entries by primary key. Usage figures and limits are unchanged. New + migration `0031_operations_key_collation` replaces the two internal accounting functions in place and changes no + table, data or role; migrate the server explicitly before restarting it. +- Event delivery keeps working after the platform becomes ready or withdraws + readiness. Before, each delivery turn that the outbox started while the + platform was not ready kept one of the process's four delivery slots. That + happened while the platform opened its background work, at startup and when a + compatibility rescan restored readiness, and while it closed that work after + readiness was withdrawn, which can last up to the shutdown timeout (10 seconds + by default) while native connector calls finish. Once all four slots were + lost, scheduled deliveries and manual retries delivered nothing until the + process restarted, and nothing reported it. A turn cancelled before it + starts, as when the event loop shuts down, also gives its slot back now. +- While the platform is not ready, the outbox waits for readiness instead of + starting a delivery turn every second that is refused and logged as + `Outbox turn failed` at ERROR. + +### Studio, desktop app, and CLI + +- Studio has an Operate area. The sidebar lists Home, then Build (Workflows, + Connections), Work (My tasks, Email) and Operate (Runs, Incidents, Workers, + Clusters), with Settings at the bottom. An Operate entry shows only when you + hold its capability in the workspace or on one of its resources, and the + server still authorizes every request. Operate pages live under `/operate/…`; + `/runs`, `/workers` and `/operations` redirect. **Clusters** (formerly + Operations) has Targets, Approvals, Jobs and Runners tabs, and its approvals + inbox counts down to each plan's expiry. **Resolve incident** offers Retry the + step, Accept a verified result or End the run. A run's detail can cancel the + run, retry it on the same version or a verified newer active version, send the + signal its waiting step expects, and export the first 1,000 events of its + history. Operate pages refresh only while visible and back off after failures. - Studio's Operate area opens on a new Overview page. It shows the health of the API, the database, the scheduler, the outbox, compatibility and telemetry export, each with its details; the current load; workers, @@ -257,91 +395,23 @@ SPDX-License-Identifier: Apache-2.0 workspace or person changed, says what happened in a notice; a bulk action stops sending when the person changes, and the host prefix is cleared for the next person. - -- The compiler checks and compiles **Call a workflow** (`callWorkflow`) against - the exact published version it calls: that version must opt in with - `spec.callable` (any workflow, or only `allowedCallers`), `with` is checked - against its input schema, a `businessKey` must be text of 1 to 200 characters, - and the step returns the called workflow's output, a `{status, runId, output, - error}` envelope with `onFailure: continue`, or `null` with `mode: detach`. New - diagnostics `WV-COMP-UNKNOWN_WORKFLOW`, `CALL_NOT_CALLABLE`, `CALL_RECURSION`, - `CALL_DEPTH` (more than 8 calls deep, the new compiler limit - `max_call_depth`), and `CALL_MODE` point at the field to fix. The called - version is locked as an interface dependency: the caller's artifact carries - that version's definition, so its digest matches the published one, but - compiling, importing, and activating the caller read only its input and output - schemas. Activation takes `workflow_activation_ids`, one live - activation of each called version in the same environment, and refuses wrong - or missing pins with `422 WV-READINESS-CALL`. This platform does not start child - runs yet, so it refuses to publish, import, or activate a workflow that calls - another with `WV-IR-UNSUPPORTED`; workflows without calls compile to the same - bytes as before. `weave workflow explain` and `weave workflow graph` show calls, - and the SDK's `WorkflowBuilder.with_callable()` writes `spec.callable`. -- Loops run. A **Loop over items** (`forEach`) step runs its body once per - element, `concurrency` at a time, in one run, and its output lists one result - per element in element order, whatever order the iterations finish in. Each - iteration's steps, tasks, human tasks, waits, and incidents use their own - instance key (`send[2]`); a task incident in one iteration suspends the run, a - `fail` step in one fails it, and canceling ends every iteration. Finished - iterations are removed from the run state. An `items` value that is not a list, - more elements than `maxItems`, or results over the 1 MiB payload limit open - `WV-RUNTIME-LOOP-ITEMS`, `WV-RUNTIME-LOOP-LIMIT`, or `WV-RUNTIME-LOOP-OUTPUT`. - A long loop yields after 4,000 units of work in one event and continues about - one scanner poll later; the capabilities response reports the budget as - `operations.runtime.loop_units_per_turn`. The platform now lists - `flow.forEach` and `forEach` in its language manifest and capabilities, so it - publishes, imports, and activates workflows with loops. Debug sessions run - loops with the same reducer. New counters `weave.loop_iterations` (`status: - ok` for each collected result, `cancelled` for each iteration still running - when its run ends) and `weave.loop_yields`. Upgrade the CLI and SDK together with the server: older - clients do not know the human task `instance_key` and `iteration` fields or - the new capability fields. -- Evaluating an expression inside a loop body and admitting a long event no - longer walk data that has not changed since the event started, so a loop's - cost grows linearly with its number of elements. -- The compiler checks and compiles **Loop over items** (`forEach`): `/item`, - `/index`, and `/loops//…` inside a loop body, a typed list of results after - it, `WV-COMP-LOOP_*` diagnostics for wrong items, scope, nesting, limits, and - signals in a body (with a suggested `maxItems` for a loop budget that is too - high), and an IR `forEach` node with an `each` edge and an `each` join that - requires the `flow.forEach` feature. A platform that does not list the - feature refuses to publish, import, or activate such a workflow with - `WV-IR-UNSUPPORTED`; workflows without loops compile to the same bytes as - before. The compiler limits add `max_loop_items`, `max_loop_depth`, and - `max_run_iterations`. Studio's local host answers `POST /studio/local/scope` - with the data a field may use, including the current loop item and position. -- Starting a run no longer slows down as executions accumulate. The usage accounting that runs on every run start - and every change to quota-counted records read every reservation in the database, one per run ever started, and - now finds its reservation and allocation entries by primary key. Usage figures and limits are unchanged. New - migration `0031_operations_key_collation` replaces the two internal accounting functions in place and changes no - table, data or role; migrate the server explicitly before restarting it. -- Studio has one place to set up AI: **Settings › AI models**. It shows provider cards, your AI connections, a - readiness checklist with **Publish**, **Authorize** and **Test connection**, and the Weave AI card. The AI - connection side sheet is the only AI connection form; it also opens from Build › Connections, an AI task and - Home's **Connect a model**. It offers plain HTTP only for endpoints a platform operator approved, asks for a secret - handle (never a key), lists the approved models the provider serves, and tests a model through the AI gateway with - tool support. The old AI setup wizard and the Weave AI settings in the Ask Weave AI panel are gone. -- Studio waits up to 140 seconds for an AI connection test, so a local model loading for the first time no longer - fails the test early; canceling the test in Studio stops it on the platform. -- `weave platform up --username` grants the new account the local owner roles, and - `weave platform user grant --username NAME --role ROLE` adds roles to an account the local platform created. -- Run state, history, tasks, deadlines, and incidents name each run of a step by - its instance key, which equals the step ID outside loops, so existing workflows - keep byte-identical transitions and history. Deadline scans, incident - resolution, replay, exported history, and debug sessions find the step behind - any instance key. -- Human task views add `instance_key` and `iteration` for tasks created inside a - loop iteration; both are omitted for every other task. -- The capacity check of one event's work runs at its end and after every 64 - steps or 1 MiB of new step output, instead of after every step. Work over - capacity is still refused, but the refusal can happen at a later step of the - same event, and when a later step of that event fails, the run opens that - step's incident instead. -- Keep typing in the selected form field when deferred row autofocus completes. - Rapid row additions focus the newest item without overriding a later choice. -- Update Studio's YAML parser to 2.8.3 so deeply nested documents produce a - parser diagnostic instead of an unexpected stack-overflow exception. Update - Vitest to 4.1.11 to include fixes for its development-server security advisories. +- Studio's Workers page asks the platform for current workers, last contact + first, and for every worker with **Show retired workers**. Earlier Studio + hosts and desktop apps get the + reduced default list from an upgraded server, because the Studio bridge + forwards answers unchanged: their Workers page lists only current workers, and + **Show revoked workers** shows none. Upgrade Studio and the desktop app with + the server. +- Studio's host bridge forwards the environment summary, the telemetry + settings and `releases.usage`. +- Add a left-to-right workflow canvas to Studio's new editor (**Settings → + Preferences → Try the new editor**, off by default), where the trigger, + actions, decisions, parallel paths and End each have their own shape. Insert a + step at a **+**, on an edge or on an empty path; select several steps by + clicking, with a selection box or with the keyboard; duplicate or delete them + in one Undo step; and pan, zoom, fit the view and use the minimap with the + mouse or the keyboard. Moving around the canvas never rewrites the workflow's + exported coordinates. Settings tabs have their own addresses. - Add step details to Studio's new editor (**Settings → Preferences → Try the new editor**, off by default). Double-click a step, or focus it and press Enter, to configure it over the canvas with **Input**, **Parameters** and @@ -365,6 +435,23 @@ SPDX-License-Identifier: Apache-2.0 layout**, a step toolbar above the step, and a `.canvas.json` file that **Save to file** writes and **Import workflow** reads. A draft on a platform keeps its notes and trigger choices in this browser for your account. +- With the new editor, Mapped values in step details are **formulas** such as + `input.amount > 1000 and exists(input.email)`: suggestions from the data the + field can read, references as pills, plain-word messages that never block + typing (text that doesn't parse shows **Not applied** and keeps the last + formula), a standard form on blur, **Edit formula** beside the input's + fields, and drops at the pointer. Templates take any formula between + `{{ }}`. Under a Mapped field, `= value` and the **Result** panel show what it + gives with the trigger's test input, computed in the browser with the + platform's rules (held to them by `scripts/studio_expression_corpus.py`); + formulas reading secret values are never previewed, and previews send + nothing. **Call an API** shows the full address of its request. Studio now + includes CodeMirror (`@codemirror/state`, `@codemirror/view`, MIT), loaded + with the first formula field. See `docs/reference/formulas.md`. +- Publish… and Simulate show why they stopped (for example, an account that + can't publish actions) as soon as Studio has loaded the code that publishes + the workflow's own actions, instead of waiting for another change on the + page. - With the new editor on or off, **Import workflow** starts a fresh Undo history (opening a file is no longer a step you can undo, which emptied the canvas), and a `.canvas.json` file chosen on its own is refused with a sentence that @@ -391,77 +478,50 @@ SPDX-License-Identifier: Apache-2.0 Studio's email and file steps copy into actions of their own. Its API action builder (`POST /studio/local/http-action`) refuses a request larger than 1 MiB with 413 `WV-STUDIO-REQUEST`. -- Run AI tasks on a local Ollama model: `weave platform ai enable --ollama auto|host|container` - (or `--ollama-url URL`) sets up the AI gateway, the Agentic worker, a version 2 AI - policy, development-only private-origin entries and a keyless `ollama-local` - connection, and tests a real model call; `ai status`, `ai disable` and `ai models` - complete it. -- Model endpoints accept plain HTTP only through private-origin entries with - `purpose: model` that send no credential. The reserved secret handle - `no-credential` marks such connections and is never resolved; operator grants - under that name are ignored with a warning, and `weave platform secret set` - refuses it. -- New operation `ai_connections.test`; `weave connections test` on an AI connection - now calls the model through the AI gateway instead of always reporting failure. - AI connection tests, dedicated or generic, share a limit of six per minute per - person and answer 429 `WV-AI-RATE-LIMITED` beyond it. -- The AI gateway gains `POST /v1/test` and `POST /v1/models`, and the API accepts a - plain HTTP gateway endpoint on a loopback address that a private-origin `model` - entry with loopback credentials lists. An endpoint with a trailing slash is refused. -- The Agentic worker reports `LLM_MODEL_NOT_FOUND`, `LLM_UNREACHABLE`, `LLM_AUTH`, - `LLM_RATE_LIMITED`, `LLM_CONTEXT_LIMIT` and `LLM_NO_TOOL_SUPPORT` instead of - `LLM_PROVIDER`, accepts `WEAVE_AGENTIC_CAPACITY`, and signs in and calls the API - over plain HTTP only through `worker-auth` and `platform-api` private-origin entries. -- The worker and the AI gateway read version 2 AI policies; version 1 files keep - working with a warning to migrate. -- New AI operations, each in one environment and rechecking the caller's current - grants: `ai_endpoints.list` and `ai_models.list` (`catalog.read`) return the - approved endpoints and cached model metadata, with tool support as Ollama - reports it; `refresh=true` asks the AI gateway again and needs - `connection.manage`. `ai_readiness.read` returns eight ordered setup checks from - stored records, without calling a provider. `ai_setup.publish` publishes the - built-in AI Connector and Action (`definition.publish`), and `ai_setup.grant` - authorizes admitted Agentic releases for a connection (`connection.manage`); - repeating either changes nothing. `bindable_connections.list` - (`connection.bind`) lists only the connection revisions the caller may bind, - without configuration or secret handles. Discovery never pulls a model. -- With an AI policy mounted on the API (`WEAVE_AI_POLICY_FILE`), new activations - of workflows with AI task (`llm`) steps answer 422 `WV-ACTIVATION-AI-PROVIDER` - when a step's provider differs from its connection's, and 422 - `WV-ACTIVATION-AI-MODEL` when the policy does not approve the model for the - connection's endpoint. An unreadable policy answers 503 `WV-AI-POLICY` for - activations with AI task steps only. Without a policy, activation is unchanged. -- Saving an AI connection now refreshes its model list before `connections.create` - answers, which can take up to about 20 seconds. When the policy approves the - connection's endpoint and the AI gateway is configured, the refresh contacts the - provider through the gateway and spends one of the six AI test admissions per - person per minute; a refresh that cannot call the gateway spends none. -- `ai_connections.test` and `connections.test` of an AI connection refresh the - model list after the test, within the test's admission, so they answer later. -- `connections.test` is cancelled when its client disconnects, for every connector - type: the result and the `connection.test.completed` audit are not written. -- A new activation checks `connection.bind` for each bound connection revision on - both the request's token and the caller's stored grants. A token whose stored - grant was removed gets 403, and grants limited to specific revisions now bind - exactly those revisions. -- Replaying an activation `Idempotency-Key` now requires the caller's current - `release.activate` grant: a caller whose grant was revoked gets 403 (or 401) - instead of the stored 201 answer. -- AI connection tests are dated with the database clock, which readiness also - uses, so a test that just passed reads as healthy on every API process. -- Event delivery keeps working after the platform becomes ready or withdraws - readiness. Before, each delivery turn that the outbox started while the - platform was not ready kept one of the process's four delivery slots. That - happened while the platform opened its background work, at startup and when a - compatibility rescan restored readiness, and while it closed that work after - readiness was withdrawn, which can last up to the shutdown timeout (10 seconds - by default) while native connector calls finish. Once all four slots were - lost, scheduled deliveries and manual retries delivered nothing until the - process restarted, and nothing reported it. A turn cancelled before it - starts, as when the event loop shuts down, also gives its slot back now. -- While the platform is not ready, the outbox waits for readiness instead of - starting a delivery turn every second that is refused and logged as - `Outbox turn failed` at ERROR. +- Studio has one place to set up AI: **Settings › AI models**. It shows provider cards, your AI connections, a + readiness checklist with **Publish**, **Authorize** and **Test connection**, and the Weave AI card. The AI + connection side sheet is the only AI connection form; it also opens from Build › Connections, an AI task and + Home's **Connect a model**. It offers plain HTTP only for endpoints a platform operator approved, asks for a secret + handle (never a key), lists the approved models the provider serves, and tests a model through the AI gateway with + tool support. The old AI setup wizard and the Weave AI settings in the Ask Weave AI panel are gone. +- Studio waits up to 140 seconds for an AI connection test, so a local model loading for the first time no longer + fails the test early; canceling the test in Studio stops it on the platform. +- `weave platform up --username` grants the new account the local owner roles, and + `weave platform user grant --username NAME --role ROLE` adds roles to an account the local platform created. +- Keep typing in the selected form field when deferred row autofocus completes. + Rapid row additions focus the newest item without overriding a later choice. +- Update Studio's YAML parser to 2.8.3 so deeply nested documents produce a + parser diagnostic instead of an unexpected stack-overflow exception. Update + Vitest to 4.1.11 to include fixes for its development-server security advisories. + +### Development and testing + +- Run the PostgreSQL integration suite in parallel + (`pytest tests/integration -n 4 --dist loadfile`): each test still gets its own + database, now cloned from a template migrated once. +- Run Checks once per pull request commit and cancel a pull request's superseded + runs. Studio's browser tests run in five shards, with the performance tests on + their own runner. +- The real-platform browser journeys no longer delete sign-ins they did not + create when their setup fails before reading the system credential store. +- The real-platform Operate checks wait past the capacity refusals Studio sends + again, and the formula preview check measures its 50 ms budget the same way + on every runner. + +### Versions and schema + +- Bump the Python package and browser Studio bundle to `0.1.0a16` and the + desktop product to `0.1.0-alpha.16`; the native internal installer counter is + `0.1.16`. +- Pin the Agentic and Files 0.1.8 packages to core 0.1.0a16. Both report where + they run when they register; the Agentic worker also adds the AI changes + above. +- Schema revision becomes `0033_language_workflow_calls`, with three new + migrations: `0031_operations_key_collation`, `0032_operations_facts` and + `0033_language_workflow_calls`. No role is added or changed. See + [upgrade a platform safely](docs/operations/upgrades.md#what-changes-in-alpha16) + for the upgrade times, the behavior changes to check, and what to do before a + rollback. ## 0.1.0a15 diff --git a/docs/capabilities.md b/docs/capabilities.md index fe64333a..7e63a70f 100644 --- a/docs/capabilities.md +++ b/docs/capabilities.md @@ -51,8 +51,14 @@ permissions, and real delivery still need checking in your deployment. ## Which release this page describes Weave is an alpha workflow and integration platform. This documentation targets -**`0.1.0a15`**, with PyFly 26.9.15 and database schema revision -`0030_worker_presence`, unchanged from alpha12. Alpha15 adds text templates +**`0.1.0a16`**, with PyFly 26.9.15 and database schema revision +`0033_language_workflow_calls`. Alpha16 adds loops over items and calls between +workflows, Studio's Operate area with its Overview, Runs, Incidents, Workers and +Clusters pages, the new editor's canvas, step details, **Add a step** and +formulas (off by default), and AI tasks on a local Ollama model set up from +**Settings › AI models**; it adds three migrations, described in the +[upgrade procedure](operations/upgrades.md#what-changes-in-alpha16). Alpha15 +kept schema revision `0030_worker_presence` and adds text templates (`concat` and `join`), development-only private origins for the Docker development platform, plain-HTTP no-code connections with a "Not encrypted" warning, and the Firefly identity in Studio, the desktop app, the CLI and this diff --git a/docs/operations/upgrades.md b/docs/operations/upgrades.md index 8f14d9b9..1ecc9579 100644 --- a/docs/operations/upgrades.md +++ b/docs/operations/upgrades.md @@ -45,7 +45,7 @@ the desktop app never migrates a platform. | alpha13 | `0030_worker_presence` | No new schema migration. Workers retry explicit capacity rejections while they read task context or credentials, and an Agentic preparation timeout before provider execution counts as not started. Upgrade the Agentic and Files workers to 0.1.5 together with the server. | | alpha14 | `0030_worker_presence` | No new schema migration. Adds the detached Docker development platform (`weave platform up`); existing foreground installations keep working and are never converted. The Agentic and Files workers 0.1.6 pin this server version. | | alpha15 | `0030_worker_presence` | No new schema migration and no role change. Upgrade CLIs and SDKs together with the server, review native executor `capacity` and the legacy private-network settings before restarting, and finish runs that use text templates before any rollback to alpha14; see [what changes in alpha15](#what-changes-in-alpha15). The Agentic and Files workers 0.1.7 pin this server version. | -| Unreleased | `0033_language_workflow_calls` | Three new migrations. `0033_language_workflow_calls` adds the empty `run_calls` and `run_call_links` tables, their indexes and scope policies, two purge rules (a run cannot be purged while its calls run or before its result reached its caller), and room in each run's reserved control capacity for the call rows its cancellation or timeout changes; it takes well under a second whatever the number of retained runs (under 0.15 s in every measurement on 10,000 and 50,000 runs). Finish or cancel runs that call other workflows before any rollback to a server without workflow calls. The other two migrations: `0031_operations_key_collation` only replaces two internal accounting functions: no table, data, or role changes. `0032_operations_facts` adds [scoped operational fact storage](#operational-fact-storage), a bounded historical backfill, and reserved capacity for terminal fact updates. Explicitly migrate the server before restarting it. Upgrade CLIs and SDKs together with the server, and upgrade the server before its deployment runners; see [incident list compatibility](#incident-list-compatibility), [worker identity compatibility](#worker-identity-compatibility) and [worker fleet compatibility](#worker-fleet-compatibility). `weave platform up --username` grants the local owner roles (developer, deployer, operator, viewer, task_participant, tenant_admin, lumi_manager, execution_manager, worker_operator, deployment_reader, deployment_planner, deployment_approver, deployment_operator); existing accounts keep their roles until `weave platform user grant` adds more. `weave platform user` is now a command group; `weave platform user --username` works as before. | +| alpha16 | `0033_language_workflow_calls` | Three new migrations, no role change. `0031_operations_key_collation` only replaces two internal accounting functions. `0032_operations_facts` adds [scoped operational fact storage](#operational-fact-storage) with a bounded historical backfill; it holds its locks until it commits (17 s for 10,000 retained runs and 32 s for 50,000 in a rehearsal), so stop every writer first. `0033_language_workflow_calls` adds two empty tables and takes well under a second whatever the number of retained runs (under 0.15 s in every measurement on 10,000 and 50,000 runs). Explicitly migrate the server before restarting it. Upgrade CLIs and SDKs together with the server, upgrade the server before its deployment runners, and finish or cancel runs that use loops or call other workflows before any rollback; see [what changes in alpha16](#what-changes-in-alpha16). `weave platform up --username` grants new local accounts the local owner roles (developer, deployer, operator, viewer, task_participant, tenant_admin, lumi_manager, execution_manager, worker_operator, deployment_reader, deployment_planner, deployment_approver, deployment_operator); existing accounts keep their roles until `weave platform user grant` adds more. `weave platform user` is now a command group; `weave platform user --username` works as before. The Agentic and Files workers 0.1.8 pin this server version. | ![Schema, compatibility and execution acceptance gates](../diagrams/operations-upgrade.svg) @@ -644,12 +644,46 @@ changes before you reopen traffic: 0.1.0a15. A local platform still has [no in-place upgrade](#a-local-platform-has-no-in-place-upgrade): set up alpha15 from its own checkout in a new directory. -## What changes after alpha15 - -These changes are not yet in a release. They add two schema migrations (the head -becomes `0032_operations_facts`), no role, and no change to definition schemas or -the stored digests of the built-in AI Connector, Action and task. Check them -before you reopen traffic on a server that includes them: +## What changes in alpha16 + +Alpha16 adds three schema migrations (the head becomes +`0033_language_workflow_calls`), no role, and no change to definition schemas or +the stored digests of the built-in AI Connector, Action and task. Follow the +procedure above and migrate explicitly before you restart the server; a server +that includes them refuses to start on the previous schema. + +- **Allow for the migration time.** `0031_operations_key_collation` replaces two + internal accounting functions in place and changes no table, data or role. + `0032_operations_facts` backfills [operational facts](#operational-fact-storage) + from every retained run in one transaction and holds its locks until it + commits: in a rehearsal on PostgreSQL 17 (4 CPUs, 8 GiB), it took 17 seconds + for 10,000 retained runs and 32 seconds for 50,000, and the database grew by + 1.4 to 1.6 KB per retained run. Rehearse it on a restored copy to measure your + window. `0033_language_workflow_calls` adds the empty `run_calls` and + `run_call_links` tables, their indexes and scope policies, the call rules for + run purging, and room in each run's reserved control capacity for the call + rows its cancellation or timeout changes. It changes no existing row and took + under 0.15 seconds in every measurement, on 10,000 and on 50,000 retained runs. +- **Upgrade CLIs and SDKs together with the server.** Workflow calls add the + `call_completed` history event and the `caller` field of runs, loops add the + human task `instance_key` and `iteration` fields and new capability fields, + and incident, worker and observation answers gain optional fields. Alpha15 and + earlier CLIs and SDKs check every answer against the fields and event types + they know, so they fail with `WV-WIRE` on these answers. The items below and + the compatibility sections above name each case. +- **Upgrade the server before its deployment runners**, as described in + [worker identity compatibility](#worker-identity-compatibility). +- **Finish or cancel runs that use calls or loops before any rollback.** Alpha15 + lists neither `flow.callWorkflow` nor `flow.forEach`, so such runs wait until a + server that runs them takes over; see + [runs that need a newer server](#runs-that-need-a-newer-server). Rolling back + the database also means restoring the backup taken before the migration, as + [if the upgrade fails](#if-the-upgrade-fails) explains. +- **Workers and local platforms.** The Agentic and Files workers 0.1.8 pin core + 0.1.0a16. A local platform still has [no in-place upgrade](#a-local-platform-has-no-in-place-upgrade): + set up alpha16 from its own checkout in a new directory. + +Check these changes before you reopen traffic: - **New AI operations are additive.** `ai_endpoints.list`, `ai_models.list`, `ai_readiness.read`, `ai_setup.publish`, `ai_setup.grant` and From 1fd052557bd36f127561e7b2097862c4f4471110 Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Mon, 19 Oct 2026 21:22:20 -0700 Subject: [PATCH 3/6] List the real-platform journeys in the 0.1.0a16 notes Add the Studio and security journeys that run against the real platform, the Acme test service fixes and the corrected private-origin wording to the 0.1.0a16 changelog, and tell contributors in the alpha16 upgrade notes that the Acceptance workflow now runs them on every pull request. --- CHANGELOG.md | 20 ++++++++++++++++++++ docs/operations/upgrades.md | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbd2c21c..2f07dfc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -507,6 +507,26 @@ SPDX-License-Identifier: Apache-2.0 - The real-platform Operate checks wait past the capacity refusals Studio sends again, and the formula preview check measures its 50 ms budget the same way on every runner. +- Run Studio and security journeys against the real platform on every pull + request and every push to `main`: Studio sign-in and brand at 1440x900 and + 600x500, brand and naming in Studio, the CLI, the docs site and the + repository, every operation added since 0.1.0a14 answered by each person's + grants (`tests/acceptance/authorization.toml`), Activate and Publish refused + for a viewer, revocation, private-origin refusals, and a secret scan that + includes browser storage. Journeys sign people in through the real Studio + host and identity provider pages, and checks both before and during a run + refuse mocks, intercepted requests and injected state. Journey steps that + wait for later capabilities are reported as skipped, never as passed. The + `Acceptance` workflow stays fork-safe: read-only contents, no checkout + credentials and no secrets. `tests/acceptance/README.md` explains how to run + and write journeys. +- The Acme test service refuses odd `Content-Length` values and deeply nested + JSON instead of dropping the connection. +- The local platform guide, the configuration reference and two diagrams now + say that `--allow-private-origin` approves only the exact DNS-name origin of a + test service on the installation's egress network (addresses and `localhost` + are refused), and that an invalid mail or PostgreSQL private-network setting + stops startup. ### Versions and schema diff --git a/docs/operations/upgrades.md b/docs/operations/upgrades.md index 1ecc9579..169d23ad 100644 --- a/docs/operations/upgrades.md +++ b/docs/operations/upgrades.md @@ -682,6 +682,10 @@ that includes them refuses to start on the previous schema. - **Workers and local platforms.** The Agentic and Files workers 0.1.8 pin core 0.1.0a16. A local platform still has [no in-place upgrade](#a-local-platform-has-no-in-place-upgrade): set up alpha16 from its own checkout in a new directory. +- **Contributors.** The `Acceptance` workflow now runs Studio and security + journeys against a real platform on every pull request. Run the same `pr` + profile locally before you open one, as `tests/acceptance/README.md` in the + repository explains. Operators need no change for it. Check these changes before you reopen traffic: From 8e21f09e75065e5ea99093e5e77ad704aac995e5 Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Mon, 19 Oct 2026 23:43:22 -0700 Subject: [PATCH 4/6] Record what was verified for 0.1.0a16 State which local, PostgreSQL and acceptance checks passed before tagging, and which checks did not run or are not verified for this release. --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f07dfc2..65b3f774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -543,6 +543,24 @@ SPDX-License-Identifier: Apache-2.0 for the upgrade times, the behavior changes to check, and what to do before a rollback. +Verified on macOS (Apple silicon) before tagging: the full local check gate (17 +stages, including 7,751 unit and contract tests, the Agentic and Files worker +suites, and building, installing, and checking the 0.1.0a16 core and 0.1.8 +worker packages); Studio's type check, 2,391 unit tests, and production build; +941 integration tests against a real PostgreSQL 17; and the release acceptance +profile against a real Docker platform with PostgreSQL 17 and Keycloak 26.7.4, +where J0, J1, J5, J8, and J9 steps passed (15 in full and 8 with checks for +later capabilities skipped), the secret scan found nothing, and no container, +network, or volume was left behind. Integration tests that need Kafka, an owned +PostgreSQL connector target, CLI identity against Keycloak, or built release +images did not run, and one timing-sensitive test of two replicas joining a +parallel step did not pass under the host's load at the time. The release +gate with real Kafka and release images, the acceptance journeys beyond those +steps, the desktop installers on Windows and Linux beyond their CI builds, +Developer ID signing, and Apple notarization are **not verified** for this +release. macOS installers remain ad-hoc signed and not notarized, and Windows +installers remain unsigned. + ## 0.1.0a15 ### Workflow language From 6854acfd87cc20bb0f3b7f49c36e47353558e8b4 Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Tue, 20 Oct 2026 00:22:24 -0700 Subject: [PATCH 5/6] Group the follow-up fixes in the 0.1.0a16 notes Move the workflow graph, Studio capacity resend and platform user fixes into the Studio, desktop app, and CLI notes, and the check failure summary into development and testing. --- CHANGELOG.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88c28464..b2767bf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -338,20 +338,6 @@ SPDX-License-Identifier: Apache-2.0 - While the platform is not ready, the outbox waits for readiness instead of starting a delivery turn every second that is refused and logged as `Outbox turn failed` at ERROR. -- `weave workflow graph` draws decision table steps as **Apply a decision - table**. Before, it stopped with `KeyError: 'decisionTable'` on any workflow - with a decision table. -- Studio sends a change that the platform refused for capacity again only when - the same person is still signed in to the same workspace. It first waits for - a sign-in check still out. Before, a change refused just as another person - signed in could be sent again as that person. -- `weave platform user` grants `viewer` on the demo project instead of the demo - environment, so a person created with roles such as `operator` or - `deployment_approver` plus `viewer` can read the project's published - workflows. -- When `make check` fails, it prints the failing stage and the node ids of the - failing tests from pytest's short summary. Test output stays in the private - stage logs. ### Studio, desktop app, and CLI @@ -507,6 +493,17 @@ SPDX-License-Identifier: Apache-2.0 - Update Studio's YAML parser to 2.8.3 so deeply nested documents produce a parser diagnostic instead of an unexpected stack-overflow exception. Update Vitest to 4.1.11 to include fixes for its development-server security advisories. +- `weave workflow graph` draws decision table steps as **Apply a decision + table**. Before, it stopped with `KeyError: 'decisionTable'` on any workflow + with a decision table. +- Studio sends a change that the platform refused for capacity again only when + the same person is still signed in to the same workspace. It first waits for + a sign-in check still out. Before, a change refused just as another person + signed in could be sent again as that person. +- `weave platform user` grants `viewer` on the demo project instead of the demo + environment, so a person created with roles such as `operator` or + `deployment_approver` plus `viewer` can read the project's published + workflows. ### Development and testing @@ -541,6 +538,9 @@ SPDX-License-Identifier: Apache-2.0 test service on the installation's egress network (addresses and `localhost` are refused), and that an invalid mail or PostgreSQL private-network setting stops startup. +- When `make check` fails, it prints the failing stage and the node ids of the + failing tests from pytest's short summary. Test output stays in the private + stage logs. ### Versions and schema From 7e2a301bbdf97961faa48735f2836aae9cad4aab Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Tue, 20 Oct 2026 00:51:45 -0700 Subject: [PATCH 6/6] Update the 0.1.0a16 verification counts after the follow-up fixes --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2767bf0..8748851b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -558,9 +558,9 @@ SPDX-License-Identifier: Apache-2.0 rollback. Verified on macOS (Apple silicon) before tagging: the full local check gate (17 -stages, including 7,751 unit and contract tests, the Agentic and Files worker +stages, including 7,761 unit and contract tests, the Agentic and Files worker suites, and building, installing, and checking the 0.1.0a16 core and 0.1.8 -worker packages); Studio's type check, 2,391 unit tests, and production build; +worker packages); Studio's type check, 2,394 unit tests, and production build; 941 integration tests against a real PostgreSQL 17; and the release acceptance profile against a real Docker platform with PostgreSQL 17 and Keycloak 26.7.4, where J0, J1, J5, J8, and J9 steps passed (15 in full and 8 with checks for