docs: add offline b-route reverse decision
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user