Repository navigation
Tale v0.5.87
Highlights
- Automation tests now run from the editor with per-test failures and path coverage. Try the draft or an individual step, save a run as a regression test, and see test counts on saved versions and deployments.
- MCP automation editing can page version history, compare saved versions and restore an older version as the newest. Deployment replies distinguish a rollback from another deployment. Agents can also run a draft on simulated outputs or one step at a time, and run the tests they name and read each run's output, effects and steps; both draw from the organization's budget for runs that are never stored.
- Coding agents can read which writes an automation may make without a person approving each run and, with an owner's or admin's key, allow or withdraw them. The plan of an allowance names that it removes a person's approval, and the audit log records the change as made through MCP.
- Release pipelines can read version history in pages, compare saved versions and read the deployment history over REST, then deploy a saved version — naming the one they expect to replace — or restore an older one. A deploy still passes the version's checks and tests. They can also run a saved version's tests, all or by name, and read the verdict the version carries and who made it.
- Testing and version controls now keep selected tabs and keyboard focus visible in contrast themes. Code fields in dialogs let keyboard users reach the next control, and run playback fits phone screens. Automation authors can choose Save as test… directly from a Runs row menu.
- Chat can make downloadable files and use skills from your library. Text files need no sandbox; documents, spreadsheets and charts use a light sandbox when code is needed.
- Person-started standard agent tasks can make files and search knowledge on the shared chat engine without starting a full workspace. Work needing a repository, browser or hours hands over to the agent's full workspace with its brief and files.
- OpenAI subscription credentials can carry the ChatGPT account identity Codex harness runs need in tasks and automations.
- Resumed harness task turns receive their current execution identity, and resumed Codex turns receive the current organization and agent guidance. Retries and restarts open with this update before the task brief, even when the conversation retained older guidance.
- SSO discovery skips unreadable saved connections in unrelated organizations. Signing in to an explicitly selected organization still reports its own connection errors.
- Saved PII custom rules survive mode changes and disable/re-enable, including policies that use only custom rules. Unreadable rules show Retry and prevent edits from replacing the saved array.
- After a successful deployment recovery, removing the takeover declaration allows configuration-only updates without an unnecessary runtime rollout when the retained receipt proves the unchanged basis.
- Admins can set retention for automation versions, keeping versions needed by live deployments, runs, recent history and legal holds.
- Historical package publication can fill missing
ui-vX.Y.Zandmarketing-ui-vX.Y.Ztags from their immutable release source without rewindingdist/uiordist/marketing-ui. Publication uses maintained tooling and reads historical source as data.
Upgrade notes
- Previously lost custom PII rules are not restored automatically. In Governance > Guardrails, review PII protection and re-enter any missing custom patterns before relying on the policy.
- The backend applies migrations
0200_automation_test_reports.sql,0201_provider_subscription_account_id.sqland0202_agent_run_engine.sqlat boot. The first two add nullable fields; earlier test verdicts remain readable without a detailed report. Migration 0202 adds a non-null engine defaulting toharness, keeping existing runs and old-image inserts on that route during a roll, plus nullable transcript/handoff fields and a native-run index. No manual data backfill is required. Include them in the normal deployment and database backup procedure. - To use an OpenAI Subscription key, provide its ChatGPT account ID; OpenAI broker tokens must supply the vendor's
account_id. Restrict models to those your subscription supports and verify a Codex harness task. Subscriptions use their provider-bound harnesses in tasks and automations; the native engine requires an API-key or environment credential. - With Agent runtime on Automatic, person-started standard agents can use the native engine. Starts by automations, schedules or other agents use the full workspace, as do custom agents and runs with equipped connectors, platform tools or secrets, subscription models or pinned runtimes. To require it from the start, pin the standard agent's runtime. Each organization runs at most four native task runs concurrently; further native runs queue. Full-workspace workers keep their configured Agent workers limits.
- Review Chat tools before rollout: Files, Skills and Code default to on and govern chat only. The new Light sandboxes quota defaults to two per organization, is shared by chat and native task code, and counts toward allocated capacity. Clients reading chat messages must accept the additive
artifactpart introduced in API contract3.36.0. - The current API contract is
3.43.0. The MCP endpoint can answer the codesINSUFFICIENT_SCOPEandORG_MISMATCH, and a sign-in challenge on its 401, but only where an operator lets coding agents sign in; no deployment does by default. MCP clients that read settings should accept the kindautomation-approval, which has a read-only config and changes by the actsgrantandrevoke, the plan actionunchangedfor an act that changes nothing, and the codeAPPROVAL_ALLOWANCE_INVALID. They should also acceptcursorsbesideget_settings'nextCursor, which is now set only after a read of one kind, and the codesUSE_SUBSCRIPTION_FLOW(a subscription credential) andSETTINGS_NOT_FOUND(a provider Tale ships). MCP clients should accept the added version-history and comparison metadata, plus deploymentkindvaluesdeploy,rollbackandunchanged;test_automationandrun_automationtake new optional arguments,test_automationmay answerrecordedanddetailOmitted, and both may answerRATE_LIMITEDwithdata.retryAfterMswhen the organization's budget for runs that are never stored is spent. REST clients should accept the added version fields;GET /api/v1/automations/{name}/versionsalso answersisDoneandcontinueCursor, and still answers the whole history when nolimitis named.POSTandGET /api/v1/automations/{name}/versions/{version}/testsare new. Restoring an automation creates a new latest version; it does not rewrite saved history. - Automation-version cleanup stays off until an admin enables it. Review and apply retention bounds before enabling deletion; older organization files use bundled bounds for the new category until you add their own. Cleanup preserves the live version, the last ten deployments' versions, versions used by runs, the newest twenty, the versions those were based on or restored from, and legal holds.
- After bundle recovery reaches Ready, remove
supersedesPendingBundleand prepare again before a configuration-only apply. Preserve the Ready receipt and recovery snapshot. New pending rollouts allow at most 64 takeovers; legacy journals with 65 entries remain recoverable. At the limit, recover the exact pending bundle before selecting another rollout. - Adopt the service images and CLI as one validated cohort. Release publication admits one new full cohort per UTC day and permits same-version recovery. Retry or backfill package tags from
mainwith bothrelease_tagand the tag's fullsource_sha; identical existing tags are kept, and conflicting tags require reconciliation without moving them.
API contract changes
The contract moved from 3.35.0 to 3.43.0 (155 → 161 operations). Read the API reference's versioning section before upgrading a pinned client.
Added operations:
GET /api/v1/automations/{name}/compareGET /api/v1/automations/{name}/deploymentsGET /api/v1/automations/{name}/versions/{version}/testsPOST /api/v1/automations/{name}/deploymentsPOST /api/v1/automations/{name}/versions/{version}/restorePOST /api/v1/automations/{name}/versions/{version}/tests
Removed operations: none.
Changelog
3.43.0 — 2026-10-13: the MCP endpoint takes a coding agent's access token in place of an API key where the operator lets agents sign in (off unless set). Its 401 then carries the challenge RFC 9728 describes — resource_metadata and scope — and a credential that was presented and refused adds error="invalid_token". A token opens the MCP endpoint alone; on every other route it is read as an API key. A call made through a connection acts in the organization the connection was made for (naming another in X-Organization-Slug answers 403 ORG_MISMATCH) and holds the access its person allowed: a request that calls a tool needing access the connection lacks is refused whole with 403 INSUFFICIENT_SCOPE and the challenge error="insufficient_scope", which names what to ask for, and a call that the person's role could never be given the access for answers the same code as a tool error. tools/list is unchanged. The codes INSUFFICIENT_SCOPE and ORG_MISMATCH join the registry. No REST operation changes.
What's Changed
- fix(ci): enforce one release cohort per day by @yannickmonney in #4807
- feat(platform): keep test reports, try drafts and run tests by hand by @yannickmonney in #4808
- feat(platform): run and read automation tests in the editor by @yannickmonney in #4811
- feat(platform): set a test up through a form by @yannickmonney in #4812
- fix(cli): repair merge-group checks by @yannickmonney in #4809
- feat(platform): add tests from a path and show what they cover by @yannickmonney in #4813
- fix(platform): retain client ID edits during initial SSO loading by @yannickmonney in #4391
- feat(platform): try the draft and show test runs on the canvas by @yannickmonney in #4815
- feat(platform): start a test run's input from somewhere by @yannickmonney in #4816
- feat(platform): save a run as a test by @yannickmonney in #4818
- feat(platform): test one node, or the draft up to a node by @yannickmonney in #4819
- fix(platform): surface unreadable SSO configuration by @yannickmonney in #4264
- ci: serialize daily release admission by @yannickmonney in #4821
- feat(platform): count a version's tests at save and deploy by @yannickmonney in #4823
- fix(platform): show selected reviewer and preview agent reports by @Israeltheminer in #4681
- test(platform): stabilize concurrent integration fixtures by @yannickmonney in #4822
- fix(platform): preserve local review ownership on source close by @yannickmonney in #4221
- fix: cover Swiss sharp-s fallback across message catalogs by @yannickmonney in #4412
- fix: stabilize picker selection and CI cache proof by @yannickmonney in #4820
- fix(platform): report custom instructions toggle failures by @yannickmonney in #4403
- fix(platform): preserve contact palette search at its destination by @yannickmonney in #4319
- fix(platform): isolate Home shortcuts from modal dialogs by @yannickmonney in #4413
- fix(platform): recover broker rotations without starving fleet by @yannickmonney in #4783
- fix(platform): show activity summary read failures by @yannickmonney in #4384
- feat: annotated OCI image index, full labels and digest-pinned bases by @yannickmonney in #4787
- fix(platform): recover failed erasure subject directory reads by @yannickmonney in #4325
- feat(platform): support provider subscription accounts by @Israeltheminer in #4682
- feat(platform): chat makes files and uses skills, sandbox only as needed by @yannickmonney in #4817
- feat(platform): bound how long automation versions are kept by @yannickmonney in #4843
- feat(platform): run standard agent tasks on the shared chat engine by @yannickmonney in #4844
- fix(platform): refresh resumed task guidance by @yannickmonney in #4845
- fix(platform): make testing and versions accessible and polished by @yannickmonney in #4847
- fix(cli): normalize successful deployment recovery metadata by @yannickmonney in #4842
- fix: bind package release tags to historical source by @yannickmonney in #4846
- docs: publish Tale v0.5.87 release notes by @yannickmonney in #4848
- fix(platform): say retention values and bound changes in words by @yannickmonney in #4850
- fix: keep the package publisher a knip entry by @yannickmonney in #4851
- docs(platform): update the version history debt entry by @yannickmonney in #4852
- fix: preserve comment retry queues through commit by @yannickmonney in #4854
- test(cli): isolate the parent-directory smoke fixture by @yannickmonney in #4855
- test(cli): bind the smoke intercept to its owned fixture by @yannickmonney in #4857
- test(platform): prove the testing flow end to end in a browser by @yannickmonney in #4858
- test(platform): order audit oracles by writer transactions by @yannickmonney in #4861
- fix(platform): name the editor tab by a level-two heading by @yannickmonney in #4862
- fix(platform): harden chat tools and light sandboxes after review by @yannickmonney in #4849
- fix(platform): hold up under a load burst and a database restart by @yannickmonney in #4853
- fix(platform): isolate unreadable tenants during SSO discovery by @yannickmonney in #4864
- fix(platform): preserve subscription key account identity by @yannickmonney in #4865
- fix(platform): preserve saved PII custom patterns by @yannickmonney in #4866
- docs: complete the v0.5.87 release highlights by @yannickmonney in #4867
- test(ui): observe workflow motion before it settles by @yannickmonney in #4868
- feat(platform): read, compare and restore versions over MCP by @yannickmonney in #4869
- test(platform): retain bounded W18 admission failure evidence by @yannickmonney in #4880
- docs: include the current MCP contract in v0.5.87 notes by @yannickmonney in #4881
- feat(platform): deploy and restore versions over REST by @yannickmonney in #4882
- feat(platform): run chosen tests and stand-ins over MCP by @yannickmonney in #4883
- fix(platform): retain complete MCP version histories by @yannickmonney in #4884
- feat(platform): run and read a version's tests over REST by @yannickmonney in #4885
- fix(platform): settings pages by kind and size, clearer refusals by @yannickmonney in #4893
- fix(platform): scroll a task's thread by trackpad in the board dialog by @yannickmonney in #4863
- feat(platform): read and change write allowances over MCP by @yannickmonney in #4894
- fix(platform): erase automation test-checker attribution by @yannickmonney in #4895
- docs: clarify v0.5.87 recovery guidance by @yannickmonney in #4896
- fix(platform): require explicit test data copying by @yannickmonney in #4897
- feat(platform): add the sign-in server for coding agents by @yannickmonney in #4898
- feat(platform): connect coding agents to an organization by @yannickmonney in #4899
- feat(platform): let a coding agent's token open the MCP endpoint by @yannickmonney in #4904
- fix(platform): bind organization session authority by @yannickmonney in #4903
- fix(platform): expose validated workflow run identity by @yannickmonney in #4902
Full Changelog: v0.5.86...v0.5.87