4.3 KiB
4.3 KiB
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 / 已验证事实
- 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.
- Text send has confirmed static call-path evidence:
AppContextManager.SendTxtMessageByJidMessageScheduling.SendChatMessageChat.SendMessage/Chat.sendMessageXMPPConnection.send
- File send has confirmed two-step evidence:
- upload first through
OffLineFileSend.sendFile,FileUploadPara, andIFileTransfer.FileUpload/IMPP.Service.BLL.FileTransfer.FileUpload; - then chat file-message finalization through
trans_UploadCompleted(fileId),MessageScheduling.SendFileMessage, andChat.sendFileMessage.
- upload first through
FileUploadResult.FileID/ remote-folder metadata is required before the chat file message is meaningful.- The static bridge scan found no confirmed existing IPC/plugin/local HTTP route that exposes text-send or file-send.
HttpServerLibexists, but the discoveredfrmLogin.StartWinServerpath depends on logged-in runtime state and no send route was found.PluginLightAppMulProcessCommunicationdeclares aNamedPipeServerStream, but its start method returns immediately.- 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 / 下一轮
- Create a dedicated in-process adapter research plan.
- Keep any sidecar work preview/probe-only until an adapter path is selected.
- Do not implement real
send_message,send_file, orupload_filein this offline branch. - 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.