Skip to content

Tale v0.2.93

Choose a tag to compare

@larryro larryro released this 27 Jun 04:25
179ee86

Highlights

Attach images and documents to tasks

Tasks can now carry attachments. Attach images and documents (PDF / Office / CSV / text — no audio or video) when creating a task, and add or remove them from a task's detail view. Up to 10 files per task, validated against an images/documents MIME allow-list, with each storage id verified to belong to your org. Removing an attachment or deleting a task purges the underlying blob. The attachment array is self-described on the task row, so the board and detail views render without an extra join. (#2168)

One-click prompt library

With an empty composer there is nothing to save as a draft, so the bookmark button's dropdown only ever offered "Prompt library". The bookmark now opens the Prompt library dialog directly when the composer is empty — one click instead of two. When the composer has text it is unchanged: the dropdown still offers Save prompt draft plus Prompt library. (#2166)

Fixes

  • Chat — org isolation on switch: Switching organizations with a chat thread open kept rendering the previous org's chat. The by-id thread queries now authorize against the org you are acting in (not the thread's own org), and their query keys are org-scoped so the switch-time cache purge drops them. Tenant isolation was never broken — non-members could not read the data; this fixes context coherence for members of multiple orgs. (#2170)
  • Issue desk — issues now render: The issue desk showed no issues even when untracked GitHub issues existed, because the integration list reader looked for data / pagination at the top level while the connector payload lives under .result. A shared readIntegrationListPage helper now unwraps the envelope (and tolerates a flat payload for forward compatibility). (#2175)
  • Actionable error messages: Convex redacts raw throw new Error(...) to "Server Error" in production, so clients that branched on the message text were silently dead in prod. Expected-failure throws on knowledge/website duplicates, approval and human-input cards, and automation triggers now use ConvexError({ code }) mapped to localized, actionable messages in en/de/fr. (#2172, closes #2056)
  • Project chat list: Task and project discussion threads no longer leak into a project's chat folder — listProjectThreads now applies the shared isHiddenFromChatHistory guard already used by the main chat list. (#2168)

For operators

Both items below are operator-facing but require no data migration. Upgrade as usual — tale upgrade then tale deploy — and compose is regenerated for you.

  • llm-gateway renamed to sandbox-llm-gateway (#2178). The bare name over-claimed scope: in-sandbox coding agents (Claude Code / OpenCode) are its only clients — regular chat calls providers directly from Convex and never touches it. The service, container, image (tale-llm-gatewaytale-sandbox-llm-gateway), build context, and LLM_GATEWAY_* env family are all renamed. Backward compatible for one release: tale upgrade migrates your LLM_GATEWAY_* vars to SANDBOX_LLM_GATEWAY_* in place — the gateway admin password is preserved, never regenerated — and a transitional network alias plus env fallback keep in-flight sandbox sessions resolving across the deploy. The llm-gateway-data volume keeps its name (derived cache, re-provisioned per session). The transitional shims are removed next release.
  • Sandbox drops blue-green for in-place drain (#2179). The sandbox tier becomes a single container reached via the bare sandbox alias, deployed roll-in-place after a drain — exactly like convex. The platform tier keeps its blue-green flip. This removes the deploy-time colour concept from the data layer and fixes a class of "fetch failed" chat turns: after a flip tore down a colour, a chat session pinned to the now-gone sandbox-<colour> host hard-failed its liveness probe forever. The spawnerColor schema fields are kept deprecated-optional, so existing rows still read — no migration this release (a follow-up clears the values and drops the fields).

Full changelog: v0.2.92...v0.2.93