From 39f937495260e435ea9f7e6271d473f9b222984a Mon Sep 17 00:00:00 2001 From: Dmitrii Kataraev Date: Mon, 27 Jul 2026 11:15:27 -0700 Subject: [PATCH] docs(changelog): back-fill 74 undocumented changes before Monday's release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rod asked for an OSS release next Monday. As it stands it would have shipped with empty release notes, which is the exact failure we thought was fixed. develop's CHANGELOG reads: ## [Unreleased]: since 2026-06-08 <- nothing under it ## [3.3.0] - 2026-06-08 while develop is 68 commits ahead of stage, 58 of them feat/fix. Release notes are generated from this file, so every one of those changes was invisible. Two separate gaps, both from the same cause: 1. **The 3.4.0 cut never came back to develop.** It happened on `stage` (#1654) and stayed there, so develop does not know 3.4.0 exists. That is the third instance of develop<->stage drift found this week, after RR_SES_REGION and the ALB ephemeral-storage block in saas. 2. **74 changes have no entry anywhere.** Generated from the commit log and grouped Added / Fixed / Changed / Documentation / Internal. Checked the overlap against stage's 3.4.0 rather than assuming: 2 of 76 PR references were already documented there (#1475, #1604), and those two are dropped so nothing is stated twice. **No [3.4.0] section is added, deliberately.** Rod cancelled that release this morning, so no 3.4.0 was ever published; a version header here would claim one that does not exist. Its notes are folded into [Unreleased] instead, and Monday's version bump cuts the whole thing under whatever number we ship. Worth naming: stage's 3.4.0 section referenced only 15 PRs for a release that carried far more, so the cut was already thin when it was made. This does not fix the process — the entries are reconstructed after the fact from commit subjects, which is strictly worse than authors writing them at PR time. It makes Monday shippable. Related: #1671, server #1654. --- CHANGELOG.md | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 370 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc7ffe6dc..1a76585a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,376 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased]: since 2026-06-08 +## [Unreleased] + + + +### Added +- **analytics**: shared, transport-agnostic telemetry core (loose report + app) (#1523) +- **anonymize**: configurable entity types + token redaction style (#1447) +- **ci**: migrate Discord notifier workflows to forum channels (tags + auto-archive) (#1510) +- **ci**: on-demand + monthly multi-OS compile/test matrix (#1537) +- **events-ui**: real-time DAP event monitor micro-frontend (#1484) +- **explorer**: File Explorer app with rich media viewers, Monaco editor, hex viewer, and Open with… menu (#1356) +- **nodes**: add answer_documents node to bridge answers into documents (#1506) +- **nodes**: add cognee node (#1501) +- **nodes**: add currency_convert_explicit node (#1497) +- **nodes**: add extract_facts node — document-context + cell-by-cell reader + validator (#1426) (#1545) +- **nodes**: add n8n workflow-automation node (#1231) +- **nodes**: add tool_oura Oura Ring connector (#1625) +- **nodes**: add tool_slack — Slack agent-tool node (post messages, list channels, read history) (#1575) +- **nodes**: tool_filesystem pipeline-sink lanes (#1651) +- **nodes**: tool_google_workspace — shared Google client + gmail, sheets, docs, calendar, drive services (#1570) +- **nodes, ai**: add graph base class; make FalkorDB a real graph node (#1584) +- **nodes, server**: migrate neo4j onto the graph base class (#1611) +- **nodes,vscode**: add Gmail tool node + Google user-OAuth broker (RR-1055, RR-1142) (#1334) +- **run-logging**: task-event continuum, DVR sessions, permanent trace identity (#1661) +- **server, nodes**: add json lane (#1297) +- **shared-ui**: pipeline TTL settings — toolbar cog + modal, VS Code support (RR-309) (#1521) +- **status**: server-computed run report card, pipe-idle analytics, and DVR transport rework (#1678) +- **test-ui**: stress/chaos testing app for RocketRide backend (#1462) +- **ui**: Tabulator DataGrid + record-panel standard, unified usePrefs, shell-api v1 freeze (#1632) +- **ui**: UI consistency program: unify all apps on shared archetypes, components, and a versioned shell contract (#1540) +- add HydraDB database node (db_hydradb) (#1499) +- media stream descriptors + end-to-end source provenance (#1525) + +### Fixed +- **ai**: install test deps via depends() so engine constraints apply (#1466) (#1471) +- **ai**: migrate GPU import guard to find_spec/exec_module (Python 3.12+) (#1460) +- **auth**: register /auth/vscode/google outside standardEndpoints gate (#1543) +- **build**: compare content, not mtime, when sync file sizes match (#1477) (#1567) +- **build**: linux build improvement (#1473) +- **build**: make Breakpad symbol generation non-fatal (#1595) (#1596) +- **ci**: read full marker body in Discord issue/PR notifiers (#1530) +- **depends**: pin bootstrap tools and pydantic to stop downgrade churn (#1536) +- **nodes**: accept documents input lane in extract_data (#1504) +- **nodes**: friendlier chroma port + splitter-profile config (RR-1416) (#1496) +- **nodes**: handle Windows MAX_PATH in Python output nodes (#1546) +- **nodes**: reclassify FalkorDB as database, not store (classType) (#1580) +- **nodes**: render Prompt node instructions as multi-line textarea (#1516) (#1564) +- **nodes**: simplify n8n configuration UX (#1588) +- **nodes**: warn that parse/llamaparse are not provenance-preserving (RR-1406) (#1507) +- **nodes, test**: scope core-module stubs so they don't leak across tests (#1642) +- **server**: bind Python instance.closing() to cb_closing (#1667) +- **shared-ui**: persist Google OAuth tokens to node config and stop authType flip (#1548) +- **shared-ui,dropper-ui**: render media lanes as players instead of dumping base64 into the trace webview (#1619) +- **shared-ui,vscode**: key OAuth tier scopes by node provider for least privilege (#1579) +- **shell-ui**: define REACT_APP_OAUTH_ROOT_URL (ReferenceError: process is not defined) (#1486) +- **shell-ui**: route all auth entries to the Zitadel login page (register via its built-in link) (#1556) +- **tool_mcp_client**: normalize zero-argument tool schemas for reasoning-model agents (#1491) +- **vscode**: auto-populate .env with resolved engine URI/key on connect (#1492) +- **vscode**: group Deep Agent Subagent under AGENT in node picker (#1505) (#1517) +- **vscode**: repoint dead example links to awesome-rocketride (#1422) (#1448) +- **vscode**: wire native file dialog for embedded-app Browse button (#1011) (#1235) +- **weaviate**: pin grpcio-health-checking<1.80 to match protobuf runtime (#1472) +- bind engine to explicit 127.0.0.1 instead of the ambiguous localhost name (#1649) + +### Changed +- **nodes**: rename vector stores to store_* and graph-first db to graph_* (#1636) +- **nodes**: unify vector stores on a shared StoreBase (#1663) + +### Documentation +- **readme**: add RocketRide Cloud links and section (#1444) +- **readme**: revamp landing README with Cloud + On-Prem sections (#1528) +- agent/crawler readiness — robots.txt, sitemap lastmod, ship the LLM surface (#1616) + +### Internal +- **lockfile**: use RELEASE_BOT_* App secrets (rocketride-server naming) (#1587) +- **models**: sync LLM model lists (#987) +- **nodes**: classify FalkorDB as store (classType ["store","tool"]) (#1474) +- **os-matrix**: fix the container env so the distro matrix actually runs (#1603) +- universal node-deps constraints lockfile (CI-built, committed) (#1368) + + + +### Added + +- #429 Add Exa search node and working sample pipeline [FRONTIER TOWER HACKATHON] +- **agent** — Crewai orchestrator +- **agent** — Extract task engine and cmd_data from feat/base-ui +- **agent_deepagent** — Concurrent subagent fan-out via async LangGraph +- **agent_llamaindex** — Single-agent node using LlamaIndex ReAct loop +- **aparavi** — AQL node, multi-tab chat app, auth page removal, reconnect fix +- **audio_tts** — Add Kokoro-only Text To Speech node (RR-411) +- **billing** — Promo codes — SDK methods, CheckoutModal promo box, host wiring (#1475) +- **billing-3** — Billing, validation, shell infra, and SDK sync +- **billing-4** — Profiler visualizations, waitlist gate, subscribe CTA, canvas edge refactor +- **billing-6** — Admin app support, build tooling, profiler security +- **build** — Fedora / RHEL-family (dnf) build-from-source support +- **build** — Upgrade to Rsbuild v2, Module Federation v2, Rslib v0.22 +- **check-externals** — CI framework to detect 3rd-party Python interface drift +- **checkout** — Round monthly-equivalent price up to whole dollars +- **ci** — Experimental-release workflow for non-develop builds +- **cloud_tts** — OpenAI + ElevenLabs cloud TTS on a shared engine (RR-411) +- **dap** — Add BillingCommands mixin — stub for rrext_account_billing +- **database** — Add QuestionType.DIALECT for engine discovery +- **database** — Add QuestionType.EXECUTE for direct SQL/Cypher execution +- **depends** — Add load_depends() helper +- **deploy** — Deployment infrastructure +- **discord** — Add live CI check status and PR state tracking to embed +- **docs** — Add and update documentation for each node +- **docs** — Co-located, build-integrated documentation site +- **docs** — Docs-site star caching & UX robustness (RR-1218) +- **engine** — Add docker-compose and healthcheck for local development +- **engine** — Add Kubernetes Helm chart for production deployment +- **engine** — Load workspace-local nodes via --node_path +- **engine** — Support for experimental capability +- **llm** — Add GMI Cloud LLM connector +- **llm** — Stream model reasoning over the 'thinking' SSE lane +- **llm_minimax** — Add MiniMax M3 model profile +- **mcp** — Add MCP Resources and Prompts to RocketRide MCP server +- **node** — Add ClickHouse database node (db_postgres clone) +- **node** — Add llm_nebius as a branded preset of llm_openai_api +- **node** — Add Mem0 long-term memory tool +- **node** — Add Supabase as a branded preset of db_postgres +- **node** — Add tool_tavily web-search agent tool +- **nodes** — Add anomaly detection node for pipeline output monitoring +- **nodes** — Add ArangoDB db_arango node +- **nodes** — Add Baidu Qianfan ERNIE LLM node +- **nodes** — Add Cohere Rerank pipeline node +- **nodes** — Add DeepL translate + write tool node (tool_deepl) +- **nodes** — Add Exa semantic web search node for real-time data enrichment +- **nodes** — Add GitHub tool +- **nodes** — Add guardrails node for AI safety with input/output validation +- **nodes** — Add Kimi (Moonshot) LLM node + model-sync registration +- **nodes** — Add Landing.ai ADE document-extraction nodes (Parse + Extract) +- **nodes** — Add persistent cross-session memory node with Redis and in-memory backends +- **nodes** — Add self-contained Git tool node (#654) +- **nodes** — Add shared Google access/scope resolver (RR-1054) +- **nodes** — Add Telegram Bot source node +- **nodes** — Add tool interface for vector DB operations +- **nodes** — Add v0 by Vercel tool node for UI generation +- **nodes** — Add video embedding node for semantic search and RAG pipelines +- **nodes** — Config - add deprecation pathway for deprecated profiles +- **nodes** — Emit profile token limits in generated tables, fix Anthropic drift (RR-1220) +- **nodes** — Improve Milvus vector DB node — address all TODOs +- **nodes** — New node - openai compatible +- **nodes** — Parallelize nodes:test with pytest-xdist +- **nodes, ai** — Add graph base class; make FalkorDB a real graph node +- **phase3** — Capabilities probe, shared connection UI, settings overhaul +- **profiler** — Replace cProfile with yappi, snakeviz-style UI +- **registerApp** — Pass requiredPermissions array through to apps.json +- **shared-ui** — Chat module +- **shared-ui** — Replace MUI with plain CSS/HTML, add runtime theme system with light/dark JSON tokens +- **shell** — Branded waitlist button, loading screen, OAuth-loop guard +- **shell-ui** — Apply saved theme on init to prevent tan loading flash +- **store** — Handle-based streaming I/O for file store +- **sync** — Stamp capabilities.reasoning from OpenRouter +- **task** — Scheduled pipeline deployments (deploy v2) +- **tool** — Add DAP tool subcommand for direct @tool_function invocation +- **tool_apify** — Expose Apify Actors as an agent tool +- **tool_daytona** — Run agent code in an isolated Daytona cloud sandbox +- **tool_falkordb** — Query FalkorDB graphs with Cypher as an agent tool +- **tools** — Add automated LLM model sync tool and update provider profiles +- **tools** — Replace tool declarations @tool_function decorators on IInstanceBase +- **ui** — Unify sidebar footer, add engine progress log +- **vision** — 7-node suite — RF-DETR, Mask2Former, DA-V2, BlazeFace + more +- **vscode** — Add Parameters tab to set pipeline trace level +- **vscode** — Change play button to show actionable text instead of current state +- **vscode** — ETag-based conditional requests for GitHub releases API +- **vscode** — Improve stop button feedback in Pipeline Observability screen +- **vscode,engine** — Add server monitor +- Add Bland AI voice call tool node +- Add MiniMax LLM node +- Filesystem Tool +- Pipeline tool +- Save button in canvas toolbar with dirty-state tracking +- Shared-ui migration, ProjectView architecture, agent framework overhaul +- Tool subcommand API, Qdrant fixes, chat provider flexibility + +### Fixed + +- **agent** — CrewAI reliability — stop, trace, config shape (RR-1363) +- **ai** — Cap matplotlib<3.11 — 3.11.0 ft2font aborts model server on detection load +- **ai** — Install test deps via depends() so engine constraints apply +- **ai** — Map server RR_* env vars to ROCKETRIDE_* for sys.admin pipelines +- **ai** — Preserve parallel tool-call identity in transcript replay +- **ai** — Return generic auth errors, log exception details server-side +- **ai** — Stub matplotlib.pyplot before rfdetr import (ft2font aborts engine) +- **audio** — Force docopt/num2words to wheels for Windows engine install (#1358) +- **autoinstall** — Align clang to distro default — unblocks repo-wide Ubuntu CI +- **autoinstall** — Detect root + cover libc++ runtime in compiler-unix.sh +- **autoinstall** — Make gnupg apt install non-interactive +- **billing/shell** — Resilient event bus + plan-aware checkout/upgrade UI +- **build** — Add missing libuuid vcpkg config template +- **build** — Fail the build when Linux dependency install fails +- **build** — Gate server:compile-tests on persisted download state +- **build** — Include shell-ui and apps.json in release packages, fix restart token +- **build** — Make Breakpad symbol generation non-fatal +- **build** — Make cc/c++ symlinking idempotent and fail gracefully without sudo +- **build** — Restore cmake >= 3.19 version gate +- **builder** — Prevent deadlock when conditional skips a dedup branch +- **canvas** — Forward drag events through CreateNodePanel backdrop +- **canvas** — Improve QuickAdd popup label copy +- **canvas** — Pipeline render-loop fix + sidebar logo home nav +- **checkout** — Carry validated promo into preselected-plan checkout (#1604) +- **checkout** — Open plan CTA links externally in the VS Code extension +- **chroma** — Exclude soft-deleted documents from default searches +- **ci** — Add build passthrough for docs-only PRs +- **ci** — Add id-token: write to nightly docker job to unblock prereleases +- **ci** — Add id-token: write to release docker job (preemptive fix) +- **ci** — Allow Nightly workflow_dispatch from stage and main +- **ci** — Block shell injection in _build.yaml via env-var indirection +- **ci** — Drop artifact retention to 1 day to fit in 0.5 GB storage cap +- **ci** — Grant nightly workflow workflows:write to publish prereleases +- **ci** — Match GraphQL github-actions author login in marker search +- **ci** — Pin all actions to immutable commit hash +- **ci** — Pin cryptography at build + UV_LINK_MODE=copy to stop Windows nodes:test _rust.pyd lock +- **ci** — Prevent duplicate Discord posts on discussion edits +- **ci** — Push release/prerelease tags via WORKFLOW_PAT (repo+workflow scope) +- **ci** — Scope nightly.yaml writes to per-job permissions +- **ci** — Stop Discord discussions notifier from posting blank bot comments +- **ci** — Stop Discord notifier from posting blank bot comments +- **ci** — Use literal ROCKETRIDE_APIKEY in Test step instead of secret +- **ci/cd, nodes** — Full tests +- **cli** — Catch ValueError from json5.loads, not non-existent json5.JSONError (#1379) +- **cli** — Implement signal handlers for graceful shutdown (RR-655) +- **client-python** — Bound truncate_filename for small widths (#1385) +- **client-python** — Break drain cycle causing RecursionError on disconnect +- **client-python** — Clean pending DAP request on send failure +- **client-python** — Remove token='*' from restart command +- **client-ts** — Preserve user-specified port in normalizeUri +- **clients** — Pipe errors (Python + TS), SSE rollback, getTaskStatus timeout +- **connection** — Handle missing hostname in URI parsing +- **core** — _message_tasks set is accessed from multiple async contexts without a lock +- **crewai** — Patch async compatibility issues for CrewAI 1.14.x hierarchical crews +- **dap** — Don't let an oversized subprocess stdout line kill the pipeline task +- **database** — Bound Neo4j EXECUTE rows, parse allow_execute strictly +- **database** — Gate EXECUTE path, bound results, validate SDK inputs +- **deepagent** — Avoid transformers dependency for token counting +- **depends** — Bootstrap setuptools alongside wheel +- **depends,whisper** — Unicode encoding + whisper GPU probe in server mode +- **deps** — Restore libc fields in pnpm-lock.yaml +- **deps** — Update pnpm-lock.yaml for lucide-react dependency +- **discord-discussions** — Normalize webhook base, at-most-once POST +- **docker** — Provision /opt/data and use /version for healthcheck +- **docs** — Documenation update +- **docs** — Trigger workflow on README.md changes to keep llms.txt current +- **docs** — Update source connector docs +- **easyocr** — Unwrap DataParallel to prevent SIGABRT under concurrent load +- **engine** — Forward --node_path to task subprocess so workspace-local nodes load +- **engine** — In-process clients connect to wrong port when engine binds to OS-assigned port +- **engine** — Pass uv --excludes relative to cwd so spaced install paths resolve +- **engine** — Pass uv -c constraints relative to cwd so spaced install paths resolve +- **engine** — Progress sidecar for depends.py, remove dry-run, exclude crewai-cli +- **git** — Lefthook sequential +- **guardrails** — Reject '|' in email TLD char class +- **home-ui** — SaaS pipeline export, host-slot sidebar refactor & shell/canvas polish +- **icons** — Add auto-currentcolor theming and fix node icon assets +- **icons** — Preserve original colors for Baidu Qianfan node icon +- **llm** — Clear correct _chat reference in endGlobal across all LLM nodes +- **llm_anthropic** — Drop temperature, removed on Opus 4.7+ +- **llm_ollama** — Auto-configure reasoning models (temperature + reasoning_effort) +- **milvus** — Apply retrieval_score_threshold filter in searchSemantic (#642) +- **mixins** — Error handling for missing pipeline configuration files +- **nodes** — Add input validation/sanitization to LLM chat drivers +- **nodes** — Add rate limiting to tool_http_request node +- **nodes** — Agent keyword search returns nothing (RR-1363) +- **nodes** — Bootstrap deps in agent_rocketride and drop transformers from llm_anthropic +- **nodes** — Correct GMI Cloud Gemini model IDs (#996) +- **nodes** — Enforce LF for .md files and harden doc generator on Windows +- **nodes** — Improve error handling in remote node execution +- **nodes** — Openai - add latest openai models +- **nodes** — Reclassify FalkorDB as database, not store (classType) [stage] +- **nodes** — Remove caption + face_detection nodes ahead of release +- **nodes** — Remove deprecated gemini models +- **nodes** — Remove llm_vertex, fix llm_gemini key handling, migrate vision nodes to LLMBase +- **nodes** — Remove redundant full-res image encode/decode round-trips +- **nodes** — User-configured interval ignored in frame grabber +- **ocr** — Support img2table 2.0 OCRInstance API rewrite +- **profiler-ui** — Rehydrate report on mount so split panes keep the chart +- **qdrant** — Correct score-space mismatch and isDeleted filter +- **release** — Drop orphaned TWINE_USERNAME/PASSWORD lines inside MCP PyPI run block +- **release** — Durable CHANGELOG-sourced GitHub Release notes +- **rocketlib** — Satisfy ruff D204/Q000 in __init__.pyi stub +- **scripts** — Guard state.js dot-paths against prototype pollution +- **scripts** — Resolve undefined BUILD_ROOT and DIST_DIR in licenses.js +- **scripts** — Skip pytest tasks when target dir has no test files +- **sdk** — Align CreditBalance type with backend camelCase wire shape +- **security** — Expand sensitive field redaction patterns in VS Code logger +- **security** — Explicit branch check on nightly workflow_run trigger +- **security** — Prevent arbitrary module injection via /use endpoint (RCE) +- **security** — Prevent filter expression injection in Milvus vector store +- **security** — Require authentication for profiler endpoints and escape HTML output +- **security** — Restrict environment variable expansion in pipeline configs +- **security** — Switch SQL safety check from blacklist to whitelist approach +- **security** — Use pathlib.is_relative_to for path traversal checks +- **security** — Use secure temporary file creation in task engine +- **shared-ui** — Explorer empty-state create + annotation double-click editor +- **shared-ui** — Use named React hook imports in Account panels +- **shell-ui** — Clear pending app on abandoned OAuth back-nav +- **shell-ui** — Force prompt=login on web sign-in so users can switch accounts +- **shell-ui** — Logout flow + guest overlays, monitor branding +- **shell-ui** — Only show Aparavi AQL Settings in sidebar when the AQL app is installed +- **shell-ui** — Scope app settings to installed apps; keep global Settings always visible +- **shell-ui** — Surface MF app load failures instead of hanging on "Loading..." +- **sidebar** — Wire docs link to browser and update announcements +- **store/azure** — Allow wildcard (*) in the Azure blob endpoint +- **store/services** — Respect explicit default in combo field provider resolution +- **task** — Use singular `organization` in pk_/tk_ account info +- **template** — Route RAG chat query through embedding before vector store +- **test** — Fix parallel test server isolation — remove shared ctx.port fallback +- **test** — Resolve flaky timeouts and hanging in concurrent pipeline tests +- **test** — Skip HF-downloading embedding nodes in default CI lane (#1120) +- **test,build** — Unblock test-full pipelines + saas overlay consolidation +- **test/mocks** — Resolve Python truthiness and isinstance traps +- **tests** — Make test_tool_v0 mock import-order independent +- **text-output** — Correct text output handling +- **tika** — Extract media from standalone files and large archives +- **tool_git** — Eliminate pytest-xdist race in path-traversal tests +- **tool_http_request** — Insert path-param values literally (#1369) +- **ui** — Address PR #1191 CodeRabbit review comments +- **ui** — Fix icons and coloring for bland, gmi, and trash bin +- **ui** — Resolve dark mode icon and edge visibility in flow builder (… +- **vision** — Optimize the vision suite — downscale-for-inference, fast PNG, GPU onnxruntime +- **vscode** — Add osx python path for Python-EaaS debugger +- **vscode** — Add Product Hunt badge as PNG — marketplace rejects SVGs +- **vscode** — Allow GitHub raw host in webview CSP so announcements load +- **vscode** — Bake dedicated NATIVE Zitadel app client_id for cloud login (#89) +- **vscode** — Bake production server URL and Stripe key into the VSIX +- **vscode** — Loop-strip HTML tags in firstSentence to handle nesting +- **vscode** — Project editor missing status events and stale serverHost +- **vscode** — Realign view:ready handshake — chat webview blank screen +- **vscode** — Register canvas-played pipelines in sidebar menu +- **vscode** — Remove Product Hunt SVG badge from VS Code README — marketplace rejects SVGs +- **vscode** — Sidebar polish, env variables, autocomplete, and startup fixes +- **weaviate** — Pin grpcio-health-checking<1.80 to match protobuf runtime +- **whisper** — Add version guard to GPU probe for ctranslate2 4.7.x + CUDA 12.8 +- **whisper** — Bound version guard to < 4.8 + guard explicit CUDA devices +- **workflows** — Add retry/backoff to Discord webhook calls +- Address CodeRabbit review - score assignment and first-chunk aliasing +- Address PR #1148 CodeRabbit review comments +- Address PR #1149 CodeRabbit review comments +- Align client-python requires-python with monorepo target (py310) +- Guard against falsy-value traps in psycopg2, chromadb, weaviate mocks +- LLM providers small clean-up +- MF stability, ModelClient SDK refactor, settings UX, billing, and UI polish +- Normalize_tool_input function receives list of params to drop +- Replace mutable default arguments with None +- SDK connect error callback type +- Use chunk reference in _processFullTables to resolve chunkId scoping bug + +### Changed + +- **ai.common** — Consolidate node helpers; drop dead code +- **database** — Hoist max_execute_rows default to a single constant per module +- **database** — Reference DEFAULT_MAX_EXECUTE_ROWS in get_data limits +- **engine, nodes** — Extract duplicate helper from tool nodes +- **icons** — Move SVGs to node dirs, auto-tint monochromes +- **nodes** — Ruff format llm_vision_gemini + llm_vision_openai +- **objstore** — Paginate S3 scan and share a cached scanner client +- **tools** — Nest `sync_models` under `tools/sync_models/` +- **vscode** — Restructure engine management with ioControl pattern +- Migrate llm providers to ai.common.LLMBase + +### Maintenance + +- 65 chore, 23 docs, 12 CI, 3 test and 55 uncategorised commits are omitted from the list above. + ## [3.3.0] - 2026-06-08