Repository navigation
Wizard v1.0.15 is a hotfix for one bug: after a backend restart, you could upload a file, ask about it, and be told "I need a dataset for that." The file was there. The chat was talking to a different session. Frontend only; the backend and the analysis engine are unchanged from v1.0.14.
Install
| Platform | Command |
|---|---|
| macOS | brew install Wizard-AIA/wizard/wizard |
| Linux / macOS | curl -fsSL https://wizardw2.vercel.app/install.sh | sh |
| Windows (PowerShell) | irm https://wizardw2.vercel.app/install.ps1 | iex |
| Windows (Scoop) | scoop install https://github.com/Wizard-AIA/Wizard-w2/releases/latest/download/wizard.json |
Then wizard --version, wizard init, wizard start. Archives and SHA256SUMS are attached below.
Upgrading from v1.0.14
- Homebrew:
brew update && brew upgrade wizard. - Scoop:
scoop update wizard. - Installer script or
wizard update: runwizard update, or re-run the installer. - Restart afterwards (
wizard stop, thenwizard start), then hard-reload any open tab (Cmd+Shift+R,Ctrl+Shift+Relsewhere) so it loads the new page. A tab that is still open keeps running the old code until you do.
What was wrong
Sessions live in the backend's memory, so a restart (an upgrade, wizard stop then wizard start) kills the session id an open tab is holding. The tab recovers by creating a new session, and in the same instant its chat connection opens and is given a different one. The page then wrote its own new id over the chat's, so uploads and other requests went to one session while the chat stayed attached to the other, which had never seen your file.
What changed
- One session, whatever order things happen in. The id the page stores is where your uploads go, so the chat now follows it. Recovery no longer overwrites an id the chat adopted while it was creating one, and a session the chat is told about no longer overwrites a newer stored id.
- A running turn is never interrupted. If the stored id changes mid-turn, the chat moves to it after the turn ends, including after Stop, after clearing the chat, or when a queued message is handed back.
- Other tabs count. A session id stored by another tab moves this tab's chat too.
- A session the server replaces mid-connection (it evicted the old one) is adopted in one step instead of being chased.
- The connection indicator shows "connecting", not "open", while the chat is moving to another session.
If you already hit this: reload the tab and ask again. The dataset is in the session the page was using.
Checked
- 13 new tests replay both orderings of the restart race, a dead id (which must not loop), a change during a running turn, an eviction, and a queued message. The race and eviction tests fail on v1.0.14's code.
- Lint, type check, production build and the full CI matrix pass on the tagged commit.
- An adversarial review simulated about 20,000 random interleavings of session writes, frames, evictions, restarts and turns. It found five problems in the first version of the fix, all fixed before release.
Known limitations
- Not tried in a real browser. The decisions are tested as code; the wiring into the chat component is covered by the lint, type and build checks, not by a test that opens a page.
- Chat still needs a model that works with your data mode.
DATA_MODE=cloud-onlyrefuses a local Ollama model, and the chat then answers with a canned reply. Pin a cloud model on the Models page or change the data mode. The refusal does not yet explain itself, which is a known gap.