Skip to content

v0.4.12

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Aug 03:23
c6f1485

FurtherRef changes

  • c6f14855e Merge upstream/main into main (upstream v0.4.21+8 -> v0.4.27+5) (#90)

This release syncs upstream v0.4.21+8 → v0.4.27+5 (187 commits on top of the last sync — see the full changelog below). The merge resolved 51 conflicted files across the Go DB/handler/service layers, the agent runtime package, and TS core/views, each keeping a fork feature while adopting upstream:

  • Issue statuses: upstream's MUL-6243 per-workspace custom issue-status catalog (new issuestatus package, issue_status table) replaced the old fixed 7-status enum across the whole issue write path. Kept the fork's archive status (#39, migration 069) as a status outside that catalog everywhere it is now re-validated: resolveIssueStatusKeyKind, assertIssueStatusStillActive, runWithIssueStatusGuard, IssueService.Create, maybeEnqueueOnAssign, shouldEnqueueAgentTask*, the autopilot listener gate, and both the GitHub and self-hosted VCS webhook PR-close gates.
  • Issue surfaces: upstream moved the board/list/swimlane views off the old per-mode issueSurfaceListOptions/issueSurfaceFlatOptions query pattern onto its new server-owned Table query channel (use-issue-status-branches.ts / use-issue-group-branches.ts). Adopted upstream's architecture wholesale after confirming via provenance check that the old pattern was itself upstream-inherited rather than fork-original, and ported forward the one behaviorally live fork customization on top: archive stays hidden from the board/list's default columns.
  • Agent runtimes: kept the fork's Copilot per-model thinking-level discovery (copilotThinkingLevels, annotateCopilotThinking, copilot --help parsing) alongside upstream's new Kimi and Pi thinking-level support, migrating Copilot's discovery onto upstream's Command-based runtime-profile plumbing so it keeps working with fixed_args-configured runtimes.
  • Agent transcript: upstream rebuilt the transcript renderer around steps, lanes, and a run-outcome row (multica-ai#7011), replacing its old density/diff toolbar. Verified via git log -S that this was a deliberate upstream redesign rather than an independent fork/upstream duplicate, adopted it, and ported the fork's catch-up-failure banner and live-activity hint onto the new renderer.
  • Skills: combined the fork's per-skill zip-download button with upstream's new "refresh from source" button (multica-ai#6930) in the skill detail page toolbar.
  • CLI / daemon: unioned upstream's new GC repo-maintenance and Hermes memory/session TTL settings with the fork's GITHUB_TOKEN CLI-self-update doc row; combined upstream's new Command-aware repo clone/fetch logging with the fork's secret-redacting log lines.
  • Post-merge fixes surfaced by verification — none caught by go build/go vet, only by go test / vitest / CI: archiving an issue could 409 with "target status was archived while this request was in flight" because several of the catalog re-validation call sites above didn't yet know about archive; creating an issue directly with status=archive and an assignee still enqueued an agent task (maybeEnqueueOnAssign only excluded the backlog category); the self-hosted VCS webhook's PR-auto-close logic could resurrect an archived issue on a later merge; upstream's new bounded lock-wait in CreateWorktreeContext (LockWaitTimeout) deadlocked forever because it called the fork's own blocking Cache.Lookup (added in May to fix a different race) before its own bound had a chance to apply — fixed by checking isBareRepo under the same already-bounded lock instead of calling Lookup; a handful of stale tests/mocks (search_test.go's literal-string assertions, agent_thinking_test.go's and acp_effort_test.go's "no reasoning control" example provider, which needed to move off copilot now that Copilot has a real thinking-level feature of its own, a dead ja/agents.json locale key, and a missing newAgent path mock in squad-detail-page.test.tsx).

CI-equivalent verification: go build / go vet / go test clean across server/... (including a real deadlock caught only by a 10-minute internal/daemon/repocache package timeout); pnpm typecheck / test clean across all 9 packages; migrations replayed cleanly against a fresh worktree database.

Upstream v0.4.22 changelog

32 commits from this release's range were captured by this sync; 8 commits from the same range already shipped in fork v0.4.11 (as part of the v0.4.16+2 → v0.4.21+8 sync).

  • 9f2b1c50c MUL-5862: project pill quick-clear × + stop remembering the last project (multica-ai#6574)
  • 2b35f8017 fix(web): validate the browser API base URL (MUL-5922) (multica-ai#6627)
  • c4cd1ebab fix(lark): three defensive fixes to stored media filenames (multica-ai#6596)
  • 7509d80cd MUL-5904: fix(wecom): no slash command works in a group at all (multica-ai#6603)
  • f3a7fce8d fix(chat): a predecessor's reply must not seal the next message out of its own batch (multica-ai#6611)
  • 0db005596 fix(wecom): stop blaming an admin's credentials when the fault is ours (multica-ai#6589)
  • 8d7e1c8d4 fix(wecom): escape member-authored text in the inbox card, and keep the card inside the cap (MUL-5889) (multica-ai#6592)
  • f97db4fc5 fix(agent): support Pi thinking levels through RPC model discovery (MUL-5924) (multica-ai#6629)
  • 43f568d16 MUL-5890: fix(wecom): ask the engine whether it is an /issue command instead of mirroring it (multica-ai#6593)
  • a4d4444f8 feat(wecom): add the MULTICA_WECOM_TRACE operator switch (and stop it printing binding tokens) (multica-ai#6602)
  • c66bffd72 feat(wecom): show WeCom's own mark instead of a generic speech bubble (multica-ai#6585)
  • cd9f4147a MUL-5853 feat(agent): support Kimi thinking levels (multica-ai#6429)
  • 93fa120c4 MUL-5925 fix(execenv): expand Windows ~\ in the openclaw active config path (multica-ai#6630) (multica-ai#6643)
  • 7c7ed8bf5 MUL-5937 fix(daemon): persist direct chat Codex sessions (multica-ai#6644)
  • 5e66a732b test(core): cover cloud billing schema fallbacks (multica-ai#6642)
  • cd3c0bb89 MUL-5888: fix(wecom): answer a duplicate /issue honestly, and don't push a web-UI reply into the room (multica-ai#6591)
  • b09abf179 feat(wecom): classify a refused handshake the way the credential probe does (MUL-5895) (multica-ai#6598)
  • 1fe956eb8 feat(wecom): tell a refused handshake apart from an unreachable one, on a dashboard (multica-ai#6626)
  • 611a80650 feat(wecom): read voice notes, which WeCom already transcribes for us (multica-ai#6599)
  • cdf93e491 MUL-5892 fix(chat): cancel queued tasks when a session is archived, and stop telling non-Slack sessions they have no channel (multica-ai#6595)
  • 984a2c2bf MUL-5954: feat: saved issue views V1 (MUL-4796) (multica-ai#6516)
  • 2a19f9ba2 MUL-5873 fix(channels): improve /new and /issue feedback (multica-ai#6578)
  • 080f088dd fix(migrations): renumber channel pending_fresh to 271 (multica-ai#6683)
  • 586a624aa fix(cli): isolate task profile state (multica-ai#6407)
  • 07ada7262 fix(issue-views): show the view bar's more-trigger only while tabs overflow (multica-ai#6682)
  • 42a55d884 test(handler): avoid schema pollution in workspace cleanup (multica-ai#6685)
  • ad7e62113 MUL-5860: unify internal link click semantics across all surfaces (multica-ai#6667)
  • 90b3c2cc5 feat(cli): allow task-scoped daemon status and disk-usage (MUL-5742) (multica-ai#6684)
  • 985a1fe63 fix(views): add saved-view sort direction (multica-ai#6689)
  • 0035345a5 MUL-5973: fix(tabs): restore inbox scroll position and stop the highlight re-jump on tab return (multica-ai#6690)
  • 3dd128532 feat(agent): add oh-my-pi (omp) as a supported agent runtime (multica-ai#6514)
  • 8bd49bba8 docs(changelog): add v0.4.22 release entry (2026-08-10) (MUL-5978) (multica-ai#6698)

Upstream v0.4.23 changelog

  • f26b97e39 MUL-5932: fix(daemon): give Hermes agents memory that survives the task (multica-ai#6693)
  • 00e12d340 MUL-5906 feat(wecom): read the photos, files and videos people send the bot (multica-ai#6605)
  • 673104d26 docs(daemon): correct the Hermes overlay's skill-less claim (multica-ai#6703)
  • 3ebd0b541 fix(agents): use DingTalk brand icon (multica-ai#6692)
  • 50cfca640 fix(wecom): pin the wrong-key test, and stop four comments claiming more than the code (multica-ai#6706)
  • 6bce42b84 MUL-5983 fix(workspace): stop workspace delete from hanging on advisory lock 4246 (multica-ai#6710)
  • d317eb3f4 MUL-5966 fix(channels): skip media for duplicate issue commands (multica-ai#6688)
  • d8c41cc79 fix(channels): a cancelled run must stop the typing indicator, not leave it spinning (multica-ai#6631)
  • d1e9a2ccb feat(shortcuts): browser-style Cmd+[ / Cmd+] history navigation (multica-ai#6728)
  • a1da8e536 MUL-6000 fix(daemon): link user Codex skills into codex-home instead of copying them (multica-ai#6742)
  • 8eaa0d229 fix(agent): keep Reasonix off the ask tool in unattended tasks (multica-ai#6745)
  • 9c21786f4 fix(composer): preserve focus on send and stop (multica-ai#6733)
  • a937710fc MUL-5958: 回复人类评论时跳过 assignee 兜底 (multica-ai#6676)
  • eb3cd4fe9 MUL-5951: fix(issues): reject a cross-workspace project on issue update (multica-ai#6666)
  • 59021eb8a MUL-6004 fix(issues): bound inline chips so long titles stop breaking prose (multica-ai#6744)
  • e519dd9e8 perf(tasks): dedupe agent-status reconciliation on bulk cancel (multica-ai#6726)
  • 2c7414309 fix(agent): preserve effort for Claude context variants (multica-ai#6748)
  • 8cafe1d08 MUL-5979 fix(views): hide empty agent detail menu (multica-ai#6696)
  • 822c6a0b8 feat(issues): inherit parent's project and assignee when creating a sub-issue (multica-ai#6727)
  • 807b8706b MUL-5992 fix(daemon): deny the Reasonix ask tool per task (supersedes multica-ai#6745) (multica-ai#6746)
  • 02b73d587 fix(selfhost): forward SMTP_FROM_EMAIL to backend (multica-ai#6653)
  • 4345bf567 fix(editor): download web attachments via the signed capability URL (multica-ai#6713)
  • 84a02cc2a MUL-5991 feat(agent): drive ACP thinking_level from the backend's own configOptions (reasonix first) (multica-ai#6752)
  • 8e9632919 refactor(daemon): drop the MULTICA_HERMES_TASK_MEMORY rollback switch (multica-ai#6760)
  • dbe55d6bb docs(changelog): add v0.4.23 release entry (2026-08-11) (MUL-6021) (multica-ai#6758)
  • d2f1d23d6 docs(skills): remove implicit reply routing guidance (MUL-6021) (multica-ai#6763)
  • 4deea5a30 MUL-5974 fix(cli): reject unknown --profile instead of reporting "stopped" (multica-ai#6757)
  • e0d0b3815 fix(daemon): keep the runtime owner's Reasonix deny rules in a task (MUL-6021) (multica-ai#6764)

Upstream v0.4.24 changelog

  • 6e6682539 fix(agent): make readOpenclawStdout's cut-short decision atomic (MUL-6024) (multica-ai#6765)
  • 90eadd940 MUL-5905: feat(wecom): send the files an agent produced into the chat (multica-ai#6604)
  • 4ef294496 fix(markdown): render CJK-adjacent strong emphasis (multica-ai#6768)
  • b32cd8c8a fix(metrics): forbid installation_id as a metric label (MUL-5894) (multica-ai#6597)
  • b904e6b71 MUL-6029: docs(daemon): correct two comments multica-ai#6604 made false, and enforce the Slack/Lark brief policy (multica-ai#6771)
  • ef60815f5 MUL-5974 feat(daemon): let the daemon identify itself on /health (multica-ai#6783)
  • 7e920d60e MUL-6010: fix(desktop): structure route error feedback context (multica-ai#6737)
  • 7eeaaaa05 MUL-6015: WS-2: update Codex gpt-5.6 model labels (multica-ai#6749)
  • 216c96eb8 fix(composer): handle Android compatibility mouse-down (multica-ai#6789)
  • 0c69f1f95 fix(daemon): recover in-turn when a resumed session cannot resolve provider auth (multica-ai#6798)
  • 3ef345b65 fix(cli): allow login with stale daemon port env (multica-ai#6801)
  • c4f0d8cc8 MUL-5999: make workspace teardown index-driven, bounded and fenced (multica-ai#6754)
  • 84dc02cd6 MUL-6034: fix(cursor): normalize MCP approval server shapes (multica-ai#6776)
  • d57bfc50e MUL-6043: Keep repo checkout responsive during daemon GC (multica-ai#6803)
  • 78c1e24e9 MUL-6038: fix(daemon): reclaim the managed Codex sandbox cache for every task kind (multica-ai#6794)
  • 0f8c300da MUL-5915: fix(slack): neutralize links in member issue titles (multica-ai#6799)
  • 02e8e6c35 MUL-6023 feat(attachments): forced-attachment download URL across all storage modes (multica-ai#6756)
  • d3b6fdae8 MUL-6045: feat(views): reach hover-only row controls on touch (multica-ai#6790)
  • 2b3920a98 fix(settings): clarify integration channel sections (multica-ai#6807)
  • 7746cef56 MUL-6002: feat(agents): support pasting environment files (multica-ai#6730)
  • b4692a192 MUL-6048 fix(github): withhold close intent when a PR identifier is ambiguous across workspaces (multica-ai#6808)
  • ce8d80b2e fix(settings): give Lark and Slack their own brand marks (multica-ai#6816)
  • 8d292ef7c MUL-5963: feat(server): let web chat read back history via multica chat history (multica-ai#6680)
  • 8c0185019 fix(agents): use Lark and Slack marks outside Settings too (multica-ai#6817)
  • 5e569fa38 fix(workspace): derive new issue prefixes from the slug, editable at create (multica-ai#6815)
  • 71bd84495 MUL-6055 refactor(agents): remove legacy agent templates (multica-ai#6820)
  • 77f148809 fix(onboarding): stop advertising a WS prefix before a URL exists (multica-ai#6819)
  • 51c1b144b MUL-6002: feat(agents): add bulk edit mode for agent environment variables (multica-ai#6818)
  • 3a2f9ee53 MUL-6060 fix(editor): render Markdown H4-H6 instead of collapsing them to H1 (multica-ai#6834)
  • 176e8c684 MUL-6050: feat(onboarding): romanize Chinese workspace names into a slug (multica-ai#6823)
  • ad23d1da3 docs(changelog): add v0.4.24 release entry (2026-08-12) (multica-ai#6829)

Upstream v0.4.25 changelog

  • 05a01f068 MUL-6040: feat(issues): preview an issue on mention hover (multica-ai#6785)
  • 600c4e5a8 MUL-6057: fix(i18n): localize runtime activity heatmap (multica-ai#6812)
  • 13706d60d fix(i18n): format dates in the UI language, not the browser's (multica-ai#6841)
  • a3dfd2439 MUL-6082: fix Board assignee avatar interactions (multica-ai#6854)
  • d467cc906 MUL-6075: complete Plugin V1 execution chain (multica-ai#6853)
  • 254a02a79 MUL-5799: feat(daemon): allow relocating per-task temp dirs via MULTICA_AGENT_TEMP_BASE (multica-ai#6481)
  • d582dca06 MUL-6025: fix(daemon): resolve Windows installer junctions (multica-ai#6802)
  • 147cd8d84 feat(skills): update imported skills from their source (multica-ai#6847)
  • cb8ce085a MUL-6108: 清理首批冗余数据库索引 (multica-ai#6878)
  • e4ebd41de fix(daemon): make the daemon log path discoverable (multica-ai#6884)
  • 8060aa727 MUL-5947: feat(dingtalk): route groups to different agents (multica-ai#6660)
  • 28a717632 MUL-6053: fix(daemon): give Hermes conversations a session that survives the task (multica-ai#6845)
  • 367e7ee6e fix(desktop): unify active-tab keyline in dark mode (MUL-6106)
  • c9727e6b2 feat(daemon): worktree mode for local_directory resources (MUL-5707) (multica-ai#6759)
  • 5ed57170b [MUL-6099] Ship official Plugin V1 product vertical slice (multica-ai#6869)
  • 6e147b0cf fix(autopilots): use valid bug triage status (MUL-6092) (multica-ai#6880)
  • 96bf122f2 MUL-6107: preserve task history during runtime GC (multica-ai#6894)
  • 587fbc555 MUL-5852: 接入 Workspace Stripe 订阅代理 (multica-ai#6886)
  • 85045228a MUL-6102: fix(daemon): surface which HERMES_HOME a Hermes task actually read (multica-ai#6892)
  • 940b9adf4 feat(views): pick the local directory execution mode while creating a project (MUL-5707) (multica-ai#6901)
  • b5fdbd56f MUL-6118: fix(daemon): keep npm .cmd agent entry points launchable on Windows (multica-ai#6895)
  • e7e01638a MUL-6118: fix(agent): own Codex process trees with a Job Object on Windows (multica-ai#6897)
  • 740ebdb8e MUL-5991 feat(agent): enable ACP thinking_level for the hermes provider (jcode) (multica-ai#6814)
  • 063698f57 fix: gate worktree mode on a declared capability, not a version string (MUL-5707) (multica-ai#6904)
  • b032e0ee3 docs(changelog): add v0.4.25 release entry (2026-08-13) (MUL-6131) (multica-ai#6907)
  • ea1ace776 fix(views): stop telling worktree-mode users their folder is edited in place (MUL-5707) (multica-ai#6911)

Upstream v0.4.26 changelog

  • 31645cc51 [MUL-6125] Ship Private Skill Plugin developer loop (multica-ai#6900)
  • 6db6b235b MUL-6126: fix(runtime): make private runtimes owner-only in the API and CLI too (multica-ai#6905)
  • 09efbe597 docs: explain the two local-directory execution modes (MUL-5707) (multica-ai#6913)
  • dd1474405 fix(chat): preserve idle footer spacing (MUL-5854)
  • 2d711afdd MUL-5852: 新增 Workspace Billing summary/prices proxy 与 Stripe 回跳落点 (multica-ai#6912)
  • 060731c7d MUL-6137: fix(daemon): preserve name-dispatching agent shims (multica-ai#6775)
  • 4f10a944b feat(runtime): add DeepSeek Harness support (multica-ai#6923)
  • 9ba3a8bdf MUL-5980: drag blank board area with the left button to pan horizontally (multica-ai#6700)
  • a077ace2f fix(desktop): stop the tab flares printing dark squares under the active tab (MUL-6143) (multica-ai#6918)
  • 698013ced MUL-5771 feat(daemon): allow configuring workspaces root (multica-ai#6830)
  • 1ddc3812a fix(desktop): stop the tab flares biting into a neighbour's hover pill (MUL-6160) (multica-ai#6942)
  • ceb6c6845 MUL-6132 fix: stop stranding daemon task markers in user directories (multica-ai#6917)
  • e3ec3f8b5 MUL-6162 docs: sync landing copy and docs for the DeepSeek Harness runtime (multica-ai#6940)
  • cc8e020f8 MUL-5852: add workspace Billing settings UI (multica-ai#6908)
  • 16f9f2522 feat(inbox): add a keyboard shortcut for archiving the open notification (multica-ai#6877)
  • 6806dcbea MUL-6175: 修复 Billing UI 未展示 Workspace 订阅价格 (multica-ai#6955)
  • b5a48eca1 fix(agent tasks): prevent duplicate self-assignment work (MUL-6168) (multica-ai#6956)
  • 0d2dc44e3 MUL-6169 fix(views): left-align page titles and unify page gutters (multica-ai#6946)
  • 319f21e3c MUL-6175: Make unavailable price previews recoverable (multica-ai#6960)
  • 987ac8ec8 fix(cors): allow billing idempotency header (multica-ai#6964)
  • 3025c3802 MUL-6019: fix(codex): add MULTICA_CODEX_FIRST_TURN_TIMEOUT to raise the first-turn ceiling (multica-ai#6753)
  • f51ee62b5 MUL-6164 fix(agent): diagnose an unrunnable agent CLI instead of leaking "exec format error" (multica-ai#6963)
  • e9528c722 MUL-5855: feat(dev): add worktree database cleanup (multica-ai#6560)
  • e6da2071c docs(changelog): add v0.4.26 release entry (2026-08-14) (MUL-6185) (multica-ai#6967)
  • 19155e41f refactor(prompts): compress duplicate --no-start guidance from multica-ai#6956 (MUL-6168) (multica-ai#6971)

Upstream v0.4.27 changelog

  • 736838af8 MUL-5421: workspace-level MCP configuration (resolution contract, write-only API, Settings UI, CLI) (multica-ai#6961)
  • cc2aea387 MUL-6104: fix(daemon): tell the brief's reader not to merge stderr into parsed output (multica-ai#6870)
  • b30a3ae55 MUL-6164 feat(runtime): take an unusable agent CLI offline and refuse its triggers with the fix (multica-ai#6966)
  • d96c93643 docs: link the Multica CLI skill from the README and CLI docs (multica-ai#6978)
  • 2c0912b6e MUL-5421: make workspace MCP servers an explicit per-agent assignment (multica-ai#6976)
  • 46527a1a7 MUL-6183: prevent agent create error flash (multica-ai#7007)
  • 2cd836d3d fix(desktop): stop page headers stacking a second sidebar toggle (MUL-6218) (multica-ai#7008)
  • 42dbf60dc feat(views): rebuild the run trace around steps, lanes, and outcome (multica-ai#7011)
  • d77d676c1 feat(web): name browser tabs after the open workspace page (MUL-6222) (multica-ai#7012)
  • 4d495056e [MUL-6139] Expand Plugin skills and hosted MCP connections (multica-ai#6920)
  • 4effd07ad feat(desktop): open Settings with Cmd/Ctrl+, (MUL-6233) (multica-ai#7022)
  • 178ecc968 fix(views): make quick capture usable on mobile web (MUL-6236) (multica-ai#7026)
  • 375ba786b fix(views): release the drag lock on cancelled drags (MUL-6240) (multica-ai#7027)
  • 6ec162bd3 feat(web): make the mobile web app installable (MUL-6237) (multica-ai#7025)
  • 49cc7d6f4 fix(auth): temporarily disable abusive users
  • c99849d8a fix(mobile): re-apply app config to ios/ on every local iOS build (MUL-6206) (multica-ai#6992)
  • 9f85d72a0 MUL-6193 Support Slack message attachments in chat (multica-ai#6975)
  • 8b1acfd19 fix(execenv): fold redundant metadata-list read into the issue-get step (multica-ai#7016) (multica-ai#7042)
  • a954dec8e test(handler): stop the dashboard fixture finishing before its own window opens (MUL-6103) (multica-ai#6871)
  • 0a1357498 MUL-6247: rate limit workspace invitations (multica-ai#7030)
  • ddd04a73f feat(skills): link imported skills to their source (multica-ai#6928)
  • 85a88b373 MUL-6156: fix(editor): add accessible names to bubble menu controls (multica-ai#6929)
  • 25f3a8b52 perf(issues): resolve bare identifiers via point lookup instead of full-text search (MUL-6268) (multica-ai#7053)
  • 8cf2acbaa feat(share-link): workspace share-link invite system (multica-ai#6833)
  • 2832f003a [MUL-6269] Use Redis for channel WebSocket leases (multica-ai#7055)
  • f97dd5e71 refactor(agents): tighten the MCP tab and fix the workspace picker menu (MUL-5421) (multica-ai#7056)
  • 3b0842368 MUL-6260 fix(daemon): treat custom runtime fixed_args as the argv prefix (multica-ai#7052)
  • 2a30b01b6 MUL-5741: fix(desktop): preserve HTML attachment tab scroll position across tab switches (multica-ai#6825)
  • 3be6bccec MUL-6189 docs: align contributor Node version guidance with CI (multica-ai#7003)
  • 3d6dfffc1 MUL-6136 feat(issues): distinguish self-references to the current issue in inline mentions (multica-ai#6939)
  • a17857e63 fix(agent): parse tab-separated Antigravity model catalog (multica-ai#6654)
  • 245bc79ee MUL-6231: fix(desktop): stop the client blanking after the last workspace is deleted (multica-ai#7021) (multica-ai#7064)
  • d0bd6683f MUL-5733: keep Go security patches current (multica-ai#6409)
  • 438349789 fix(agent): fail a Pi task when Pi ends the turn on an error without retrying (multica-ai#7059)
  • 92c1a4df0 MUL-6279: De-emphasize share-link URLs (multica-ai#7066)
  • 09cd442c6 fix(views): settle the run timeline's scrollbars so hovering a bar cannot shake it (multica-ai#7067)
  • 9d6c0c81e MUL-6254: recover auth after transient Desktop startup failures (multica-ai#7058)
  • 1e1321a9c fix(migrate): cover every concurrent index build with retry cleanup (MUL-6288) (multica-ai#7073)
  • 2829798b5 Revert "feat(desktop): open Settings with Cmd/Ctrl+, (MUL-6233) (multica-ai#7022)" (multica-ai#7079)
  • 4696eab2c docs(changelog): add v0.4.27 release entry (2026-08-17) (MUL-6288) (multica-ai#7068)

Upstream commits after v0.4.27

Upstream had not tagged a release for these when this sync ran; they will appear in upstream's next release.

  • 446080bd5 MUL-6243 feat(issue-status): per-workspace custom issue statuses over 7 canonical categories (multica-ai#7065)
  • 2a643cc74 MUL-6291: stop paying for jsdom in pure-logic frontend suites (multica-ai#7081)
  • 2014ae361 feat(skills): bulk update from source (multica-ai#6930)
  • b946f3a72 MUL-6290: split views tests onto a dedicated runner (multica-ai#7072)
  • 9a30c51da MUL-6286: feat(properties): actor / multi_actor custom property types (members) (multica-ai#7075)