Skip to content

DeepSeekBot v1.4.0

Latest

Choose a tag to compare

@DoodleBears DoodleBears released this 18 Oct 17:16
df454d5
  • 官网 / Website: DeepSeekBot
  • 安装教程 / Installation: 中文 · English
  • 精确安装版本 / Exact install spec: deepseekbot@1.4.0

Tob and a simpler Home bring Bot management into conversation, a persistent panel workspace makes room for each Channel, and expanded CLI, approvals and DSH compatibility support everyday work.

Added

  • Home introduces Tob, the protected local steward, with model setup, a shared chat composer, an editable greeting and suggestions that fill a draft; below it, borderless Token history and Bot activity cards form two columns or stack in narrow panels, and Bot rows reopen the existing DM without disturbing saved layouts or shortcuts (#2082, #2184).
  • Tob discovers and uses the installed DeepSeekBot CLI to manage models, presets, Assignment concurrency and runtime preferences, create and configure Bots with personality and Memory, and create groups, invite or remove Bots, change group settings and handle pending membership requests. Existing Human authority, approval and stale-write checks remain in force; operation keys recover lost responses without duplicating resources, and invitations auto-accept by default unless the Human disabled the Profile-wide setting (#2088, CLI guide, #2089, CLI guide, #2090, CLI guide, CLI guide, CLI guide, #2087, CLI guide).
  • The CLI can inspect Bot traces and directly list or run Bot, Browser and Computer tools through the same authorization and audit paths, without a model; session-only operations are explicitly refused and secret tools are omitted from trace output (#1682, #1695).
  • Live Host CLI commands cover Memory history, diffs, checkpoints and guarded restore; schedules and run history; Human Inbox decisions, session inspection, approval-rule revocation, Workspace Grants and private MCP lifecycle, with confirmation required for destructive operations (#1690, #1696, #1699).
  • The CLI exposes Host-owned channel/group membership and policies, messaging and IM bindings, model plans and presets, Bot appearance and wake settings, Browser/Computer diagnostics and archives, Marketplace, usage/activity, releases and pairing review. Commands retain the UI permission checks and coded refusals, with explicit confirmation for installation, removal and other dangerous changes (#1697, #1698, #1700, #1701, #1702, #1703).
  • Choose or author an Approval Template and optionally a shared reviewer model; a tool-free Approval Review Session allows, rejects or escalates eligible operations, including masked secret-tool and Browser/Computer requests, while keeping decisions visible. Rejections enter the Human Inbox for an exact one-time override, repeated rejections pause auto approval, and active-template or reviewer-setting changes still require Human approval (#1823, #1824, #1825, #1826, #1827, #1822, #1871).
  • Opt-in Group send review can hold stale replies, incorporate new context, yield to observed peer answers and explicitly complete Inbox work, with two rechecks and bounded continuation or snooze. Interrupted drafts recover from fresh observations and duplicate-safe receipts across restart; changed attachments, revoked membership and uncertain side effects cannot silently produce a stale or duplicate reply (#2053, #2054, #2055, #2056).
  • Pair a phone with a ten-minute QR/link, retain access across Host restarts and revoke it with its live connections; the mobile full-client view opens Bot mode, DMs, private input and Browser/Computer viewers using that paired identity (ADR-0199, #1652, #1654, #1687, #1845).
  • Paired phones can receive request and reply notifications, open the exact pending item and decide eligible tool approvals from notification actions; private input stays content-free, revocation removes notification access, and reconnect repairs registration (ADR-0202, #1655).
  • Mobile Browser and Computer viewers support direct or trackpad input, sticky modifier keys, keyboard entry and handing control back to the Bot; local Computer takeover begins on input and expires after idle time. Qualified container viewers can use tailnet-only WebRTC, falling back to WebSocket, with CLI probes and revocation checks (#1798, #1799, #1832, #1862, #1865).
  • Mobile profiles can manage group membership and routines, inspect usage and Memory activity across time ranges, and configure global or per-Bot models and complete Assignment presets; usage details retain reported counts when some calls are unknown (#1894, #1895, #1897, #1899, #1911, #1912, #2086).
  • Development/UAT Cloud services add WorkOS sign-in, workspaces, durable text Channels, member/guest invitations and scoped Agent health requests, with a mobile drawer that distinguishes local Computers from Cloud and keeps drafts and navigation bound to their source. These are development capabilities, not a production Cloud or app-store launch (#2101, #2120, #2130, #2137, #2145, #2148, #2151, #2153, #2155, #2161, #2179, #2174).
  • Show checked Lark/Feishu parent files in their Channel request bubble, with bounded original download, retry feedback and existing Host application choices when available; Human access preserves current source authorization without waking a Bot (#1022).
  • Keep the installed deepseekbot CLI independent of Host-only DSH modules so authorized media commands also start outside a running Host process (#1022).
  • QQ can explicitly post a retained delayed result through an authorized saved group target using the shared Outbox, current app identity, final authorization and hourly quota; expired replies and uncertain sends remain separate outcomes, with real QQ qualification tracked independently (#1154).
  • QQ's checked consumer can forward ordinary group text for fresh receiver qualification and explicit per-conversation collection. Existing Observation and count/time harvest keep collection separate from intentional own-app posting; old events from blocked intake intervals do not qualify a newly allowed conversation. The product includes the qualified Provider as independently versioned 4.32.0-botharness.21; real application and Client acceptance remain separately tracked (#1155).
  • Stop a PersonaBot from the Web Client too. While a Bot in the DM or Group Channel is thinking or working and the composer is empty, the Send button becomes Stop; pressing it ends that Bot's current turn, the same as the mobile Stop. In a Group Channel it stops every Bot that is working there. Start typing and the button turns back into Send, so you can still steer the Bot instead (#1721).
  • Drag files anywhere onto a conversation to attach them; a drop target appears while files hover (#1725).
  • Settings → Messaging → Send messages offers Enter, Shift+Enter and ⌘/Ctrl+Enter, with keycap labels and the matching newline behavior (#1726).
  • New composer slash commands: /memory and /sessions in a DM, plus /profile, /settings and /sidebar in DMs and Group Channels (#1727).
  • Your own messages that use Markdown (code blocks, inline code, bold, lists, headings, quotes, links, tables) now render formatted, keeping the line breaks you typed (#1728).
  • In Bot mode, Ctrl+K (⌘K on macOS) opens a quick switcher: type part of a PersonaBot, group chat or channel name — Chinese names included — then use the arrow keys and Enter to open it the same way its sidebar row does. An empty search lists recent conversations, hidden channels rank last, and the shortcut also works while typing in the composer (#1740).
  • Hovering or keyboard-focusing a Bot's avatar or name in a DM or group conversation now opens a small profile card with its roles, description and current status (thinking, working on what, waiting or blocked), plus Message and Profile buttons; a Human author's card shows just the name. The card replaces the browser's plain tooltip (#1744).
  • The browser tab title now shows the Human Inbox unread count, with a ● mark while something waits for your decision, for example ● (3) DeepSeek Harness (#1746).
  • Desktop notifications: turn on Desktop notifications in Bot settings › Notifications, and while the page is in the background this browser shows a system notification when a Bot needs your approval or an answer, mentions or replies to you, or finishes replying in a DM. Clicking it opens the message (#1747).
  • Press ? or Ctrl+/ (⌘+/ on Mac) in Bot mode to see every keyboard shortcut; the list is also under Bot settings › Keyboard shortcuts (#1748).
  • Tool approval and question cards use compact, borderless controls with visible outcomes, expandable details and file diffs, expiry feedback and keyboard actions; single-choice questions can be answered directly while higher-risk always-allow choices keep their confirmation (#1749, #1752, #1753).
  • The Human Inbox moves with J/K, opens the source with Enter, marks an item handled with E, selects with X and snoozes with S. Selected items can be marked handled together, and selected tool approvals allowed once or rejected together. Remind me later hides an item until a chosen time; the Snoozed filter lists them and brings one back, and deepseekbot inbox-snooze does the same from the CLI (#1750, #1751, #1754).
  • In a group Channel, right-clicking a Bot's avatar opens a menu to send it a message, @mention it in the composer, or view its profile (#1757).
  • The Bot mode sidebar now shows how many unread Bot messages each DM and group has. Right-click a conversation for Mark as read or Mute, or pick Mark all as read from the sidebar's ⋯ menu; a muted conversation turns grey and stays out of the Activity unread total. Hiding or moving conversations shows a toast with Undo. Alt+↑/↓ moves to the previous or next conversation and Alt+Shift+↑/↓ jumps to the previous or next unread one. deepseekbot channel-unread and deepseekbot channel-mute do the same from the CLI (#1738, #1739, #1741, #1742, #1743).
  • Opening a conversation with unread replies now shows a New messages divider at your last-read point, switching conversations keeps the message you were reading, long messages fold behind Show all, each grouped message shows its own time on hover, images open in an in-page preview you can step through with the arrow keys, you can react to a message with an emoji from its hover bar or, on a phone, its long-press menu, and Bots can react too by passing react_to and reaction to channel_send, with or without a reply in the same call (Bots see the reactions when they read the Channel, and deepseekbot channel-react adds yours), and Ctrl/⌘+F searches the open conversation and jumps to a match (deepseekbot channel-search runs the same search) (#1769).
  • When creating a Bot, Advanced settings → Memory location lets you keep its memory files in a folder you choose, such as another drive, instead of the default DSH data folder. deepseekbot create --memory-location <dir> does the same from the command line (#1772).
  • You can now move an existing Bot's memory files to another folder, or back to the default one, from the Bot's Workspace Grants → Memory Repository row. The Bot starts a new main session in the new folder; chats and Memory history stay. deepseekbot memory-move <id> --memory-location <dir> does the same from the command line (#1772).
  • Navigation shortcuts can be changed: open the shortcut list (? or Ctrl/⌘+/), choose Change next to Bot mode, quick switcher, previous/next (unread) conversation or the list itself, and press the new keys. A shortcut needs Ctrl/⌘ or Alt, cannot reuse one that is taken or reserved, and Reset brings back the default. On macOS the list shows ⌘ ⌥ ⇧ (#1775).
  • Other plugins can now add their own panels to the desktop Bot mode layout through the dockPanels Service. A panel either follows the active Channel or stays the same across Channels, and it appears in the Panels menu next to the built-in ones (#1791).
  • Added the to-do example plugin's Host part, @botharness/todo: a shared to-do list kept in DSH storage, Bot tools (todos_list, todos_add, todos_update, todos_remove) that let a PersonaBot track things for the Human, and deepseekbot todos / todo-* commands that read and change the list or run a tool without the model. Its To-do Dock panel follows in a later release (ADR-0203, #1792).
  • In the DeepSeekBot mobile app, long-press a DM message to copy its whole text, and the phone gives a light tap of feedback when you send a message, allow or deny a Tool approval, or submit an answer. Chat photos now stay cached on the phone, so they reopen offline and no longer flash an earlier photo while you scroll (#1807).
  • Ask a PersonaBot in chat to create another PersonaBot. It fills in the name, Bio, Tags, Avatar, Soul and Core Memory from the conversation and can place the new Bot's Memory in a folder you name. The call follows the same tool approval and saved rules as other Bot tools; when it asks you, the card previews the new Bot and its Memory folder. The new Bot appears in the sidebar with its DM, and deepseekbot create gains --avatar-file and --core-memory (#1858).
  • Host-wide token usage on the Overview page can now cover the last 4 weeks and the last 12 weeks, not only today and the last 7 days; deepseekbot overview-usage --period month|quarter reads the same ranges (#1898).
  • Bot Marketplace search and topic filters include the Bot's own .botharness/bot.json tags (including legacy roles) alongside GitHub topics, counting each Bot once per tag (#1907).
  • Mobile chats now show single-line Bot activity aligned with message bubbles, with consistent gaps and contextual avatars. Long-press reveals full details and an explicit action to open the related conversation, memory files or new Bot; two device-local switches in the Bot profile control posts and memory updates mirrored into its Human DM (#1919).
  • Settings → About in the Web Client and in the DeepSeekBot mobile app shows a build id: the short git commit and the local build time (the mobile app also shows its version and branch), so a test build can be told apart at a glance; tapping the mobile row copies it (#1923).
  • Added default-on optional phone statistics at the bottom of Settings with collapsed details, with anonymous pairing, connection and first-chat results through the official PostHog React Native SDK; a first-use notice follows the Web client, and production enablement awaits public privacy copy, device and Human QA (#1935).
  • Customize the composer footer’s model, Workspace, usage and optional generation-speed controls through its context menu, drag ordering or keyboard alternatives; preferences stay device-local, narrow panels keep controls readable, and hidden metrics do not fetch history (#1958).
  • Add a "Model" submenu to a Bot's right-click menu in the roster: pick from the models and efforts the Bot may use, with the current choice marked; selecting one applies it as the Bot's default without opening the profile (#1959).
  • The chat’s right dock gains a Bot files panel with per-Bot attachment history, including older messages. Files open through the existing attachment viewer and can be referenced through the composer. Selections survive timeline navigation and draft recovery, share the ten-file upload limit, and can be removed without deleting the file (#1960).
  • WeChat paired-owner conversations can be mirrored into the Bot’s local DM, with a separate option to forward local DM messages back to that account. Both switches default off and include clickable help. Mirroring reuses original content, follows content purge, and adds no second wake. Local approval, private-input and other control cards are not forwarded. Forwarding preserves the exact account boundary and stops unsent work when disabled (#1983, spec #1990).
  • Added a collapsible DeepSeekBot section with Bot/persona subgroups to the DSH Session list, keeping each Bot's Orchestrator and Assignment Sessions together across execution directories and using the configured Bot icon for the outer header (#1997).
  • Bot subgroup headers show their owning PersonaBot avatars instead of disclosure chevrons, while the whole header still toggles the group (#1997).
  • Added inline /model <text> and /effort <text> pickers to a Bot DM composer: they list the same catalog models and reasoning efforts as the Bot's right-click menu, filter by the typed text, mark the current choice, and change only this Bot’s Orchestrator at the next turn, preserving fixed or inherited Assignment settings (#2000).
  • Answer Hermes-style slash commands sent as a whole DM message directly in the IM chat without starting a Bot turn: /commands, /help, /status, /model, /effort, /stop and /new, with Chinese aliases and full-width / accepted (#2005).
  • Read-only replies are open to any admitted DM sender; model, effort, stop and fresh-session changes stay limited to admitted senders on Weixin and current management pairings with approval capability elsewhere. Commands run in order per Bot, recheck revoked authority, preserve Assignment model settings, and retain reply outcomes in the existing Outbox; group and attachment messages keep their normal path (#2005).
  • Add deepseekbot bot-new-session <Bot ID> to retire an idle Orchestrator Session through the same Host runtime as /new (#2005).
  • Added a Mention shortcut and icons to Channel sidebar member menus; selecting a member keeps the current draft and focuses the composer (#2009).
  • Mobile chats can preview and save a device-local photo or solid background, with Fill/Fit, image position and background fade. Set a default in Settings or customize a DM/group; cancel and failed saves retain the saved choice (#2118).

Changed

  • Existing CLI scripts that update Bots must supply --expected-profile; bot-delete-confirm and bot-delete-retry now require --confirm, preserving reviewed snapshots and explicit destructive confirmation (#2089).
  • DeepSeekBot supports DSH >=0.2.0-rc.2 <0.3.0-0, retaining the existing minimum while adapting Owner identity, tools and foreground/background Subagent delegation to DSH 0.2.1-rc.2; development stays pinned and future 0.2.x admission does not imply runtime qualification (#2167, compatibility policy #423).
  • Desktop onboarding now guides model setup, creating a Bot and group through Tob, arranging panels, and clicking the Home title to close it and enter the conversation; existing approvals, histories and layouts survive migration, and new Bots start without an automatic welcome letter (#2192).
  • The desktop workspace uses an independent Channel list, Messages and Activity panels with a full-height Control Rail, draggable placement, persistent sizing, configurable gaps and shortcuts, and context menus for visibility. Settings gains cross-page search and dedicated Appearance, Messaging, Notifications and Keyboard pages; panel headers, centered empty states, light/dark surfaces, zoom-safe menus and fading scrollbars are unified, and Channel switching preserves unrelated panels and drafts (#1829, #2017, #1789, #1790, #2016, #2042, #2014).
  • Sessions, Memory files, Memory evolution, Schedules, Browser and Computer live inside Messages with freely nested rows and columns, per-Channel placement, proportions and visibility; reopening or resizing preserves the layout, narrow titles truncate while actions remain available, and old layouts and shortcuts migrate. Bot-only panels stay out of Groups; Channel files and the Bot Inbox open on demand from the Messages header (#2033, #2034, #2036, #2049, #2067, #2069, #2076, #2071, #2074, #2048).
  • The independently released mobile development client gains native DM and Group chats with streaming Markdown, attachments, image viewing, reactions, speech-to-text, in-chat approvals and questions, mentions and stop controls. Floating headers and composers, grouped bubbles, contextual activity and compact decided cards share the desktop design; Bot profiles expose personality, Memory, schedules, models and Workspace Grants (#1643, #1721, #1718, #1838, #1804, #1875, #1879, #1880, #1881, #1886, #1890, #1892, #1900, #1920).
  • Mobile Activity separates Needs you, personal updates and other unread conversations, with in-place decisions, search, filtering, handled history and swipeable tabs; list positions and loaded data survive navigation, and returning refreshes the visible page window (#1653, #1954, #2057, #2111).
  • Mobile Chats gains search, desktop Channel sections and unread counts, creation shortcuts and a computer drawer with connection status and per-computer appearance; settings and notifications remain directly reachable, while Android navigation adapts to pending counts and large text (#1853, #1854, #1861, #1866, #1888, #1850, #1852, #1878, #2077).
  • A Bot now runs Shell and tools from other installed plugins, such as ops_bash, under its Session's own DeepSeek Harness permission mode, with no extra approval card for each call. When DeepSeek Harness itself asks for permission, for example a Shell command that needs to leave the sandbox, the request appears as an approval card in the Bot's chat. Secret tools, editing an original attachment, Browser and Computer still ask as before (#1731).
  • Channel settings are easier to find: right-click a Channel in the Messages sidebar for Channel settings, My nickname and the DM's "Show what this Bot did elsewhere" toggles, or click the conversation header chip for the Profile and the same options. The ⋯ button at the top right of the conversation is gone (#1761).
  • On desktop, a message's react, reply and copy actions now float in a small toolbar over the bubble's top-right edge on hover instead of beside the bubble, so the layout no longer shifts (#1843).
  • Bot and Assignment prompts now say where new files belong: scratch, logs, bundles and generated results go under <workspacePath>/.botharness/<short-task-slug>/ inside the Grant unless the Human names a destination (or the system temp directory), never the Grant root, the Human's home directory or a new sibling folder, and existing project files are edited in place. Assignment terminal reports list the files created (#1957).
  • Upgraded the mobile app to Expo SDK 58 while preserving synchronous local settings and cache writes, and kept iOS permission translations out of Android resources so release builds pass localization checks; developers must rebuild their native development client (#2020).
  • Activity Center now opens the personal Inbox directly on the page and in Dock, filling the available Panel width with cards styled like the Channel list, matching Panel insets and independently collapsible Needs you, For you and Other unread sections, plus header search across eligible results and a menu for filters, history and sorting, with inline Tool approval buttons, expandable context, retryable failures, and batch actions behind an explicit selection mode. Retired Overview navigation, state, styles and duplicate legacy UI tests are removed; open reply drafts survive read-state refreshes (#2026).
  • Android settings use spacious rounded groups, accent headings, inset separators and clearer selected rows; their switches now use native Material 3 controls while retaining existing saved preferences (#2072).

Fixed

  • Restored macOS Desktop window dragging from unused Control Rail space and Panel header whitespace; only the content-sized icon and title close or rearrange a Panel, with Channel identity and actions outside that handle (#2205).
  • Mobile streaming batches draft updates, sends appended text, reuses parsed Markdown and windows measured blocks while keeping history-reading position stable; Android adds paced native text fade, improved sheet/keyboard behavior and streaming or complete-bubble preferences, with a native rebuild required for the native fade (#1803, #1808, #2028, #2183, #1873).
  • Mobile forms and pairing stay above the keyboard, follow system language and text size, and keep navigation, titles and actions reachable; missing conversations offer a working return path, Android dialogs and sheets use consistent themed controls, and cloud navigation dismisses obsolete pairing UI (#2171, #1806, #1872, #1926, #1938, #2004, mobile contribution contract, #2021, #2083, #2106, #2186).
  • On Windows, a Bot's Orchestrator now runs its Shell as pwsh, the Shell its preset provides, instead of a bash tool that ran through PowerShell; pwsh commands in a writable Workspace Grant use that Grant. Bot role prompts no longer name bash as the only Shell, so a Bot also uses a Shell that another installed plugin adds, such as ops_bash (#1731).
  • A PersonaBot that writes @ and a colleague's display name in a Group message now really mentions that colleague: the name shows as a mention badge and wakes it, even when it wakes only on mentions. Several colleagues answering the same Human request can each report to one coordinator; two Bots that keep mentioning each other still stop after one round. A report that answers a new Human task, sent in a turn that was still busy with an earlier exchange, wakes the coordinator again instead of being taken for that earlier exchange, and a colleague that an earlier unmentioned message only reached as ordinary Group delivery still wakes when it is mentioned later (#1764).
  • Profile and Overview usage now show cache-read and cache-write tokens for PersonaBots on routes that leave a zero cache count out of a response, such as DeepSeek through OpenCode Go, instead of marking them unknown and the total partial. A bucket is filled in only when the response's total proves its value; usage recorded before this update is unchanged (#1787).
  • Fixed the Workspace Grants dialog opened from the DM composer, which showed folders as Read-only with no way to change it since 1.3; each folder row now shows its write switch and open-folder button in the header, and newly added folders are writable by default (#1855).
  • A Bot DM no longer fails with "invalid channelTimeline response" when one of its messages cannot be read by the client; that message now shows as plain text and the rest of the Channel loads (#1887).
  • A Bot's @mention chip in the message composer, the @mention picker and Group activity rows now show the same avatar as the Bot's own messages, instead of a name-generated face when the Bot has a customised avatar (#1906).
  • The Overview's token usage no longer shows "Unknown" for the whole week when some usage went unreported, for example rows kept from before an upgrade. The total now counts what was reported and is marked with +, and each day's bar shows its reported usage (#1908).
  • The Linux Docker Computer now starts on Docker hosts without IPv6. Before, its desktop never answered and the Computer stayed on "Waiting for the desktop…". Taking over the Docker Computer to see and drive its desktop works again too: its picture no longer fails with "unknown field max_image_dimension" (#1924).
  • Fixed the phone statistics switch retaining its previous visual state after a saved change by publishing loaded preference changes within the switch event (#1935).
  • Client startup diagnostics no longer report a lost shell when entering Bot mode replaces the native sidebar. A visible Bot mode main surface now counts as a mounted shell; actual disappearance and earlier errors still report failure (#1947).
  • Sender permission lookups on Weixin and other platforms without a sender Role policy now report role-policy-not-supported-for-platform instead of a false binding-replaced, so a Bot no longer refuses work over an unchanged binding; disabled/replaced identities and revoked Grants are rejected before platform support is checked; connected-group sources retain their ingress Binding, while legacy group sources without that evidence require a fresh message (#1951).
  • Scrolling the Sessions panel no longer makes every row slide on the next update, and the activity chevron above the composer now points the way the panel opens (#1952).
  • Fixed authorized WeChat paired-owner reports staying reply-only with the published IM Provider: proactive posting now qualifies against the account's exported proactive-text-checked, proactive-receipt-checked and proactive-fence-checked capabilities, matching QQ (#1955).
  • About distinguishes source builds and unknown release metadata instead of presenting 0.0.0 as a software release; the authenticated CLI exposes the same identity, and restart polling waits for the exact staged version (#1980).
  • Fixed an early local Browser viewer URL that could request a frame before its Bot owned a tab; first-frame waits and failures now remain distinct from a stopped Browser, with bounded requests and explicit reconnection (#2012).
  • Fixed message file attachments in narrow panels: bubbles fit their content with left-aligned, prettier text wrapping, while file names remain visible and Open and download controls wrap inside the card (#2037).
  • Mobile chats retain structured Bot mentions and display body-sized inline avatars and current names using each Bot's primary color. Tap a mention to open that Bot's DM; renamed or missing Bots are resolved by ID rather than display name (#2160).
  • Automatically check for compatible DeepSeekBot updates when entering Bot mode, remember dismissed versions per local Profile, and expose real refresh through release-check --force (#2173).

Documentation

  • Published repeatable Activity, Workspace Grant, Memory and Browser verification paths with CLI correlation, source-bound evidence and explicit coverage limits (#1972, #1973, #1974, #1975, #1976).
  • The GitHub README and installation guides now install deepseekbot@1.3.1 and list its highlights (#1771).
  • Documented one DSB software/npm release identity, immutable QA artifacts, independent mobile/dependency versions and explicit channel/retry gates; runtime enforcement remains planned (#1979, policy, ADR-0216).

Full comparison: View all changes