Skip to content

v0.2.71

Choose a tag to compare

@larryro larryro released this 11 May 11:15
73c1f96

v0.2.71 — Public status page and onboarding fix

This release adds an unauthenticated /status page with per-component health and trilingual copy, fixes an onboarding regression so fresh instances auto-seed a default org while multi-org deployments correctly route uninvited users to the create-organization form, and aligns the three service shells (platform, web, docs) on shared @tale/webui utilities. Also restores localized search placeholders on factory-driven tables.

🚀 Features

  • Public /status page with per-component health — unauthenticated, server-rendered, no JS. Reports overall up/down plus a per-subsystem breakdown using neutral product vocabulary (Application / Knowledge base / Web & document services) so stack names don't leak. Probes Convex /version and RAG/Crawler /health behind a 5s single-flight cache; upstream response bodies are discarded so a misbehaving probe target can't push bytes into the public response. Copy negotiated via Accept-Language (en / de / fr). A11y: status conveyed by text + colour (status dots are aria-hidden). Caddy routes /status straight to the platform via the default reverse_proxy — no Caddyfile change needed (#1699)

🐛 Fixes

  • Auto-create default org only on truly fresh instances — restores the auto-seed flow for the first user on a brand-new instance (so the many hardcoded orgSlug: 'default' callsites in agents, chat, integrations, providers, and login policy keep resolving), while multi-org instances and uninvited users still get the create-organization form. Slug-conflict races (two tabs / two users creating simultaneously) fall back to the form branch with no orphan state (#1698, #1702)
  • Search placeholder on factory-driven tables — the useTableConfigHook factory calls tEntity('searchPlaceholder') against a runtime namespace, so customers, products, vendors, and websites were rendering the raw key string instead of the localized placeholder. Added the missing top-level searchPlaceholder key for each entity and listed them in keys-dynamic.txt so the orphan-key scanner can see them (b98453a)

🛠 Improvements

  • Service-shell alignment + shared @tale/webui utilitiesservices/platform, services/web, and services/docs now share a canonical shape: a one-line globals.css re-export from @tale/ui, sibling locals.css for service-specific styles, identical main.tsx / router.tsx / tailwind.config.ts / postcss.config.mjs / tsr.config.json / tsconfig.json, and an initServiceI18n helper that collapses the three near-duplicate i18n bootstraps. web and docs now share a startSimpleServer from @tale/webui/server (locale negotiation, /api/health with graceful-drain marker, security headers, extraRoutes hook); platform's Hono server keeps its specifics but its /api/health body shape was aligned. @fontsource/inter is bundled once at @tale/ui rather than per-service. The plop react-service generator emits the new aligned shape (#1700)
  • Shared search test suite, theme-asset sync, and docs polish — bundled into the alignment PR: full Vitest suite for the @tale/webui search dialog/build-index/client/highlight/snippets, a new rehype-preserve-code-meta plugin so fenced-code metadata survives the rehype pipeline, a theme-asset-sync component for platform theme assets, storybook cleanup, favicon rename (favicon-dark.png / favicon-light.png + a proper multi-size favicon.ico), and translation edits in docs/{de,de-CH,fr}/ (#1700)

Upgrade

No manual migration required. Run tale upgrade to update the CLI, then tale deploy to apply the new version.

Contributors

@larryro, @yannickmonney


Full Changelog: v0.2.70...v0.2.71