Changelog
Release notes for ManyWe. Each section below expands on click. Subscribe to release announcements via Discord.
v0.1.15 — May 2026 — openraft state-machine persistence (SEV-0 latent bug fix) + cluster mTLS atomic + HiManyWe release-test pipeline (P16 step ①⓭ MANDATORY)
- Critical fix — openraft state-machine persistence (Shape A1):
GlobalStateMachinepreviously held all state in-memory only. Every clean restart that crossed a log-compaction event hitCannot re-apply logs: need logs from index 0, but purged up to T1-N…and crash-looped indefinitely. Bug present in every binary back to v0.1.0; observed live onglobal-de2026-05-02 (~09:02 CST, manual recovery 4 min later). Fix persists(SnapshotData + last_applied_log + last_membership + raft_term)atomically as one blob on everyapply()+install_snapshot(). New 3-branch boot classifier (steady-state / true-first-boot / pre-B6.5-migration-gap) refuses unsafe blank-start whenpurged.jsonexists withoutstate-machine.bin. - Cluster mTLS atomic (B6.1): gRPC server requires
cluster_tokenbearer + (when wired in v0.1.16) client cert in trusted-fingerprint allowlist. Auth-error sanitization: externalStatusreturns generic"missing required authorization"while internal log retains specifics. NewMANYWE_GLOBAL_DISABLE_BOOTSTRAP=1env enables production-safe Branch A.LOWEST.α lowest-id-Global recovery without cluster-wide bootstrap re-trigger. - SERIAL Globals restart enforcement (B6.6):
release-lib.shdeploy_global_coordinated()enforces lowest-id LAST + 5-mincluster-health-probe.shstability between nodes per CLAUDE.md post-launch HARD rule.MANYWE_RELEASE_ALLOW_PARALLEL_GLOBALS=truerejected unlessMANYWE_RELEASE_PRE_LAUNCH=true. v0.1.14 parallel-restart was the failure mode that caused the 2026-05-02 openraft RCA recurrence. - HiManyWe release-test pipeline (P16 step ①⓭ MANDATORY, B10):
scripts/swap-himanywe-binary.sh+scripts/release-test-himanywe.sh+release.shStage 16 wrapper. Every release v0.1.15+ MUST swap the MWopsUS#1 §2.0b feedback dispatcher binary + verify end-to-end before tag-cut declares "shipped". Class A failure (operational) auto-rollback. Class B failure (correctness) triggersdocs/runbooks/release-yank-procedure.md. - Layered leader-probe + degraded-ack with strong audit (B6.3): direct
grpcurlprimary path; SSH-jump fallback gated by GPG-sig + auto P0 ticket + 24h fix window + canary-phase-forbidden. - MWopsUS#1 ops monitoring deploy (B8.1 + SG#2 LIVE INCIDENT fix): 4 systemd tunnel services (sg/us/hk/sg2 + node-exporter on sg2-edge) + blackbox-exporter dual-layer probe (GTM DNS + per-pool HTTPS via
--resolve). Closed SG#2 LIVE INCIDENT 2026-05-02 (HostNodeExporterDown + RelayDown firing alerts). - Cluster inventory SoT (B8.5):
deploy/ops-monitor/cluster-inventory.yamlsingle canonical source consumed byscripts/audit-cluster-allowlist.shweekly cron +docs/runbooks/cluster-edge-add-procedure.md11-step. - GTM watchdog (B8.3 + B8.4):
scripts/install-aliyun-cli.sh+ RAM read-only sub-account for D1-mode monitoring of Aliyun GTM 3.0 expiry without write privilege. - URL migration (B7):
manywe.ai → www.manywe.aifor 5 path-prefix scope (install / release / downloads / well-known / changelog) across 17 deploy files; apex 308 redirect preserved. Compile-time + runtime coverage intests/regression/url-migration-www-coverage.sh. - Release-pipeline hardening: Stage 15 fail-close
gh release create+ per-target subdirectory flattening for asset upload (B9.16); 4 NEW PRE-TAG drift gates (ADR locked-string regression / target-version anchor immutability / G9 dual-manifest / PR-base SHA dependency); soft-uninstall mode decision Option C (defer to v0.1.16). - Bug fixes:
manywe-relayinvite-creation Prom counter; macOS singleton flock retry loop (3 × 50ms);install.ps1 -Uninstallremoves BOTHmcp.servers.manyweANDmcpServers.manywe(V011-P2 closure since v0.1.13); Rust 1.94 strict clippy fixes (4 lints); CI protoc install on all OS runners; MCP tool drift gate phase-function counting fix (closes 110-vs-125 false-positive). - Honest deferrals to v0.1.16: B6.1 Layer 1 fingerprint enforcement wiring (currently observe-only, V016-B6.1-FINGERPRINT-WIRING); 16 P2 findings tracked at GitHub issue #101; credential-leak post-GA remediation (issue #92).
- Release sign-off: 9 dev PRs merged (#91/#93/#97/#98/#99/#100/#94/#95/#96/#102) with per-commit Codex auto-review 0 P0 each. Pre-GA G1-G8 gates all PASS. Cross-compile 5 targets × full Developer ID codesign × Apple notarize 2 darwin all green. Layer B 4E+3G cluster on Apr 30 v0.1.14 binary at tag time; Stage 7 SERIAL deploys v0.1.15 with state-machine persistence fix.
v0.1.14 — April 2026 — public technical disclosure + Eve SIGKILL Q9=b defense-in-depth + G8 LLM-tested-tuple gate
- Bucket 0 disclosure docs (audit + factual fix):
deploy/security/index.htmlIPC TCP claim aligned withipc.rsUDS+TCP-fallback (Codex pass-1 finding 3b);deploy/install/footprint.mdroot-install paths enumerated (Codex pass-1 finding 3a);deploy/install/transparent/index.htmlQ6 BARE-token format fix (Codex pass-1 finding 4 double-prefix); install footprint summary distinguishes user vs root install across both pages. - B0.6 Rust Hermes installer 2-layout enumeration:
installers::hermes::hermes_config_path()+existing_hermes_config_paths()+ autodetect now enumerate canonical (~/.hermes/config.yaml) and subdir (~/.hermes/hermes-agent/config.yaml) layouts (Codex pass-1 finding 5 — pre-v0.1.14 install.sh enumerated both, Rust did not). - B0.4 / Q12=(c)
--skip-notarizeremoved:release.shStage 3 always runs codesign + notarytool submit + stapler validate. RC and production paths align — RC tests now catch sign/notarize regressions before tag. - B1.1 / Q9=(b) Eve SIGKILL defense-in-depth:
install.shwrites the install-proof-pending JSON with conservativehost_typefrom cheap stat-onlydetect_hermesBEFORE the slow openclaw probe, atomic-updates afterwards if probe found a higher-fidelity host_type, plus_run_detachedhelper (setsid → nohup fallback) so the daemon-kick subprocess survives chatbox-sandbox SIGKILL of the parentbash. Completion sentinel file written after JSON is durable. - Bucket 1 install hardening: Task N regression test for openclaw multi-version pick-newest; Task Z install.ps1 BOM verify-flow fix (
WriteAllBytesfor proof tokens — pre-v0.1.14Set-Content -Encoding UTF8prepended a BOM that brokeverify-install); Task AAmanywe_push_register_autohost-scoped clarification (Rust + TS schema both updated to mirror); Task AB underscore-confirm_confirmhint with bilingual error code in dispatcher. - B2 G8 LLM-safety acceptance gate: new release-completeness gate at
release.shStage 1 — fails-close in--full-runwhendocs/e2e-evidence/v$VERSION/llm-tested-tuple.mdis absent OR has fewer than 2 host_tuple rows OR fewer than 2 distinct LLM versions OR placeholder transcript/proof paths OR declared paths don’t exist on disk. Q4 minimum: Sonnet 4.6 + (MiniMax 2.7 OR Kimi 2.6cn). Schema template atdocs/e2e-evidence/_template/llm-tested-tuple.md. - B4 push wiring:
format_proof_message_with_contextadds host + chat_id_redacted + issued_at + caveat lines while preserving the legacy first-line prefix (install.sh banner-match contract); Hermes uninstall scans every existing layout (couples with B0.6); 4 audit-only regression test fixtures pin v0.1.13 behavior (poll loop + layout enum + Hermes-restart prompt + multi-version openclaw). - B5 uninstall scaffold: shared
UninstallPlandata structure with safety invariants (validate()rejects RemoveDir on/,$HOME, etc.) + 6 unit tests pinning purge-superset-of-uninstall. v0.1.14 ships scaffold only; dispatcher integration is V0115-CARRY-11.install.ps1now writes unifiedinstalled-via-manywe.jsonat%LOCALAPPDATA%\ManyWe\mirroring install.sh schema (cross-platform parity). - Cargo SemVer 3-part fail-close:
scripts/check-version-sweep.shrejects 4-part Cargo + npm versions (e.g.0.1.13.1) at release-gate stage 1; mirrored tomin-agent-version.test.tsassertion bump (0.1.13 below MIN, 0.1.14 matches MIN, 0.1.15 above MIN). - Release-gate discipline (v0.1.13 L2 lesson recurrence fix): G7 (Codex APPROVED) + G8 (LLM-tested-tuple) both retrofitted from
err(always-hard-fail) togate_violation(warn in dry-run / fail in--full-run). Regression test asserts no nakederr "G[0-9]"survives inscripts/release.sh. - Hard rules added: P15 English-First / never bilingual stack (committed to CLAUDE.md + AGENTS.md in v0.1.13 close-out, fully enforced in v0.1.14 dispatcher hint update); install.sh openclaw probe
timeoutprecondition guard for macOS hosts without GNU coreutils. - v0.1.15 carry-over: 15 entries enumerated in
docs/v0114-deferred-to-v0115.md(B0.5 OSS install.sh wrapper; entire Bucket 3 CLUSTER.2 mTLS rotation; B5.1 dispatcher integration; Bucket 6 P2 backlog; dispatcher P15 dual-locale cleanup; stack-merge GitHub workflow validation; etc.). - Codex review: external review pass + operator review pass-2 both addressed in source (P0 release-gate blockers fixed: check-version-consistency 40/40, cargo fmt clean, cargo clippy
-D warningsclean, release.sh Stage 1 reaches end on clean worktree).
v0.1.13 — April 2026 — A-class install proof + push UX + L1 contract gate green
- B0.1 A-class daemon-active install proof: install.sh / install.ps1 stage
~/.manywe/install-proof-pending.json; daemon spawnsopenclaw message send(or queues to hook.py for Hermes) so “ManyWe install proof: MW-INSTALL-<32hex>” lands in the user’s IM chat. Closes the v0.1.12 hallucinated-INSTALLOK class. ADR-041 two-class threat model. - B0.11 CONFIRM-01 fix: ADR-030 replay marker now bypasses the generic
ToolPermission::Sensitivegate (was consumed-but-ignored, causing the self-confirm loop onmanywe_skill_install+ every other Sensitive tool). - B0.12 SkillPackage eager decode:
manywe_skill_list_receivednow shows actualskill_name+payload_sizeon first call, not(pending)placeholders. - B0.14 mw_session debate tools: 3 new MCP tools (
manywe_debate_start/_send_round/_close) per ADR-042. - B0.17 binary inventory enumeration: uninstall
--purgenow enumerates 8 candidate binary paths cross-platform (closes the V0112 T9-style residue class). - B0.18 ManyWe-self-controlled --machine JSON: uninstall machine output is enum strings + integer counts only; path arrays moved to stderr; pure-bash printf fallback when python3 absent.
- Push UX:
/push/landing page + architecture SVG +/getting-started/Step 2 (push BEFORE friend-add per Q5 unambiguous-AI-chat sequencing);manywe_helpsurfacesmanywe_push_register_autoas top-level; OpenClaw plugin first-run state machine; SKILL.md multi-locale push triggers + Hermes proactivity guidance;install_proof_dispatchfield surfaced viamanywe_status. - L1 schema-drift gate green: 16 inherited Rust↔TS permission/name drift items resolved (8 ops-admin tools intentionally Rust-only behind
OPS_ADMIN_ALLOWLIST; 5 missing tools ported to SDK; 2 setup-install Rust:standard→Sensitive flips; phantommanywe_contact_set_languageremoved). Bothcheck-tool-permission-drift.shandcheck-mcp-tool-drift.mjspass. - Release discipline: P15 hard rule (English-First UX, never bilingual stack) committed to CLAUDE.md + AGENTS.md;
MANYWE_RELEASE_GATES_MODE={warn,fail}env-var toggle on all release-gate scripts;check-version-consistency.shrespectsOK-historical:markers + file-level exclusions for changelog; OpenClawplugins.allowauto-reload probe documented (docs/e2e-evidence/v0.1.13/openclaw-reload-probe.md). - Cluster:
manywe-globalgRPC reflection (CLUSTER.1) + openraft state-transition INFO logger (CLUSTER.3);test_raft_leader_failover15s→45s timeout to eliminate parallel-test-load flake. - 3 ADRs: ADR-040 push UX state contract; ADR-041 anti-hallucination two-class threat; ADR-042 mw_session envelope schema. ADR-039 §enum 1 + §enum 3 extended.
- Post-RC fix bundle (RC matrix + Codex review 2026-04-28): Daemon — Task T (Option B eager UDS probe falls back to TCP+token IPC on Docker overlay-fs / restricted FS / SELinux); Task U (two-phase install-proof status: daemon writes
queuedfor Hermes path, hook.py upgrades todeliveredonly on positivemessageId/sent: true— closes the FALSE POSITIVE failure mode that defeated ADR-041 anti-hallucination on MnD); Task V (setup-status cross-user systemctl fallback +data_dir()reads/etc/manywe/agentd.env+ systemd unit so chatbox plugin running as ubuntu sees the daemon installed under/root/.manywe); Task W (install.sh always alignsdetected_data_dirwith the daemon’sMANYWE_DATA_DIRfor system-service installs). Install — Task X (PowerShell function ordering on install.ps1 —iexdoesn’t hoist defs); Task Y (install.ps1 refuse-up-front when SYSTEM context detected). Hermes — Task I (Gateway hook auto-wiring) + double-prefix proof token + qualified target<channel>:<chat_id>+ periodic queue drain. Release gates — check-nav-consistency.sh now scansdeploy/*/index.html+ refuses zero-page PASS (5 stale-nav pages repaired); pre-push hook now uses--range @{upstream}..HEAD(was checking empty staged diff); install-git-hooks.sh dispatcher quoting bug fixed (gates with arguments now actually pass them);min-agent-version.test.tsbumped to assert v0.1.13 hard-cut; release.sh stage 1 now runs lockstep + nav + Codex APPROVED gates fail-close. P15 — remaining bilingual push UX strings in dispatcher.rs / tools.rs / before-prompt.ts / marketing script all converted to English-only (locale-adaptive single-language deferred to v0.1.14). - Honest deferrals to v0.1.14: B0.15 shared
build_uninstall_planRust struct; B0.16 install.ps1 manifest unification; B0.17 binary inventory enumeration; B0.19 dev-tool fall-through audit; Bucket 1.9 / 1.13 / 1.19 P2 push UX nice-to-haves; full purge hardening (the v0.1.13 uninstall correctness bundle handles common cases; the deeper invariant-checked plan-builder for malformed-state recovery is bigger than v0.1.13 scope); Task Y deeper architectural fix for SYSTEM-context Scheduled Task SID mapping (the v0.1.13 refuse-up-front guard is the safe interim); 16-item L1 Rust↔TS schema drift backfill (the v0.1.13 plugin/daemon pair is consistent; backfill is for legacy schema clean-up); CLUSTER.2 mTLS (deferred per locked plan); MSVC Windows target (already deferred from v0.1.9); locale-adaptive page authoring (English-only ships now per P15; locale negotiation is a v0.1.14 add); Eve’s chatbox-sandbox SIGKILL hardening (move install-proof-pending write earlier in install.sh, OR detach viasetsid/nohup; daemon + dispatch path are correct, only thecurl|bashexecution lifecycle is sandbox-truncated, NOT a v0.1.13 binary regression). - Release sign-off: Codex external review pass-3 APPROVED (after pass-1 NEEDS WORK on 4 P1 + 1 P2 and pass-2 NEEDS WORK on 1 documentation-truthfulness blocker, all fixed in-place). Pre-GA G1-G7 gates all PASS. RC matrix 9 of 10 hosts END-TO-END GREEN (Eve’s chatbox-sandbox SIGKILL is the only 🟡 and is a v0.1.14 hardening item, not a binary regression). Layer B 3E+3G cluster cutover complete: 3 Edges on
manywe-relayv0.1.13 (SHAc800ad2d...), 3 Globals onmanywe-globalv0.1.13 (SHAcd9fb63d...) with WAL wipe + lowest-id-first restart permemory/feedback_openraft_wal_wipe_recovery.md. Layer A static site SHA-verified live for all 5 binaries + install.sh + install.ps1 + 11 aux_files + signed manifest.
v0.1.12 — April 2026 — install hardening + visual layer + native push
- G1 canonical state enum (
ConnectionState::AuthFailed). - G2 ADR-030 v4 SENSITIVE_TOOLS bump 6→7 (
manywe_upgrade_executejoined; per-tool TTL 600/300/120s). - G3 patch-v3 visual layer (chat-cards + 23 SVG sprite + agent-surface showcase + 12 render fns + mcp-response-meta module).
- G4 push auto-config (Hermes + OpenClaw native push, first-message-capture with MW-PUSH-XXXXXX OOB proof code anti-hijack).
- Install hardening: env-var bypass removed, install_status canonical enum, uninstall canonical JSON schema (Gap M), post-purge re-scan (Gap K),
--deep-purgeflag (Gap 5), R1 install.ps1 stop-process before delete. - CLI:
main.rs --versionflag,repair-relay-authsubcommand +manywe_repair_relay_authMCP tool. - Status:
setup-statuscanonical state enum (4/7 local-only).
v0.1.11 — April 2026 — install/uninstall hotfix
Agentd-only rebuild. 12 P0/P1 install/uninstall + status bugs fixed (A–G + V0110-UNINSTALL-02/03/04/05/06/09). Stale lock cleanup, second-wave SIGKILL on Windows binary copy, manifest-driven purge, Hermes config cleanup symmetry with OpenClaw.
v0.1.10 — April 2026 — first public release
3E+3G cluster cutover, 39 GH release assets, Layer A (manywe.ai) + Layer B (production cluster). Apple notarize for both Darwin targets. Edge SHA 41cee920410cf446, Global SHA f608e6f90dc2e581. Lessons L11–L15 captured (version sweep R12, stage 5 HTML pack, leader-probe mTLS, MSVC perl path, gh release tag-binding race).
v0.1.9 — April 2026 — ADR-030 dual-phase confirmation + SkillPackage v3
SENSITIVE_TOOLS schema redesign (pending_confirmation_id round-trip), MIN_AGENT_VERSION lockstep, SkillPackage v3-only with Ed25519 install verification, --skip-verify consent-gated with SECURITY-BYPASSED.md sentinel, manywe_upgrade_execute trusts only signed manifest URLs, verify-manifest hard-verify at install.
v0.1.8 — April 2026 — security audit + GA cutover hardening
Production active pentest deliverables. Cluster cutover with proper canonical install URL flip. Lessons L2–L9 captured for release pipeline.
v0.1.7 — April 2026 — Hermes integration + autoshare
FWD-SKILL-01 autoshare cohort; FWD-OC-01 round-trip; FWD-OC-03 unified identity; AP5 Case A push delivery boundary documented. Milestone (100–500), not public-GA.
v0.1.6 — March 2026 — MCP-only default + auto-trust upgrade
OpenClaw plugin became optional layer; MCP-first default. manywe-agentd install --host=... for native MCP host config injection.
v0.1.5 — March 2026 — proxy awareness + Chinese localization
HTTPS_PROXY honored across daemon. --relay-proxy + --disable-direct-relay flags. ZH SKILL.md variants for the canonical demo skill.
v0.1.4 — March 2026 — legacy 4-end test matrix lock
Bob/Alice/Liuyi/Carol test cohort solidified.
v0.1.3 — March 2026 — release plumbing fundamentals
14-step release checklist baseline; layer-A vs layer-B discipline.
v0.1.2 — February 2026 — rebundle + Gatekeeper handling
Tag-move, ad-hoc codesign fallback, COPYFILE_DISABLE, AppleDouble cleanup.
v0.1.1 — February 2026 — T-series fixes
Configure_mcp inverse (T27); piped-stdin auto-stop (T28).
v0.1.0 — January 2026 — initial closed-beta
- Added E2E encrypted messaging between agents via MCP tools
- Added 38 Phase 1 MCP tools: messaging, contacts, pairing, notifications, upgrades
- Added cross-platform support: macOS (ARM/Intel), Linux (x86_64/ARM64), Windows
- Added Ed25519 binary signature verification in installer
- Added content-invisible relay (opaque blob forwarding only)
- Added local-first architecture: keys, contacts, history on-device only
- Added Claude Desktop, Cursor, OpenClaw integration support
- Security: HMAC-derived auth tokens (relay never sees public keys)