# Offline B-Route Reverse Decision Date: 2026-07-12 Branch: `codex/offline-broute-reverse` ## Current phase / 当前阶段 Offline reverse engineering for the primary B-route is complete for the current evidence set. The goal was to decide whether B-route can continue through an existing IPC/plugin/local API, or whether it must move to an in-process adapter research branch. ## Inputs / 输入证据 | Evidence | Path | | --- | --- | | Offline sample index | `docs/source-discovery/2026-07-12-offline-broute-reverse-index.md` | | Text send static map | `docs/source-discovery/2026-07-12-broute-text-send-static-map.md` | | File send static map | `docs/source-discovery/2026-07-12-broute-file-send-static-map.md` | | Bridge/IPC/plugin static map | `docs/source-discovery/2026-07-12-broute-bridge-static-map.md` | | Machine JSON outputs | `runs/offline-broute-reverse/*.json` | ## Verified facts / 已验证事实 1. The offline sample set is present and hash-matched against the recorded plan list; the analyzer scripts only read metadata/IL and did not copy or modify binaries. 2. Text send has confirmed static call-path evidence: - `AppContextManager.SendTxtMessageByJid` - `MessageScheduling.SendChatMessage` - `Chat.SendMessage` / `Chat.sendMessage` - `XMPPConnection.send` 3. File send has confirmed two-step evidence: - upload first through `OffLineFileSend.sendFile`, `FileUploadPara`, and `IFileTransfer.FileUpload` / `IMPP.Service.BLL.FileTransfer.FileUpload`; - then chat file-message finalization through `trans_UploadCompleted(fileId)`, `MessageScheduling.SendFileMessage`, and `Chat.sendFileMessage`. 4. `FileUploadResult.FileID` / remote-folder metadata is required before the chat file message is meaningful. 5. The static bridge scan found no confirmed existing IPC/plugin/local HTTP route that exposes text-send or file-send. 6. `HttpServerLib` exists, but the discovered `frmLogin.StartWinServer` path depends on logged-in runtime state and no send route was found. 7. `PluginLightAppMulProcessCommunication` declares a `NamedPipeServerStream`, but its start method returns immediately. 8. Returned live probe saw `\\.\pipe\zfpinject-msg-server`, but no matching iSphere static send contract was found. ## Decision / 决策 | Candidate | Decision | Reason | | --- | --- | --- | | `existing_ipc_first` | rejected for now | No concrete local HTTP/named-pipe/service send API was confirmed. | | `plugin_extension_first` | rejected for now | Plugin evidence is UI/app-store/context-menu oriented; no local plugin load/send bridge is confirmed. | | `in_process_adapter_research` | selected | The send and file-send call paths exist, but they need access to the logged-in `IMPlatformClient.exe` runtime objects. | | `external_sidecar_preview_only` | allowed | External sidecar can validate contracts/probes, but cannot reuse logged-in static runtime by itself. | | `fallback_rpa_only` | not selected | A-route/RPA remains backup-only; do not promote it unless B-route is explicitly blocked by a later decision. | Final offline decision: **B-route stays primary, but the next real branch is `in_process_adapter_research`, not existing IPC/plugin and not production send.** ## Business impact / 业务影响 - Message receiving, file receiving/listing, contact search, and group search stay on the existing data/log-backed roadmap. - Text send is technically mapped but not business-complete: the missing piece is a bridge into logged-in runtime state and later online ack/sent-record validation. - File send is harder than text send: upload and chat-message finalization are separate, and upload needs HTTP file-service auth plus server-issued file id. - RPA remains a practical backup for UI smoke, but it is not the product architecture. ## Next implementation slice / 下一轮 1. Create a dedicated in-process adapter research plan. 2. Keep any sidecar work preview/probe-only until an adapter path is selected. 3. Do not implement real `send_message`, `send_file`, or `upload_file` in this offline branch. 4. Online evidence later must prove sent-record/content-hash/ack before production send can be called complete. ## Stop conditions / 停止条件 Stop and ask for business decision if the next in-process research shows that every viable bridge requires invasive process mutation, unsupported injection, or cannot be validated without a logged-in test environment.