Platform Changelog - EyevinnOSC/community GitHub Wiki
Platform Changelog
This page tracks deployed platform functionality, updated daily. It is indexed by the OSC architect RAG system so users can ask "what was recently deployed?" or "when did feature X ship?".
2026-08-20
osaas-app v7.102.2
- The Solutions page now shows a loading indicator while Recent Deployments is fetching on initial page load
- Server errors during page refresh after a deployment are now handled gracefully — the page no longer crashes on transient errors
- Member users are now redirected away from Workspace Settings instead of seeing an error
- Activation emails now show raw event counts for each instrumented branch — makes metric-based activation signals clearer
osaas-ai v7.82.0
- After setting up a parameter store, the AI agent now proactively guides users to bind it securely to their custom app via
configServiceandconfigApiKey— prevents credentials from being pasted into chat messages where they would be stored in conversation history - The AI now gives clear guidance when a requested capability is not accessible via MCP (e.g. features that require the OSC web console)
- The AI can now answer "what was recently deployed?" and similar recency questions by querying the indexed Platform Changelog — responses are sourced from live data instead of training knowledge
- For video ingest, transcode, and streaming use cases the AI now recommends Open Videocore as the first option before suggesting lower-level components
osaas-deploy-manager v7.89.0
- Backup credentials (PATs) are now automatically renewed when they are within 14 days of expiry — scheduled backup runs no longer fail silently when the authentication token ages out
- Backup policies now expose a
credentialStatusfield (ok/expired/renewed) showing PAT credential health — visible via thelist-backup-schedulesMCP tool and the My Backups dashboard - Backup scheduler flags now default to enabled on startup — scheduled backup jobs that were silently not running after a restart will now run correctly
2026-08-17
osaas-app v7.102.0
- Agent task setup calls now automatically retry on transient TCP-level connection failures — the My Agent Tasks feature is more resilient on brief network hiccups
- Multi-tenant users are now automatically directed to the correct workspace when a Service Access Token expires — eliminates the manual workspace selection step after re-authentication
- The OSC console now sends session keep-alive pings and shows a session-expired banner when the session ends — prevents silent failures on long-running dashboard pages
- The Configure Service modal now exposes a UDP Gateways field for services that require UDP endpoint configuration
osaas-ai v7.81.0
- CouchDB connection errors now show actionable recovery steps instead of opaque technical messages — helps users and AI agents diagnose and recover from CouchDB instance issues faster
- MCP instructions now include guidance on Service-to-Service integration using Service Access Token (SAT) exchange for My Apps — makes it easier for AI agents to set up secure inter-service calls
2026-08-16
osaas-app v7.101.2
- App configuration updates now surface specific error messages when the container is in a failed state (CrashLoopBackOff, OOMKilled, image pull failures) — previously these returned a generic error
osaas-ai v7.80.0
- Rolling restarts now return a partial-success response when some instances restart and others fail, instead of treating the whole operation as a failure
create-service-instancenow rejects attempts to override OSC-owned URL fields (such as base URLs for managed services) — prevents misconfiguration- New
find-parameter-keyMCP tool searches across all parameter stores in a workspace to locate a key by name — useful when you do not know which store holds a given config value - Instance naming constraints (alphanumeric only, max 20 characters) are now included in
get-service-schemaresponses — AI agents receive the constraint upfront so they can prompt for a valid name before creation
osaas-deploy-manager v7.87.1
- Proxy creation no longer duplicates mirror records when a background task wins a race condition
- Partial-success 500 responses now include the
configApiKeyfield — the API key is available even when the instance creation partially succeeded - Locality predicate for proxy operations now uses real geo-routing data
osaas-landing-app v3.31.4
- Team diary date pages are excluded from search indexing and the sitemap — reduces SEO noise from machine-generated content
2026-08-15
osaas-ai v7.79.1
wait-for-app-readynow times out after 50 seconds instead of 120 seconds — agents receive faster feedback when an app does not become ready in time- MCP tool search now supports multi-word queries — searching for "hls monitor" or "media probe" returns relevant results instead of requiring a single keyword
2026-08-14
osaas-app v7.101.1
- Parameter store API key reveal now includes a download button that saves the key as a
.envfile — useful as a backup before closing the modal - The Done button on the key reveal dialog stays disabled until you check "I have saved this key securely" — prevents accidentally closing before saving the key
- Same download and acknowledgment flow applies to the credential regeneration modal
- Remove stale service count copy from the OSC landing welcome text
osaas-ai v7.79.0
create-agent-tasknow acceptsscheduleType: "manual"to create on-demand tasks that never fire automatically — trigger them withrun-agent-taskwhenever you want- New
acknowledge-secret-savedMCP tool creates an audit log entry after a human confirms they have downloaded and saved a parameter storeCONFIG_API_KEYfrom its one-time download link
osaas-landing-app v3.31.3
- Update hero subtitle and portability section title copy
2026-08-13
osaas-app v7.100.0
- Long prompts on skill detail pages now wrap correctly instead of overflowing
- Screenshots are now displayed on community skill cards in the skills index
osaas-ai v7.78.0
- Skill display names are now projected into the title field on public skill routes — improves search indexing for skills with custom display names
osaas-deploy-manager v7.85.0
- When binding a Umami analytics instance to an existing app, the platform now automatically registers the app URL as a website in Umami and returns the tracking script in the response — no manual Umami setup required
- Skills now support an optional
displayNamefield in the schema — set a human-readable title without changing the skill identifier
2026-08-12
osaas-app v7.99.0
- HTTP 429 rate-limit errors now surface a user-friendly message instead of a technical error code
osaas-ai v7.77.0
- MCP tools now reject requests with unknown query parameters — previously unknown fields were silently stripped, which could mask typos in tool arguments
get-logs-for-instancenow redirects automatically toget-my-jobwhen called with a MyJob serviceId, returning the correct log format without manual intervention
2026-08-11
osaas-app v7.98.1
- Token usage chip now shows a danger state when the daily consumption rate exceeds the daily refill rate — prevents silent budget exhaustion
- Parameter store tab links now use correct URL encoding for tab names with spaces
osaas-ai v7.76.0
list-community-skillsnow queries the live community catalog — supportsquery,type,tags, andlimitfilters; previously returned a placeholder messageimport-community-skillnew tool — copies a community skill from another tenant into your own workspace; theforkedFromfield in the result records the origin- All
appId-based MCP tools (get-my-app,restart-my-app,diagnose-my-app, etc.) now return a structured error with recovery hints when the app is not found, instead of a generic failure
osaas-catalog-manager v7.4.0
- Community skills index added: a cross-tenant
PublishedSkillcollection and API enables browsing skills from all OSC workspaces in one place — powers the/skillspublic index page andlist-community-skillsMCP tool
osaas-deploy-manager v7.83.0
- Skill publish, update, and delete operations now write through to the community catalog index immediately — the
/skillspublic index page and MCP tool reflect changes without a reindex delay
osaas-landing-app v3.31.1
- Attribution cookie removed — referral tracking now uses URL-passthrough only, removing a stale cookie that was occasionally causing checkout errors for returning visitors
osaas-money-manager v7.14.4
- Token count queries now default to today's UTC midnight as the start time when no start date is specified — fixes incorrect zero-count readings during the first hours of the day
- Subscription cancellations now update purchase status to CANCELLED immediately — prevents stale ACTIVE status on cancelled subscriptions
2026-08-10
osaas-app v7.98.0
- Published skill pages now support screenshot uploads — images are rendered on the public skill page alongside the description
- Public skill pages now include a copy-prompt button and a direct MCP connect link for one-click onboarding
osaas-ai v7.75.1
diagnose-my-appnow shows unfiltered startup logs for apps in non-running states (building, failed) instead of error-only logs — makes it much easier to diagnose startup crashes where all output is INFO-levelget-my-app-logsdetects git credential failures (HTTP 403, authentication errors, and TTY-style "No such device or address" errors) and emits a structured advisory pointing tolist-git-credentialsand the 30-day GitHub PAT expirylist-git-credentialsnow reports credential age in days and flags credentials within 5 days of the 30-day GitHub PAT default expiry (HIGH risk) or within 10 days (MEDIUM risk)wait-for-app-readynow correctly distinguishes a newly-started app from a restarted one — prevents false "ready" reports when the old pod is still running immediately after a restart is triggered
osaas-deploy-manager v7.82.0
- Skill API and metadata now support an optional
screenshotUrlfield, enabling screenshot display on public skill pages
2026-08-08
osaas-app v7.97.1
- Fix: PKCE OAuth clients that strictly validate
code_challenge_methods_supportedcan now authenticate —plainhas been removed from the supported methods list to comply with the PKCE spec
osaas-ai v7.75.0
list-available-servicesnow includes astatus: "COMPLETE CATALOG"sentinel in category-filtered responses so AI agents reliably stop re-scanning after receiving the full result setgetAppnow times out after 5 seconds instead of hanging for up to 13 seconds when an app is not found, giving agents faster failure feedbackopenWorldHintannotations corrected on 8 tools that were incorrectly marked as able to access the open web — MCP clients receive accurate tool metadata
osaas-deploy-manager v7.81.3
- My Apps in a
REBUILD_CREATE_FAILEDtombstone state now return a409with an explicit recovery message on plain restart attempts — covers an additional failure state beyond the case handled in v7.81.2
2026-08-06
osaas-app v7.97.0
- Public skill share pages are now indexed by search engines and social media crawlers — skills can be discovered via Google and Bing
- FREE plan tenants now see a token budget chip on the dashboard showing their remaining token balance as a percentage
osaas-ai v7.74.1
- MCP server now correctly negotiates protocol version during the initialize handshake, resolving connection failures with strict MCP clients
- MCP capability advertisement trimmed to only implemented capabilities — clients no longer receive capability claims the server cannot fulfill
resources/templates/listhandler added per MCP spec, returning an empty array; previously caused JSON-RPC errors on clients that call it- Cursor-based pagination is now explicitly rejected with an error instead of silently ignored, giving callers actionable feedback
- MCP tool errors (Zod validation, auth failures) now return structured
isErrortool results instead of throwing — prevents clients from treating validation errors as transport failures - Audit stats API now accepts a
tenantIdquery parameter to scope aggregation to a single tenant; all MCP tool calls are now tagged withsource: mcpin audit metadata
osaas-deploy-manager v7.81.2
- My Apps stuck in a failed rebuild state now return a
409error on restart with the message "App is in a failed rebuild state. Use?rebuild=trueto recover, or DELETE the app and recreate it." — previously the restart would silently fail - PAT validity is now checked before any destructive rebuild operation begins, preventing failed rebuilds due to expired tokens before a single resource is changed
2026-08-05
osaas-deploy-manager v7.81.1
- Fix: backup scheduler now re-mints a non-expiring PAT when a backup policy is enabled, ensuring scheduled backups continue running without token expiry failures
2026-08-04
osaas-app v7.96.0
- Builders dashboard empty states now include direct action buttons — "Submit a Service" navigates to the Service Inbox tab, "Contribute a Skill" opens the contribution modal directly
web-runner (container image)
- Default Node.js version for My Apps deployed on the Web Runner (
eyevinn-web-runner) bumped from Node 22 to Node 24 - Apps can now request a different Node.js major via
engines.nodeinpackage.json(18, 20, or 22 are also available; other values fall back to the default) - Apps can now opt in to pnpm or yarn via a Corepack
packageManagerfield inpackage.json, instead of always using npm - Apps without either field are unaffected apart from now running on Node 24 instead of Node 22
- See Eyevinn/web-runner#50
2026-08-03
osaas-ai v7.74.0
- Add
compare-servicesMCP tool — evaluate multiple services side-by-side to find the best fit for a use case without callingget-service-schemaseparately for each - Restart advisory threshold lowered to two consecutive health-check failures and now returns a structured advisory object — agents receive actionable restart guidance sooner
wait-for-app-readytool now polls internally until the app is ready, eliminating the need for callers to build their own polling loops- Fix: AI assistant now correctly advises that
NEXT_PUBLIC_*variables set in the parameter store are available in client-side code — OSC injects them before the build runs - Fix: AI assistant sessions with MCP disabled now exit gracefully when repeatedly blocked by verification prompts instead of looping indefinitely
2026-07-31
osaas-app v7.94.0
- Logged-in users can now view public skill pages — previously they were redirected to the Builders dashboard instead of seeing the shared skill
- Published skills now render dynamic Open Graph preview images on social media share links
- Public skill pages now display a git clone URL section with the anonymous HTTPS clone URL for the skill's Gitea repository
- Fix: My Apps now shows a clear error state when a bound parameter store has been deleted, instead of silently failing to load configuration
- Fix: Token Usage bar now correctly resets its daily tracking window at midnight
osaas-ai v7.73.0
- Public skill share URLs now route through the deploy-manager JSON endpoint — skill pages load reliably for all clients including headless tools
- Fix
get-published-skillMCP tool to return structured skill content instead of HTML — wraps JSON parsing in a try/catch for graceful error handling
osaas-deploy-manager v7.78.0
- Published skills now retain their original type (skill/prompt/runbook) and license after creation — previously metadata fell back to defaults after the initial Gitea write
- Skills list supports pagination — tenants with large skill libraries load reliably without truncation
osaas-money-manager v7.14.3
- Token runway estimate ("days until zero") now uses cumulative lifetime consumption instead of today's usage rate, giving a more accurate long-term projection for steady-state accounts
2026-07-28
osaas-app v7.93.0
- Public skill pages now include Open Graph meta tags and social share buttons (LinkedIn, X, Bluesky, copy link) — share directly from the skill detail page or the Builders dashboard card
- Builders tab switching on desktop is now reliable — the tab URL parameter is correctly propagated through the tab container
- Token budget warning banner and Usage page now draw from the same projected runway calculation for consistent figures
osaas-ai v7.72.0
- AI chat sessions now self-repair when a user asks the same question a second time — the assistant acknowledges the prior answer, identifies what changed, and asks a clarifying question instead of repeating verbatim
- Fix
get-published-skillMCP tool to correctly fetch skill content — previously pointed at the HTML share page instead of the deploy-manager JSON endpoint
osaas-deploy-manager v7.77.0
- Parameter store provisioning is now idempotent — retrying a failed store creation no longer results in a conflict error
- Public skills share URL now links to the skill detail page on
app.osaas.ioinstead of the internal API endpoint - Skills listing loads faster — Gitea session results are cached per tenant for 5 minutes, reducing repeated authentication overhead on the Builders dashboard
2026-07-25
osaas-app v7.92.1
- Fix token budget warning — the Low Token banner and Usage page now use the same projected runway calculation
osaas-ai v7.71.0
- Published skills can now be previewed without authentication via
GET /skills/{tenantId}/{skillName}on the AI API — useful for embedding skill metadata in external tools and dashboards - Add
update-published-skillMCP tool — update the content of an existing published skill, prompt, or runbook without deleting and recreating it - Add
delete-published-skillMCP tool — permanently delete a published skill, prompt, or runbook from your workspace
osaas-deploy-manager v7.76.0
- Manual My Job runs now update
lastRunStatusonce the job completes, matching the behavior of scheduled runs - Skill deletion is now backed by an API endpoint — enables the
delete-published-skillMCP tool to remove the underlying Gitea repository
2026-07-24
osaas-app v7.92.0
- Fix stale sidebar menu item permissions after workspace switch
- Send proactive low-balance email before account token balance reaches zero
- Token balance warning now based on overall runway rather than today's consumption ratio
- Workspace secrets are now selectable as OSC access token source when creating agent tasks
osaas-ai v7.70.0
- Add
useLatestparameter tocreate-service-instanceMCP tool — deploy the newest available image version without specifying an exact tag - Parameter tool descriptions now remind users to call
list-parameter-storesfirst to get the correct store name estimate-service-costnow includes a disclaimer distinguishing nominal (list price) from observed (actual billed) cost
osaas-deploy-manager v7.75.0
- MyJob manual trigger (
POST /myjobs/{name}/run) now updateslastRunStatusonce the run completes, matching scheduled-run behavior - Block Agentic SDLC auto-merge when a CRITICAL security finding is open — blocked PRs receive a comment explaining the gate
- More reliable Gitea code pushes — 422 errors on file-push now retry up to 3 times before failing
2026-07-23
osaas-app v7.91.0
- Add edit job modal — scheduled My Jobs can now be updated in place (cron schedule, source URL, worker command, parameter store binding) from the web console without deleting and recreating the job
osaas-ai v7.69.0
- Add git clone 403 credential-flow guardrail to diagnose-my-app — the assistant now automatically detects authentication failures on private repos and walks through the credential registration and linking steps
- Surface credential-to-app mapping in list-my-apps and list-git-credentials — each app shows its bound git credential name; each credential shows which apps are using it
osaas-deploy-manager v7.74.4
- Generate non-expiring scheduler PAT for MyJob runs — previously short-lived tokens caused auth expiry on long-running or delayed job executions
- Store MyJobs credentials as K8s service secrets with Elastx fan-out — jobs running on Elastx now reliably receive their OscAccessToken and ConfigApiKey at trigger time
2026-07-21
osaas-app v7.90.3
- Fan out PAT expiry reminders to all sub-workspace admins — workspace members with admin role now receive personal access token expiry warnings, not just the primary account holder
osaas-ai v7.68.0
- Bump hono transitive dep to resolve HIGH severity CVE (GHSA-88fw-hqm2-52qc) — security patch with no user-facing behavior change
osaas-money-manager v7.14.1
- Guard token refill against past_due/unpaid Stripe subscriptions — token top-up requests on accounts with lapsed billing now return a clear error instead of silently failing
2026-07-19
osaas-ai v7.67.2
- Fix CouchDB connection URL handling in client libraries — Intercom Manager wiring with CouchDB now resolves database URLs correctly
osaas-deploy-manager v7.74.2
- Fan out GET /admin/myapps to Elastx secondary cluster — the admin MyApps listing now aggregates results from both Linode and Elastx, giving a complete view of all tenant custom apps across clusters
2026-07-18
osaas-app v7.90.1
- Reduce Skills service fetch timeout to prevent 30 s server-action-failed errors — the Skills list now returns a clear timeout message instead of an opaque failure when the deploy-manager is slow
osaas-ai v7.67.1
- Translate ContainerCreating phase to success in
update-my-app-config— agents receive arestart_in_progressstatus with a prompt to callwait-for-app-readyinstead of an ambiguous error during rolling restarts
2026-07-17
osaas-app v7.90.0
- Add workspace secrets to agent task OSC access token selector — workspace secrets stored in your account are now selectable as a reference option alongside runner service secrets when creating agent tasks
- Return RFC 6749 503 on money-manager timeout in /api/connect/token — headless OAuth clients now receive a proper structured error response on timeout
osaas-ai v7.67.0
- Include diagnostic snapshot on wait-for-app-ready timeout — timeout responses now include pod health status and HTTP probe results to help diagnose why an app did not become ready
- Return structured not_found envelope on restart-my-app 404 — clients get a clear terminal error instead of a generic failure when the app does not exist
osaas-deploy-manager v7.74.1
- Pin SDLC bootstrap source ref to commit SHA to survive branch deletion — Agentic SDLC setups no longer break when the source branch used during setup is later deleted
2026-07-15
osaas-ai v7.66.0
- Enforce 20-character max length on service instance names — names exceeding the limit return a clear error with guidance to choose a shorter name
- Mask parameter values and connection-string passwords in MCP tool results — credential values are redacted before being returned to the AI client
- Change
get-security-reportdefault format from summary to detailed — reports now include full finding details without requiring an explicit format argument - Return
restart_in_progressstatus on transient ContainerCreating phase — agents now get a clear non-terminal status instead of an ambiguous error during rolling restarts - Pre-flight source ref check in
enable-agentic-sdlc— validates that the specified branch exists before attempting to enable Agentic SDLC - Respond to "what's new" and changelog queries with live app health state via
list-my-apps
osaas-deploy-manager v7.74.0
- Fix My Jobs scheduler to resolve correct job status — jobs no longer show "unknown" status after running
- Add
enableSecretsflag to parameter store creation — parameter stores can now be created with encryption enabled from the start
osaas-app v7.89.1
- Fix stream abort race condition in AI chat — improves reliability when multiple AI responses are in flight simultaneously
- Store PAT identifier instead of raw token in conversation history — reduces credential exposure in stored sessions
2026-07-13
osaas-app v7.89.0
- Remove OSC_CONNECT_CLIENT_SECRET startup warning — eliminates a noisy log entry on startup for environments where the OAuth client secret has not been customised
2026-07-11
osaas-app v7.88.0
- Add personal-use-only note for Claude OAuth token in agent task setup — warns users that subscription tokens are for personal use; recommends API key for automated tasks
- Add crash-at-startup detection to MyApp creation — surfaces "Startup failed" status and log prompt when an app stays in Building state for more than 2 minutes
- Add parameter store API key field to MyJobs create modal — allows encrypted parameter stores to be bound to jobs
- Move Jobs tab to second position in My Apps navigation
osaas-ai v7.65.0
- Add
diagnose-my-app-orphanMCP tool — diagnoses a vanished app by inspecting K8s state, last-known config, and parameter store bindings directly, bypassing the app registry - Improve parameter store tool error messages with Levenshtein-based did-you-mean suggestions and mandatory
list-parameter-storesprerequisite in tool descriptions
osaas-deploy-manager v7.73.0
- Add
GET /myapps/:appId/orphan-checkdiagnostic endpoint — inspects K8s runner namespace directly, returns registry state, deployment health, last-known config (secrets redacted), and parameter store bindings
2026-07-10
osaas-app v7.87.0
- Replace env vars field in Create Job modal with parameter store selector — jobs now bind to a parameter store instance for configuration instead of inline key/value pairs
- Return RFC 6749
invalid_grantJSON on expired refresh token — headless OAuth clients now get a parseable error instead of an HTML redirect - Move Jobs to top-level tab under My Apps
- Disable Agentic SDLC switch for FREE plan users
osaas-deploy-manager v7.72.0
- Add MyJobs config API key support — parameter store API key is now persisted and forwarded to the job runner at trigger time
- Fan out git credential updates to all associated app K8s secrets when a credential is rotated
- Add retry-with-backoff to MyApp rebuild POST to prevent permanent deletion on transient errors
osaas-landing-app v3.30.0
- Internationalise agentic-kit page and add MCP-to-agentic-engineering CTA
2026-07-08
osaas-app v7.86.0
- Guard unauthenticated errors in Terraform server actions — returns a clear sign-in prompt instead of an unhandled exception
- Emit a structured
billing_degradedsignal when money-manager times out — the degradation is now tracked in the telemetry pipeline for faster incident detection
osaas-ai v7.63.0
- Add
download-service-secretMCP tool — retrieve a stored service secret value via a secure one-time download link - Remove commit SHA from
update-my-app-source-reftool description — the tool now clearly communicates it only accepts branch names, not commit SHAs, to prevent misconfiguration
osaas-deploy-manager v7.71.1
- Clarify that
sourceReffields accept branch names only — commit SHAs are not supported - Route backup credential lookups through the secondary orchestrator domain for Elastx-hosted instances — fixes credential fetch failures when backing up migrated apps
osaas-landing-app v3.29.0
- Add paste-prompt kit to the /agentic-engineering page — Step 0 connect blocks and three copy-ready prompt cards for Claude Code and Codex onboarding
2026-07-07
osaas-app v7.85.0
- Show a proactive AI assistant offer during a first session with no engagement — helps new users get started faster
- Forward dashboard UI deploys to the activation audit cohort for conversion tracking
osaas-ai v7.62.0
- Add MCP tools for My Jobs management — create, list, run, suspend, resume, and delete scheduled background jobs directly from AI agents
- Auto-nest flat
opts.*dot-notation keys increate-service-instance— no need to manually construct nested objects for services like channel-engine - Guard against unresolved
{{secrets.*}}placeholders increate-storage-bucket— returns an actionable error instead of forwarding the literal placeholder to the backend - Resolve
{{secrets.*}}references server-side increate-storage-bucket— credentials are injected at tool execution time within the trust boundary - Reject commit SHAs in
update-my-app-source-refwith an actionable error message explaining that only branch names are accepted - Surface agent-runner credential prerequisite in
enable-agentic-sdlctool description to guide users before they hit the prerequisite check at runtime - Guide users to check prerequisites before calling
enable-agentic-sdlc
osaas-deploy-manager v7.71.0
- Add My Jobs API for scheduled background Python jobs — create, list, run, suspend, resume, and delete cron-scheduled jobs that run on ephemeral Python job runners
2026-07-06
osaas-app v7.84.0
- Add voucher confirmation messages and free-period display during checkout — shows the discount amount and free trial period before payment
- Add REST endpoints for user notifications — platform notifications are now accessible programmatically
osaas-ai v7.61.0
- Add workspace member management MCP tools — invite members, list current members, remove members, and update roles directly from AI agents
osaas-deploy-manager v7.70.0
- Add support for optional
originPathwhen creating a custom domain — requests to the domain root are forwarded to the instance at the specified sub-path (e.g./my-bucket), enabling path-prefix routing for services like MinIO - Improve build status detection to prevent a false "ready" state when apps are still building or showing loading pages
osaas-maker-manager v7.0.8
- Surface a clear
MISSING_PACKAGE_JSONerror when a service build fails because no package.json was found — the termination reason is now mapped and returned to the caller
osaas-money-manager v7.13.3
- Fix VAT calculation timeouts by increasing connection pool size and adding write guards — eliminates sporadic billing failures under load
2026-07-03
osaas-app v7.83.0
- Add repository sub-path field to My Apps create form — specify a subdirectory within your repository when deploying monorepo apps
- Live log viewer for agent task runs now auto-enables and auto-scrolls when the run is currently in progress
- Fix dashboard to show a retry option and user-visible error when instance data fails to load
- Fix custom app domain update to surface domain ambiguity errors clearly
- Fix managed tenant creation to show the correct error when a display name is already taken
osaas-ai v7.60.0
- Add
rotate-parameter-store-keyMCP tool — rotates the parameter store API key and automatically updates all linked agent tasks and My Apps - Auto-retrieve
configApiKeyfrom the parameter store whenconfigServiceis specified in agent task creation — no need to paste the key manually when using MCP - Add cursor-based incremental log fetch to
get-agent-task-logs— reduces payload size for long-running tasks by fetching only new entries since the last call - Add server-level instructions to the MCP
initializeresponse — AI tools like Claude Code and Cursor now receive OSC platform context for every tool session without needing a chat session
osaas-deploy-manager v7.69.0
- Add support for EXTRA_TOLERATIONS configuration — allows service orchestrators to be scheduled on dedicated Kubernetes node pools
2026-07-02
osaas-app v7.82.0
- Show a user-friendly error during app creation when the GitHub repository URL is wrong or the repository is private — the error message now instructs users to add a Personal Access Token instead of showing a generic 404
- Add an "Ask the assistant" affordance to the Intent Recovery Banner — users who haven't deployed yet can click through to the AI assistant from the service suggestion cards
- Improve contrast for the empty-state CTA button in the first-deploy card to meet accessibility standards
osaas-ai v7.58.0
- Return a clear error when an unknown service ID is passed to
estimate-service-costinstead of silently failing - Add Chatwoot live-chat integration to the Connect flow — the AI assistant can now register a website widget inbox in a Chatwoot instance when setting up live chat
- Accept domains with
http://orhttps://prefix increate-my-domainandupdate-my-domain— the scheme is stripped automatically so users no longer need to enter a bare hostname - Fix Valkey connection URL generation — a
nullor literal-undefinedpassword no longer produces a malformedredis://undefined@host:6379URL
osaas-deploy-manager v7.68.1
- Fix app count metrics to fan out to Elastx — the
/myapps/countendpoint now returns accurate totals across both clusters - Fix proxy service creation on new app deployments to use the correct public instance URL
- Revert custom app URL to the default
apps.osaas.ioaddress when a custom domain mapping is deleted - Fan out Agentic SDLC task secrets to the secondary cluster — agent tasks now work correctly on both Linode and Elastx without manual secret replication
2026-06-30
osaas-app v7.81.0
- Add explicit Cancel Subscription button to the subscriptions page — users can now cancel directly from the web console without needing to contact support
- Show a Swedish flag badge on custom apps running on Elastx, indicating the app is hosted in a Swedish-owned data centre
- Fix restart flow to send a valid JSON body, resolving intermittent 422 errors when restarting a custom app
- Fix graceful degradation on Terraform deployments page when the backend times out
- Fix stale magic-link redirect — expired magic-link emails now redirect to the login page instead of showing a blank screen
osaas-ai v7.57.0
- Add
supportsUpdateflag toget-service-schema— AI agents can now determine whether a service supports in-place updates before attempting one - Deliver Personal Access Tokens and parameter-store API keys via a one-time secure download link instead of displaying them inline in the chat
- Fix JDBC connection URL for PostgreSQL and MariaDB — the
jdbcUrlfield in connection templates now returnsjdbc:postgresql://andjdbc:mariadb://format, resolving XWiki startup failures - Fix MinIO storage operations to surface a clear recovery hint when the request signature does not match — previously this appeared as a generic error
osaas-landing-app v3.27.0
- Replace the enterprise "Contact us" email link with a structured inquiry form on the pricing page
2026-06-26
osaas-app v7.80.0
- Fix Manage Parameters modal to degrade gracefully when the parameter store returns a 404 or 503, showing a clear error instead of leaving the panel in a broken state
- Add session guards to profile pages to prevent cryptic "digest mismatch" errors when sessions expire during navigation
osaas-ai v7.56.0
- Distinguish "orchestrator unreachable" from generic network errors in instance-management tools — the agent now reports the cluster is down rather than retrying indefinitely
- Require explicit confirmation before executing destructive MCP operations (delete, remake, restart) — agents must confirm intent before the action runs, per ADR-0030
- Extend confirmation handshake to
admin-remake-service— admin service rebuilds now require the same explicit confirmation as other destructive operations - Add
update-my-app-source-refMCP tool — repoints a custom app to a different git branch or commit SHA without needing to redeploy from scratch - Fix MinIO client to parse port and SSL settings from the instance URL — resolves connection failures when the MinIO endpoint uses a non-default port
- Redact sensitive values at write time in the MCP secret scanner — secrets are masked before they can be stored in tool logs or conversation history
osaas-deploy-manager v7.66.2
- Add
sovereigntyfield to the MyApp response — indicates whether a custom app is hosted on Elastx (Swedish-owned,"se") or Linode/Akamai (US-owned,"us") - Thread secondary orchestrator domain through all HA standby operations — high-availability MyApps now correctly route standby lifecycle calls to the secondary cluster
- Fix public hostname resolution in
switchProxyTargetfor Elastx-hosted apps — proxy target switches now use the correct public-facing hostname instead of internal cluster DNS
osaas-landing-app v3.26.0
- Add Open Live launch post to the blog (authored by Magnus Svensson)
- Fix attribution tracking to capture
gad_sourceandgad_campaignidGoogle Ads parameters
2026-06-25
osaas-deploy-manager v7.65.7
- Fix MyApp restarts in multi-region deployments — restart operations now route through the correct orchestrator URL and succeed reliably across all five runner types
- Fix app build status detection to probe the app's public endpoint rather than internal cluster DNS — reduces false "still building" states on newly deployed apps
- Fix MyApp list deduplication — when the same app appears on both primary and secondary sites, the primary site entry now takes precedence
2026-06-24
osaas-app v7.79.0
- Add live email search to the team members list — admins can now filter by email address without scrolling through the full list
- Show a friendly error when the parameter store is temporarily unreachable in the Manage Parameters panel instead of leaving it in a broken state
osaas-deploy-manager v7.64.0
- Fix app rebuilds sourced from Gitea repositories — the admin token in the source URL is now refreshed on every rebuild so stale credentials no longer cause build failures
- Fix PostgreSQL connection URL detection to recognise both
postgres://andpostgresql://schemes
2026-06-23
osaas-app v7.78.1
- Surface the specific reason when workspace deletion is blocked — users now see which active subscriptions are preventing deletion instead of a generic error
- Auto-regenerate a stale service secret when the platform access token has been rotated — reduces "service secret expired" failures after credential rotation
- Fix log viewer stability during pod restarts — cancellation errors no longer surface as UI errors in the live log panel
- Improve text contrast in the empty AI assistant panel (WCAG AA compliance)
osaas-ai v7.55.0
- Return a clear "service does not support updates" message when
update-service-instanceis called on a service that lacks an update endpoint (404/405), so the agent can communicate the limitation rather than emitting an opaque error - Detect "build in progress" placeholder pages during
wait-for-app-readyprobing — avoids incorrectly reporting a newly deployed app as ready before it has started - Handle platform-overload errors (
MaxRetriesPerRequestError) with a structuredPLATFORM_UNAVAILABLEresponse rather than crashing the tool call - Intercom setup now confirms each dependency is fully running before proceeding, even when the dependency was created in a prior session
osaas-deploy-manager v7.63.0
- Tag custom domain ingresses with the owning tenant ID (
osaas.io/tenant-idlabel) — improves observability and enables per-tenant filtering in cluster tooling
2026-06-22
osaas-deploy-manager v7.62.0
- Support configurable ingress class for custom-domain ingresses via environment variable — enables deployments on clusters with non-default ingress controllers
osaas-landing-app v3.23.1
- Fix YouTube video loading in the How It Works section — CSP now allows
youtube-nocookie.comembeds so the demo video plays correctly
2026-06-21
osaas-app v7.78.0
- Remove Easy Install option from the service creation modal — workspace setup now offers AI-assisted or Advanced (manual) setup only
- Fix duplicate WebSocket connections from the Chatwoot live chat widget
- Fix cost estimate display to match the post-creation per-day cost breakdown
- Fix user-friendly error message when the My Apps list fails to load due to a timeout
- Fix service deletion to treat a cast-receiver "No such instance" 500 as a successful no-op, matching the existing 404 handling
osaas-ai v7.54.0
- Add
refresh-workspaceMCP tool — re-reads which workspace the current token maps to, useful when the agent appears to be managing the wrong workspace after reconnecting or switching sub-workspaces - Add
wait-for-service-readyMCP tool for catalog service instances — polls until the instance reports healthy or times out after 5 minutes; called automatically aftercreate-service-instance - Fix PAT management tools to connect to the correct token service endpoint
osaas-catalog-manager v7.2.0
- Add publish/unpublish support for services with a
statusfield — services can now be toggled between published and unpublished states in the catalog
osaas-deploy-manager v7.61.2
- Add error handling to prevent HTTP 500 on Kubernetes API failures — infrastructure errors now return a structured error response instead of crashing the request
osaas-landing-app v3.23.0
- Add click-to-load YouTube embed in the How It Works section — video loads on click to avoid auto-loading third-party resources on page visit
- SEO improvements: Organization entity markup, Products footer links, and sitemap aggregation for better search indexing
2026-06-18
osaas-ai v7.53.1
- Return a clear
AUTH_REQUIREDerror when MCP tools try to access a parameter store that requires authentication, so the agent knows to configure auth before retrying - Fix
setup-parameter-storeto handle responses where the instance URL is not yet available, avoiding a crash during slow provisioning - Inform the agent that
delete-parameter-storetakes up to 2 minutes to fully propagate, preventing false "still exists" retry loops - Auto-fetch startup logs when
create-service-instancereports a startup failure — the agent can now diagnose config errors and missing env vars without a separateget-logs-for-instancecall
osaas-deploy-manager v7.61.1
- Fan out MyApp runner-namespace secrets to the Elastx (prod-se) cluster — secrets created for MyApp instances are now automatically replicated to both Linode and prod-se
- Create the correct TLS certificate issuer alias during prod-se provisioning, fixing certificate issuance failures when deploying new service instances to the Sweden region
- Remove the fallback URL from parameter store creation response to prevent agents from connecting to an endpoint before the instance is ready
osaas-landing-app v3.22.1
- Redirect
/statustostatus.osaas.io— the platform status page now shows the hosted status dashboard instead of a broken embed
2026-06-17
osaas-ai v7.53.0
- Add
osc_search_toolsandosc_call_toolmeta-tools for operator-mode embedding —osc_search_toolsreturns a lightweight tool catalog (name + description, filterable by category or query),osc_call_tooldispatches to any OSC tool without exposing the full schema surface - Fix storage credential detection to identify the new-instance propagation window: when MinIO credentials are not yet active after instance creation, the tool now returns a clear message to wait 30 seconds and retry rather than a generic error
osaas-deploy-manager v7.61.0
- Fan out service instance restart calls to the Elastx (prod-se) cluster — restarting an instance from the dashboard or via MCP now propagates to both Linode and Sweden regions
2026-06-16
osaas-app v7.77.0
- Show a human-readable error when subscription or entitlement limits block instance creation
- Show the variable names in "missing required variables" errors so users know exactly which configuration is incomplete
- Redirect expired or reused magic-link sign-ins to a dedicated
/auth/errorpage instead of a 500 error - Add outcome-led service descriptions and an in-card "Ask the assistant" button to the empty-state first-deploy card
- Fix paste mode for the OSC token field when editing an agent task with no token saved
- Fix
createAgentTaskto reject invalidsourceUrlvalues before they reach the backend
osaas-ai v7.52.0
- Add
compositionmode toestimate-service-costto estimate the combined cost of a set of services as a group - Return a clear message when
get-logsis called on a service with no log endpoint rather than returning an opaque error - Add server-side read-only mode: append
?mode=readonlyto the MCP URL to restrict all tools to read-only operations - Require cost confirmation before
create-service-instancecompletes when the estimated cost exceeds the workspace token budget - Fix network error context in PAT fetch calls and handle stale MinIO credentials and TLS errors in storage tools
2026-06-15
osaas-app v7.76.0
- Add Regenerate credentials button to the parameter store page so users can rotate the
CONFIG_API_KEYwithout recreating the store
osaas-ai v7.51.0
- Organize all MCP tools into named categories — AI assistants now filter by category (e.g.
?filter=databases) more reliably
osaas-deploy-manager v7.59.0
- Surface clone failure reason and add GitHub repository pre-flight check in MyApps setup
- Show open pull-request status on Agentic SDLC sub-tickets in the issues list
- Fan-out parameter store secret create/delete/rotate operations to the Elastx cluster automatically
2026-06-12
osaas-app v7.75.0
- Add git credential reference option when creating agent tasks (select a stored credential instead of pasting a token)
- Add inline tenant ID availability check during workspace creation
- Add "Talk to us" and "Book a call" link in the empty-state dashboard hero
- Fix secret reference name overflow in the instance parameters display
- Fix token expiry input validation to prevent creating tokens with invalid expiry dates
- Show "In review" status for Agentic SDLC sub-tickets that have an open pull request
osaas-ai v7.50.0
- Add git credential reference field to
create-agent-taskandupdate-agent-taskMCP tools - Add operator mode detection — append
?mode=operatorto the MCP URL for operator-scoped tool access - Fix health checks for queue-worker services that have no HTTP endpoint
- Reject embedded
{{secrets.*}}placeholders passed directly inside service parameter values - Allow claude.ai origins in CORS so the OSC MCP server works from claude.ai
- Fix
restart-service-instanceMCP tool to return a structured error when the instance link is not found - Auto-supply the OSC access token in
create-agent-taskwhen not provided
osaas-deploy-manager v7.57.0
- Copy the GitHub token to the stage app during stage environment provisioning
2026-06-11
osaas-app v7.74.1
- Show a proactive help nudge ("Still exploring? We're here if you need a hand") in the empty-state dashboard after browsing services for 10 minutes without deploying
- Fix token usage estimate dialog contrast and link styling
- Fix OAuth token minting to correctly tag tokens as OAuth-issued in /api/connect/token
2026-06-10
osaas-app v7.73.0
- Exempt OAuth-issued tokens from the PAT lifetime cap, allowing OAuth apps to mint long-lived PATs on behalf of users
- Fix log viewer to stack entries vertically instead of overlapping
- Surface agentic setup links at the empty-state activation moment
- Remove deprecated GET /api/user/pat endpoint
- Fix live-mode log polling: first fetch is now immediate, pagination state resets correctly
- Handle 404 responses from service API gracefully as instance-not-found in stop and manage actions
- Show token balance, refill model, and zero-state in the deploy modal
osaas-ai v7.49.2
- Fix
list-user-inbox-itemsMCP tool returning truncated results when the response is paginated - Extend
restart-my-apprate limit window to 60 minutes - Add terminal-error guidance to
admin-remake-servicetool description - Add circuit-breaker and recovery hints to parameter-store operations
osaas-deploy-manager v7.56.2
- Fix Agentic SDLC: task secrets now fall through to the legacy secret store when a key is missing from the primary store
osaas-lib-token v0.11.0
- Add
generateOAuthToken()andisOAuthToken()to the@osaas/tokenSDK for tagging and identifying OAuth-issued tokens
2026-06-09
osaas-app v7.71.0
- Add reload button to My Apps requests page (Agentic SDLC)
- Allow referencing a saved git credential when creating a MyApp (select from dropdown instead of pasting token)
- Hide public-access toggle for HTTP-only instances that have no NodePort (prevents confusing no-op toggle)
osaas-ai v7.49.0
- Surface NodePort endpoints in
describe-service-instance— UDP-based services (STUN/TURN, SRT) now show host:port endpoint lines and a usage hint
osaas-deploy-manager v7.56.1
- Fix Agentic SDLC: propagate
configApiKeyto stage app on stage-link callback so encrypted parameter stores work end-to-end - Fix Agentic SDLC: widen PR review trigger to include all human reviewer comments (not only
[blocking]-tagged ones) - Fix MyApps: add 30-second minimum-age guard to prevent false rebuild triggers from stale pod observations
- Fix MyApps: map HTTP 404 response to
runningstate during build status polling for Python/Go/dotnet/WASM runtimes - Fix certificate issuer: use GTS ClusterIssuers when
acmeIssuer=gtsis configured
2026-06-08
osaas-app v7.69.0
- Fix: stop retrying POST/PUT/PATCH/DELETE requests on fetch timeout (only GET/HEAD safe for retry)
osaas-ai v7.48.2
- Surface actionable error when a My Domain proxy name exceeds the 63-character DNS limit
- Add divergence detection to
restart-my-app rebuild=trueto prevent unnecessary rebuilds wait-for-app-readyreturns terminalnot_foundwhen the app 404s during polling- Clarify
set-instance-public-accesscontrols TCP port exposure only, not HTTP auth-gate access - Handle deploy-manager "already removed" 200 response as a clean not-found on app delete
- Use pre-flight
getAppresult to detect non-existent apps before delete, avoiding false 404 errors
osaas-deploy-manager v7.55.0
- Fix proxy Service name validation to enforce the 63-character DNS-1035 limit (was incorrectly allowing 253)
osaas-lib-orchestrator v4.6.2
- Use serviceId as stable DNS label for TCP ingress hostnames instead of per-tenant appName
2026-06-07
osaas-lib-orchestrator v4.6.1
- Fix wildcard TLS cert host binding to use stable API domain
- Fix orphaned ReplicaSets after service instance deletion
- Fix port-name suffix incorrectly appended to TCP ingress hostname
2026-06-05
osaas-app v7.68.0
- Show Swedish flag badge on service cards and detail page for prod-se instances
osaas-deploy-manager v7.54.8
- Make ACME issuer configurable (LE default, GTS optional)
2026-06-04
osaas-token-service v7.0.5
- Remove cache bypass workaround now that fast-jwt v6 is safe
2026-06-03
osaas-ai v7.47.1
- Add
start-git-credential-registrationMCP tool: initiates browser-based PAT registration, returns a one-time URL valid for 10 min - Add
get-git-credential-setup-instructionsMCP tool: returns a ready-to-run curl command for headless/CI environments - Add
list-git-credentialsMCP tool: list registered credential names and timestamps (PAT values are never returned) create-my-appnow accepts agitCredentialparameter — pass a pre-registered credential name instead of a raw PATupdate-my-app-github-tokennow acceptsgitCredentialfor rolling token rotation with no downtime- Return structured error from
restart-my-appwhen the app is still in creating state - Return structured 409 from
update-my-app-github-tokenon conflict - Return structured error for non-managed buckets in
list-objects-on-bucket enable-app-stage-prodresponse now includes async-init guidance for apps initialising after first enable
osaas-deploy-manager v7.54.2
- Consolidated tenant instance list now aggregates across primary and secondary hosting sites (multi-region support)
- Return 404/503 instead of generic 500 when version listing fails during Agentic SDLC operations
- Propagate subPath and analyticsService to stage app provisioner in Agentic SDLC
osaas-landing-app v3.20.2
- Replace PayPal with Stripe as payment provider on purchase pages
2026-06-02
osaas-app v7.65.0
- Add Git Credentials tab to My Apps dashboard for private repository access without sharing raw tokens
- Add browser-based PAT registration page for secure git credential setup (PAT never passes through MCP or chat)
- Add rate limit and client-side cooldown to magic link login flow
- Fix overlapping labels in Add Git Credential modal
- Fix submit button not disabled while create-team form is pending
- Fix: show service instances without requiring a subscription record
osaas-ai v7.46.0
- Add
start-git-credential-registrationMCP tool: initiates browser-based PAT registration, returns a one-time URL (valid 10 min) - Add
get-git-credential-setup-instructionsMCP tool: returns a ready-to-run curl command for headless/CI credential registration - Add
list-git-credentialsMCP tool: list registered credential names and timestamps (PAT values never returned) create-my-appandupdate-my-app-github-tokennow acceptgitCredentialparameter; inline token args deprecatedget-service-schemauses structured fuzzy matching for improved service discovery- Auto-diagnose on
update-service-instanceUnknown reason failures - Add
list-all-feedbackadmin tool - Add
create-personal-access-token,list-personal-access-tokens,revoke-personal-access-tokenMCP tools - Expose OscEntry DLL field on dotnet My App via MCP
osaas-deploy-manager v7.54.0
- Support private repository git credentials — store a named PAT, reference it by name at app creation and git-token rotation
- Add git-credential-session mint and redeem endpoints backing the browser-based PAT registration flow
osaas-landing-app v3.20.0
- Add AI agent safety section to homepage
- Add lifecycle tools section to /mcp page
osaas-token-service v7.0.4
- Widen SAT cookie domain to .osaas.io for cross-cluster authentication
2026-06-01
osaas-app v7.63.1
- Fix
/api/auth/loginto redirect correctly to/api/auth/signin(308)
osaas-deploy-manager v7.53.0
- Add OscEntry DLL field to dotnet MyApp — pin the entry DLL at creation or update it later in Settings
- Faster app deletion with parallelized runtime probing
2026-05-31
osaas-app v7.63.0
- Auto-trigger Trivy security scan after every rebuild
- Fix linked issue URL input invisible in dark mode
- Add 10s timeout to deleteMyApp with clear abort error
osaas-deploy-manager v7.52.0
- Fix agent task completion tracking: route syncRunningTaskStatus through updateRunInHistory
osaas-landing-app v3.18.0
- Add MCP integration guide link to Codex tutorial What's Next section
2026-05-30
osaas-app v7.62.0
- Show sign-in code confirmation message and enable OTP autofill on magic-link login
- Pre-populate feedback drawer fields from the list item to fix empty linked issue URL
- Close plan downgrade warning modal immediately on API success
osaas-ai v7.44.2
- Add list-service-instances preflight and terminal-error guidance for bulk delete operations
osaas-deploy-manager v7.51.1
- Automatically probe and refresh stale Gitea tokens in Agentic SDLC workflows
2026-05-29
osaas-app v7.61.0
- Show platform build status (building/running/failed) in the My Apps logs modal
- Context-aware empty-state message in logs modal when app is still building
osaas-ai v7.44.1
- Paginate list-parameters to return all keys when a store has more than one page
- Steer create-my-app to wait-for-app-ready instead of get-my-app after creation
- Add required-field guard to create-service-instance to catch missing mandatory fields early
- Require list-service-instances preflight before bulk delete to prevent stale-name failures
osaas-deploy-manager v7.51.0
- Make /enable endpoint async, returning 202 Accepted immediately
osaas-landing-app v3.17.0
- Add VS Code Bearer token auth header option to /mcp setup page
- Add Windsurf setup tab to /mcp page with mcp_config.json snippet
2026-05-28
osaas-app v7.60.0
- Use per-domain delete to handle secondary-slot custom domains
- Show tenant and user names in feedback list
- Show confirmation modal after plan downgrade
- Show workspace name in feedback table Tenant/User column
- Close restart modal immediately for HA apps
osaas-ai v7.44.0
- Emit DAU by product attribution (liivo/osc)
- Add stop-condition to get-parameter to prevent exhaustive store search
- Add Gitea repo recovery workflow to system prompt
osaas-deploy-manager v7.50.0
- Correct off-by-one in secondary proxy slot length check
2026-05-27
osaas-app v7.59.0
- Surface My Apps as equal activation path in dashboard empty-state
- Add Pro plan first-session value walkthrough after subscription activation
- Add voucher code input to activate-subscription modal
- Add Trial ends column to admin subscriptions table
- Add voucher promo code toggle to day-0 FirstDeployCard footer
- Prevent secret name chip from overflowing modal edge
- Show trial end date in Token Usage card
- Apply voucher code during Stripe checkout via successUrl redirect
- Hide trial end banner for users on paid plans
osaas-ai v7.43.0
- Use port 8080 fallback in Node.js and Python skill examples
- Add MCP subagent guidance and get-mcp-config tool
- Strengthen service ID anti-patterns and add circuit-breaker
- Add list-feedback trigger for feedback status queries
- Redact secrets in assistant messages before MongoDB persistence
osaas-deploy-manager v7.49.1
- Add backfill-secrets entry point and fix K8s job manifest
- Surface K8s failure condition message in backup records
osaas-landing-app v3.16.0
- Add AI Agentic Engineer MCP block above the fold
- Pre-render service list in SSR for SEO/AEO
- Bump service-count refs from 180 to 183
osaas-money-manager v7.13.0
- Expose trialEnd in TenantPlan schema for admin trial date visibility
- Persist trialEnd in MongoDB to avoid redundant Stripe API calls on GET /tenantplan