Release Notes
This page tracks notable Zerq platform documentation and behavior changes.
2026-04-11
Changed
- Management MCP (workflow tooling) — Added workflow automation tools for full-run and trigger capture testing:
workflow_test_workflow_stream,workflow_trigger_test_listen, andworkflow_trigger_test_stream. Updated Management Tool Catalog counts to 57 tools (workflow category now 9). - Workflow node authoring metadata — Enriched
workflow_list_nodesto return edge-authoring guidance (entry_trigger,terminal_node,requires_source_handle,supported_source_handles,default_source_handle,dynamic_source_handles,wiring_hint) so agents can wiresourceHandlevalues deterministically. - Workflow trigger support alignment — Updated docs and backend validation messaging to consistently include
imap_triggeralongsidehttp_trigger,manual_trigger,cron_trigger, andkafka_consumerfor single-entry trigger workflows.
2026-04-03
Changed
-
Documentation — Zerq Copilot page rewritten for clarity: operations (Management MCP) and consumer (Gateway MCP) modes, professional structure, and marketing-site alignment (
/ai-copilotanchors#operations,#gateway). -
Marketing (
zerq-website) — Single Zerq Copilot page at/ai-copilotcovers Management and Gateway Copilot (#operations,#gateway). -
Management UI — Sidebar adds an external Developer Portal link (configure with
NEXT_PUBLIC_DEVELOPER_PORTAL_URL; local defaulthttp://localhost:3001). See Developer Portal Overview URL.
2026-04-02
Added
- Zerq Copilot for Gateway — Documented the built-in Developer Portal assistant: Zerq Copilot for Gateway (Gateway MCP, profile-scoped gateway auth, server-persisted threads). Internal ops:
_internal/developer-portal-copilot-ops.md;_internal/reference/developer-portal-api.mdlistsGET/PUT/DELETE/api/v1/developer-portal/copilot/thread.
Changed
-
Zerq Copilot for Gateway — Page context: collections list vs collection detail (name, id, endpoint count) is passed to the chat API for better situational replies. See Zerq Copilot for Gateway Page context.
-
MCP Gateway — notes Developer Portal Zerq Copilot for Gateway as a built-in consumer of Gateway MCP when LLM settings are enabled.
-
Developer Portal Overview — feature table includes Zerq Copilot for Gateway.
-
Zerq Copilot for Management — cross-link to the Gateway assistant page (management vs portal scope).
-
Choose Your Path — consumer path mentions optional Copilot for Gateway.
2026-03-31
Added
-
Collection live updates (SSE) — Successful collection creates, updates, deletes, status toggles, duplicates, JSON import, and OpenAPI import emit
ManagementEventwithresource_kind: collectionand anoperationhint (created,updated,deleted,status_changed,duplicated,imported,openapi_imported). Contract:internal/management/ports/collection_events.go;EmitterimplementsCollectionEventPublisher. Collection detail and edit pages subscribe viauseManagementEvents({ collectionId, resourceKind: collection }); the collections list usesuseManagementEvents({ collectionList: true })to refetch the table when any collection event fires. See Live updates (SSE). -
Proxy metadata live updates (SSE) — Successful
POST/PUT/DELETE /api/v1/proxiesemitsManagementEventwithresource_kind: proxy,proxy_id,collection_id, andoperation(created,updated,deleted). Distinct fromproxy_workflow(workflow definition saves). Contract:internal/management/ports/proxy_events.go;EmitterimplementsProxyEventPublisher. Collection detail (/collections/:id) subscribes withuseManagementEvents({ collectionId, resourceKind: proxy })to refetch the proxy list when other sessions change proxies in the same collection. See Live updates (SSE). -
API credentials live updates (SSE) — Successful
POST/PUT/DELETE /api/v1/credentialsemitsManagementEventwithresource_kind: credential,credential_id, andoperation(created,updated,deleted). Validation-onlyPOST /api/v1/credentials/validatedoes not emit. Contract:internal/management/ports/credential_events.go;EmitterimplementsCredentialEventPublisher. The credentials list usesuseManagementEvents({ credentialsList: true }); edit usescredentialId+resource_kind: credentialwith a reload banner on remote updates. See Live updates (SSE). -
API access policies live updates (SSE) — Successful
POST/PUT/DELETE /api/v1/policiesandPUT /api/v1/policies/:id/toggle-statusemitManagementEventwithresource_kind: policy,policy_id, andoperation(created,updated,deleted,status_changed). Contract:internal/management/ports/policy_events.go;EmitterimplementsPolicyEventPublisher. The policies page usesuseManagementEvents({ policiesList: true }); the edit modal usespolicyId+resource_kind: policyfor reload-on-remote-change behavior. See Live updates (SSE).
Changed
-
Zerq Copilot for Management — shell layout — The floating Zerq Copilot button is unchanged. When opened, the chat embeds in the app shell: main content on the left, Copilot on the right (desktop/tablet
mdand up). On narrow viewports, the panel opens as a full-width column below the header covering the main area until you close it. The panel uses an embedded layout (embedmode) rather than a detached floating bottom sheet on desktop. -
Zerq Copilot for Management — mobile — The Fullscreen header control is hidden below
md(the embedded panel already uses the viewport under the top bar). Fullscreen mode is cleared when the viewport is narrow so layout stays consistent. -
Marketing site —
zerq-website/ai-copilot: hero actions are Read the docs (whenNEXT_PUBLIC_DOCS_URLis set) and See all capabilities; Request Enterprise Demo appears only in the closing CTA and links to/#contact(home page contact), not a broken in-page#contactanchor. -
Documentation — Management MCP tool count aligned to 54 across Management Tool Catalog,
_internal/ai-copilot-ops.md, and the Zerq Copilot changelog entry; Zerq Copilot for Management capabilities table distinguishes profiles (rotate profile credentials) vs API credentials CRUD. Public changelog: removed a broken/_internal/...doc link (excluded paths are not published) in favor of a repo path._internal/ai-copilot-ops.md: Management UI shell;_internal/catalog.md:internal/management/copilot/pointer. -
Backend (naming) —
cmd/server/main.go: the sharedevents.Emitterfor management-domain SSE is now namedmanagementEventEmitter(wasworkflowPublisher) so wiring matches its role beyond workflow saves._internal/management-domain-events-sse.mdupdated accordingly. -
Frontend (build) — NextAuth
authOptionsmoved tofrontend/src/lib/auth-options.tsso the App Router auth route only exportsGET/POST(required fornext buildtype-check).ClientFormModal:onRemoteListRefresh, SSE stale banner, andreloadClientFromServerimplemented. Collection detail: use serviceCredentialstype (includesimap).Selectwrapper aligned with installed Radix types (nomodalprop until Radix upgrade).
2026-03-28
Added
-
Access profiles live updates (SSE) — Successful
POST/PUT/DELETE /api/v1/clients/:clientId/profiles,POST .../profiles/:id/rotate(when rotation runs), andPUT .../profiles/:id/auth-typeemitManagementEventwithresource_kind: profile,profile_id, parentclient_id, andoperation(created,updated,deleted). Contract:internal/management/ports/profile_events.go;EmitterimplementsProfileEventPublisher. The access profiles UI usesuseManagementEvents({ accessProfilesForClient: true, parentClientId })for silent list refetch; edit and authentication modals useprofile_id+resource_kind: profilefor reload-on-remote-change behavior. See Live updates (SSE). -
API clients live updates (SSE) — Successful
POST/PUT/DELETE /api/v1/clientsandPUT /api/v1/clients/:id/statusemitManagementEventwithresource_kind: client,client_id, andoperation(created,updated,deleted,status_changed). Contract:internal/management/ports/client_events.go;EmitterimplementsClientEventPublisher. The API Clients page usesuseManagementEvents({ clientsList: true })for silent list refetch; the edit modal usesclient_id+resource_kind: clientfor reload-on-remote-change behavior. See Live updates (SSE). -
Management live updates (SSE) — After a successful
PUT /api/v1/proxies/:id/workflow, the API emits a compactManagementEventon an internal bus and (when Redis is enabled) on Redis channelzerq:management_eventsso all pods can fan out to browsers.GET /api/v1/events/stream(viewer+ OIDC) streams JSON events over SSE; the Workflow Builder refetches when the editor is clean, or shows a banner when there are unsaved local changes. See Live updates (SSE). v1 emits only for this workflow persist route; validate/test endpoints do not emit. -
Zerq Copilot for Management — built-in chat assistant in the management UI (short name Zerq Copilot in the product). Streams responses using any configured LLM provider (OpenAI, Anthropic, Groq, Google, OpenRouter, Azure OpenAI, Amazon Bedrock, Ollama, custom). Connects exclusively to the Management MCP — full CRUD across all 54 tools: collections, proxies, workflows, policies, clients, profiles, credentials, audit logs, metrics, and request logs. Acts on behalf of the logged-in user using their OIDC session; RBAC is enforced by the backend on every tool call. Configurable via
AI_MODELSenv var with runtime enable/disable (no image rebuild). See Zerq Copilot for Management for user docs and_internal/ai-copilot-ops.mdfor ops setup. Zerq Copilot for Gateway (runtime-focused) is planned for a future release.
Added (continued)
- Workflow IMAP Trigger entry node (
imap_trigger) for email-driven workflow runs: config includescredentials_id,mailbox(defaultInbox),poll_interval_seconds,mark_as_seen; outputs includesubject,from,to,date,body_text,body_html,uid,mailbox, andrun_id. Added new credential type IMAP for storing host/port/username/password/TLS settings. Includes a two-layer HA design (Redis ownership lock + UID deduplication) for safe multi-pod deployments. Added starter template IMAP Email Echo (imap_trigger_echo). - IMAP "Listen for Email" test mode — workflow builder now shows a Listen for Email test panel for
imap_triggernodes (mirrors HTTP "Listen for request"). Connects to IMAP read-only, waits for the first unseen email, streams the captured payload to the UI via SSE, and auto-runs the downstream workflow for immediate testing. Credentials and mailbox are required before starting. - Generic credential validation — new endpoint
POST /api/v1/credentials/validateaccepts{ type, config }and tests a live connection without saving. Currently supportsimapcredential type (dials IMAP and lists the target mailbox). Additional types can be added by registering a validator ininternal/management/credentials. Frontend "Validate Connection" button available on the IMAP credential form in Settings → Credentials.
Changed
-
Workflow builder — Removed the duplicate floating Add node button on the canvas (bottom-right); it conflicted with the Zerq Copilot control. Use Add node in the builder toolbar only.
-
Product naming — The management UI assistant is branded Zerq Copilot for Management (in-app and marketing: Zerq Copilot). Zerq Copilot for Gateway is reserved for a future runtime-focused experience. Docs, website, and UI copy updated accordingly.
-
Zerq Copilot for Management — UI — Chat panel restyled for a clearer Claude-like experience: sticky header with model selector, soft message surfaces (assistant cards + user bubbles), centered readable column in fullscreen, copy-to-clipboard on assistant replies, refined markdown typography, and an elevated composer. Side panel width slightly increased on desktop.
-
Zerq Copilot for Management — UI (continued) — Syntax-highlighted fenced code blocks (Prism / light–dark themes), copy on code blocks and on user messages, larger Radix model selector, Zerq logo in header and message avatars.
-
Zerq Copilot for Management — user messages — User turns are right-aligned in the thread (assistant stays left); the signed-in user’s photo or initials (OIDC session via NextAuth) lead each bubble (before the message), still within the right-side cluster.
-
Zerq Copilot for Management — theming — Markdown and Prism code blocks use shared CSS variables (
--foreground,--muted,--primary,--success,--border, etc.) instead of bundled light/dark palettes; copy and “done” states usetext-success. -
Zerq Copilot for Management — UX — Panel layout aligned with app surfaces (
bg-card,bg-sidebar, borders, primary-tinted user bubbles). Retry on failed requests and on each assistant message (regenerate). Retry on user messages: regenerates the following assistant reply when present, or resends the same prompt when the user message is still the last message (no reply yet). Stop while streaming. Error card with Retry / Dismiss. -
Zerq Copilot for Management — model control — Model selector moved from the header to a rounded pill beside the message field (Claude-style), with the menu opening upward when space is tight.
-
Zerq Copilot for Management — conversation retention — Closing the panel does not discard the thread; only Clear conversation (trash) clears it. Threads are persisted on the management API (
GET/PUT/api/v1/copilot/thread, MongoDBcopilot_threads, scoped by OIDCsub) so refresh and multi-device use the same saved conversation. See Zerq Copilot for Management and_internal/ai-copilot-ops.md.
Changed
-
Management SSE (
GET /api/v1/events/stream) — Fixed a panic when opening the event stream: the body stream writer must not callfasthttp.RequestCtx.Done()from the streaming goroutine. The handler now relies on write/flush errors and hub channel close for teardown. -
Zerq Copilot for Management ↔ Management MCP — Server-side MCP client now targets
/api/v1+MCP_MANAGEMENT_PATH(not a hardcoded/mcp/managementsuffix) and sends the user’s OIDC access token on every Management MCP request (initialize,tools/list,prompts/get,tools/call), matching backendmanagementAuthMiddlewareand external IDE clients. See_internal/ai-copilot-ops.md.
Changed
- Workflow Save vs Enable separation — saving a workflow and enabling a workflow are now independent actions. A workflow can be saved (and tested) while disabled. The Enable Workflow toggle in the builder toolbar controls whether production triggers fire. Save persists the workflow definition at any time regardless of the enabled state. Disabled workflows: all test modes (HTTP test-listen, IMAP listen-for-email, Execute Workflow) remain available; production triggers (cron, Kafka, IMAP scheduler) do not start. Affects all workflows; no migration required for existing enabled workflows.
- IMAP trigger default mailbox changed from
INBOXtoInboxto match common IMAP server conventions. Existing configured workflows are unaffected; only the default value shown in new configurations changes. - Frontend dirty-state tracking — the Save button in the workflow builder is disabled when there are no unsaved changes. Navigating away or refreshing with unsaved changes shows a browser confirmation prompt. Clicking a node or dragging it on the canvas does not trigger the "unsaved" state (ReactFlow runtime-only fields are stripped from the dirty-state comparison).
- Test Node button re-added for trigger nodes in the node config panel. Trigger nodes now show both the trigger-specific test action (e.g. "Listen for Email", "Listen for Request") and the standard "Test Node" button.
- UI layout fix — content wrapper now uses
h-screeninstead ofh-[calc(100vh-3.5rem)]. The previous value caused a ~56 px white strip at the bottom of every page because thept-14header offset was being subtracted twice from the viewport height.
Changed (Engineering)
- Backend domain packages (Phase 4) — Top-level
handlers/,services/, andmiddleware/were removed. Management REST handlers and services live underinternal/management/{collection,proxy,credentials,client,policy,profile}/(each withservice.go+handler.go), withinternal/management/portsfor collection/proxy interfaces andinternal/management/middlewarefor management auth and cache invalidation. Gateway-specific code is underinternal/gateway/(handler.go+middleware/for auth, DB logger, compress/cache/rate-limit stack). Observability (audit logs, metrics, gateway DB logs) is underinternal/observability/{audit,metrics,dblogger}/. Developer portal is underinternal/portal/withmiddleware/auth.go. Public HTTP routes and behavior are unchanged;WorkflowEngineno longer stores an unusedProxyServicepointer (constructor takes credentials + collection services and proxy handler only). - Backend module layout — Shared infrastructure moved from
backend/utilsintointernal/platform(cache, DB helpers, auth, httpx, logger, encryption, pub/sub, merge, duration). Portable IMAP/Kafka/SMTP/V8 clients live underpkg/(imapclient,kafkaclient,smtpclient,v8engine). Binary entrypoint iscmd/server/main.go; Docker build usesgo build ./cmd/server. MCP code lives underinternal/mcp/gatewayandinternal/mcp/management. Seedocs/_internal/backend-structure.md. - Backend workflow package layout — Workflow engine, HTTP handlers, trigger schedulers (cron, Kafka, IMAP), trigger test stores, and Redis/pubsub notifier code now live under
backend/internal/workflow/(engine,workflow,triggers,triggercore, and subpackages). Public management API routes and behavior are unchanged; this is an internal module organization change for maintainability. - Generic Trigger Architecture — Backend and frontend refactored to a unified system for all workflow trigger test-listen flows. Single API endpoint pair replaces per-trigger routes. Backend
TriggerTestManagerandCapturedTriggerEventprovide a single facade. FrontendTRIGGER_REGISTRYis the single source of truth for trigger metadata (canTestListen, display labels, etc.).WorkflowBuilderuses one unifiedtestListenSessionstate for all trigger types. Adding a new trigger test-listen in future requires only: a backend case inTriggerTestManager.Start()and one entry inTRIGGER_REGISTRY. Affects engineering team only. - Backend trigger schedulers (cron, Kafka, IMAP) now enforce
proxy.WorkflowEnabled && proxy.Status == "published"before starting or maintaining production workers. Workers are stopped immediately when a workflow is disabled or unpublished. cleanWorkflowinWorkflowBuilder.tsxstrips ReactFlow runtime-only node fields (selected,dragging,measured,positionAbsolute,width,height) and edge fields (selected) before dirty-state comparison and before saving, preventing UI interaction events from being stored in the workflow definition.- Docs location enforcement — remaining legacy docs under repository-root
docs/(middleware-flow.md,middleware-optimization.md) were migrated tozerq-docs/docs/_internal/asgateway-middleware-context-flow.mdandgateway-middleware-optimization.md, then deleted from root. Root README project layout now reflects that canonical docs live inzerq-docs. - Backend structure governance doc expanded —
docs/_internal/backend-structure.mdnow defines mandatory naming conventions, dependency direction, package-placement rules, and PR checklist guardrails so future backend changes continue to follow the microservice-ready hierarchy (cmd/server,internal/*,internal/platform,pkg). - Phase 2 hardening guardrails (backend) — Added executable architecture boundary tests (
internal/architecture/architecture_test.go) andbackend/scripts/dev-check.shfor local/CI checks; workflow runtime now depends on workflow-owned ports (internal/workflow/ports) instead of direct management package imports; startup-fast-fail domain runtime validation added ininternal/platform/config/domain.go; workflow trigger sync payload standardized viatriggercore.WorkflowTriggerSyncEventcontract (event_type,proxy_id,version,source). - Phase 3 microservice-readiness hardening (backend) — Added boundary-contract tests for workflow seams (
engine_ports_test,contracts_test,notifier_test) and enforced them viascripts/dev-check.sh; tightened DTO boundaries for workflow persistence and collection->proxy cross-domain writes (ProxyWorkflowUpdateCommand,triggercore.ProxyWorkflowState,management/portsrequest DTOs); expanded internal service-readiness docs with data ownership, extraction sequence, and split blockers. - Backend liveness/readiness probes — Added explicit probe endpoints for container orchestration:
GET /livez(process alive) andGET /readyz(dependency readiness: MongoDB plus Redis whenCACHE_TYPE=redis). - Probe wiring alignment with backend structure — Moved probe logic from
cmd/server/main.gointointernal/observability/healthand wired it through Fiberhealthcheck.New(...)using custom liveness/readiness probes, keeping route behavior the same (/livez,/readyz) while keeping composition-root code slimmer.
2026-03-26
Added
- Workflow Kafka Consumer entry node (
kafka_consumer) for Kafka-driven runs: config includescredentials_id,topic,consumer_group,enabled,commit_mode,poll_timeout_ms; outputs includetopic,partition,offset,key,message,headers, andrun_id. Added starter template Kafka consumer + echo (kafka_consumer_echo).
Changed
- Workflow builder now auto-seeds a valid default proxy workflow when enabling workflows on a brand-new proxy (instead of sending
workflow_definition: null), preventing400on first enable. The canvas now immediately reflects backend-seeded workflow changes without requiring a page refresh. API error messages from workflow save/validate/toggle are now surfaced directly in the UI instead of generic status-only failures. - Workflow trigger registrar sync now uses Redis Pub/Sub broadcast (publish once, every pod receives and applies, including the sender on receive) instead of Redis Streams. Added reconnect protection: when Redis connectivity is restored after a disruption, trigger schedulers run a bootstrap sync to avoid stale in-memory registrations after missed pub/sub events.
- Management MCP workflow guidance updated to include
kafka_consumeras a valid single entry trigger alongsidehttp_trigger,manual_trigger, andcron_triggerin prompt text and tool descriptions (workflow_test_node,update_proxy_workflow,validate_proxy_workflow). Tool catalog docs now explicitly call out kafka-consumer support for workflow entry validation flows. - Backend workflow validation now enforces exactly one entry trigger node per workflow (
http_trigger,manual_trigger,cron_trigger, orkafka_consumer). Validation and enabled workflow updates reject definitions with zero or multiple entry triggers. - Kafka consumer scheduler no longer uses Redis distributed locks; multi-pod coordination now relies on Kafka consumer-group partition assignment.
- Cron and Kafka trigger schedulers now use startup bootstrap plus event-driven per-proxy sync on proxy/workflow create, update, enable/disable, and delete. The recurring 60-second full trigger reconciliation loop has been removed by design.
2026-03-24
Added
- Workflow Cron Trigger node (
cron_trigger) with scheduler-driven runs: configurablecron_expression,timezone, andenabled; outputstriggered_at,trigger,schedule,timezone, andrun_id. Multi-pod execution uses Redis distributed locks for at-most-once execution per slot. Documented at Cron Trigger. - Workflow template Cron trigger + echo (
cron_trigger_echoinbackend/templates/workflow_templates.json):cron_trigger→ Code (simple starter) where code logs a cron run viaconsole.log(...)and returns minimal metadata (run_id,schedule,triggered_at). - Workflow Manual Trigger node (
manual_trigger): starts runs from the builder only; outputstriggered_atandtrigger(manual). Documented at Manual Trigger. Engine acceptshttp_trigger,manual_trigger, orcron_triggeras entry nodes. - Workflow template Manual trigger + echo (
manual_trigger_echoinbackend/templates/workflow_templates.json):manual_trigger→ Set → Response JSON withtriggered_atandtrigger. Listed on Workflow Templates.
Changed
- Workflow builder: Execute workflow failures show a compact Run failed chip with Details (full message in a small overlay panel) and Dismiss, so the toolbar layout is not stretched by long errors. Details closes on outside click or Escape. See Building Workflows.
2026-03-22
Added
- HTTP Request node:
body.typemultipartformultipart/form-data(text fields + file parts, base64 file payloads). UI label Form (URL-encoded) clarifiesform_datavs multipart. Documented on HTTP Request Node. - Workflow XML node (
xml_node): XML ↔ JSON conversion, optional SOAPBodyunwrap forxml_to_json. Documented under XML Node; Data Processing and Node Reference updated. Management MCP workflow prompt listsxml_node. - Workflow templates (in
backend/templates/workflow_templates.json): XML → JSON (incoming) and JSON → XML (response) starters for gateway workflows that usexml_node.
Changed
- Management UI: proxy create/edit dialog step indicator shows horizontal connector lines between step circles so the step order reads as a clear sequence (completed segments use a stronger track color).
2026-03-07
Fixed
- Workflow expressions (loop body): use
$json['$item'],$json['$index'],$json['$loop']— same$jsonpattern as$json['node_id']. Example URL:{{ 'https://…/' + $json['$item'] }}.
Added
- Workflow APIs:
POST /api/v1/workflows/:workflowId/execute-partial,GET /api/v1/workflows/:workflowId/versions,POST /api/v1/workflows/:workflowId/versions/:versionId/restore. - Workflow node
execute_subworkflowand MCP toolsexecute_workflow_partial,list_workflow_versions,restore_workflow_version. - Execution records now store per-node
node_inputsfor replay; workflowruntime_settingsfor execution timeout and save-on-success/error flags. - Expressions:
$workflow,$execution, and$input(all/first) in the Go engine; partial run and test-node acceptpinned_outputs. UI: pin output in the NDV for mock upstream data (not persisted on save).
2026-03-20
Added
- Workflow Loop node (
loop_node): public docs Loop Node, updates to Logic And Routing, Expressions — loop variables, Flow Control; internal index (repo only):zerq-docs/docs/_internal/reference/workflow-nodes-index.md. Sidebar Nodes → Logic & Routing includesloop_node. deploy/mongodb.shfor full-database MongoDB backup/restore (readsMONGODB_URIfrom env ordeploy/.envonly, optional defaults in script); internal operator runbookdeployment/operations/backup-and-recoveryupdated.deploy/mongodb.sh clear-collection <name>to empty a collection viamongosh(replaces earlierclear-logsnaming).deploy/mongodb.sh backup-json/restore-jsonfor per-collection Extended JSON (mongoexport/mongoimport); output underdeploy/mongo-backups-json/.
Changed
- Loop node expressions: iteration context is only on
$json($json['$item'],$json['$index'],$json['$loop']); bare$item/$index/$loopglobals are not injected in V8 (consistent with the rest of the workflow engine). - Loop node canvas and NDV: Loop / Done outputs; edges use
sourceHandleloop(or empty) for per-item body anddonefor after-loop. Engine routes only by handle (split-batch style). Templates:loop-batch-api-calls,loop-reqres-users,loop-github-repos-meta,loop-nested-rows(nested loops); Loop Node wiring docs updated. - MongoDB backup/restore script path:
deploy/mongodb.sh(run fromdeploy/;deploy/scripts/removed). deploy/mongodb.shreadsMONGODB_URIfrom.envwith line parsing (Atlas URIs contain&, which breakssource); macOS install hint usesbrew tap mongodb/brew.deploy/mongodb.shreads env keys fromdeploy/.envonly (notbackend/.env).- Internal backup runbook:
mongodumpproduces BSON + metadata JSON; restore usesmongorestore.
2026-03-17
Changed
build-push.shnow updates only the docker-compose image tags for services that were built, not all services. Tags are written directly in the compose file.- Documentation homepage UI/UX aligned with zerq-website: card styling (rounded-2xl, hover lift, shadow), section padding, buttons (scale on hover/active), icon boxes, section title underlines, and container layout.
2026-03-13
Added
- Audience-first information architecture introduced.
- New reference pages added for management and gateway behavior.
- New deployment architecture and environment index pages.
Changed
- Public documentation navigation was simplified across sidebar, top bar, and footer.
- High-friction onboarding pages were rewritten for clearer user journeys.
Fixed
- Duplicate and overlapping pages were de-duplicated.
- Public links to internal-only documentation routes were removed.
Security
- Public docs builds now fail on broken links to prevent accidental leakage paths.
Notes
- This changelog is the canonical release-notes entry in the docs site.
- For code-level commit history, use repository git history and PR links.