4.9 KiB
Send Connector Preflight
Date: 2026-07-10 Node: R6a / C31 non-mutating send connector preflight
Goal
Confirm, without sending/clicking/typing/uploading/hooking/capturing network traffic, whether the selected B-route send connector can continue and whether the A-route UI fallback can classify the necessary controls and offline blocker state.
Implemented helper coverage
ISphereWinHelper is bumped to 0.4.0 and adds two read-only helper operations:
| op | Purpose | Side effects |
|---|---|---|
probe_send_entrypoints |
Inspect copied/installed binaries for text/file send entrypoint metadata. | none |
probe_send_uia_controls |
Classify UIA controls for search, receive pane, send editor, send button, file menu, and offline blocker. | none |
Both operations return a safety object with these booleans set to false: sent_message, sent_file, uploaded_file, clicked_ui, typed_text, captured_network, attached_hook, and modified_client_data.
The live recorder now writes these additional files when run in an online iSphere environment:
send_entrypoints_preflight.json
send_uia_controls_preflight.json
B-route entrypoint preflight result
Manual metadata probe against the copied install family:
runs/offline-evidence-intake/zyl-qqfile-20260709/extracted/c28-send-candidates/zyl/Impp
reported:
{
"entrypoint_count": 7,
"available_count": 7,
"required_count": 5,
"required_available_count": 5,
"all_required_available": true,
"b_route_entrypoint_preflight": "pass"
}
Confirmed candidates:
| Capability | Candidate | Evidence |
|---|---|---|
| text send | AppContextManager.SendTxtMessageByJid |
method name and AppContextManager type-name metadata present in IMPlatformClient.exe; IL evidence in the C28 snapshot shows the class/method body |
| text send | MessageScheduling.SendChatMessage |
reflection method found in IMPlatformClient.exe |
| text send | com.vision.smack.Chat.SendMessage |
reflection method found in smack.dll |
| file send/upload | IMPP.Service.BLL.FileTransfer.FileUpload |
reflection method found in IMPP.Service.dll |
| file send/upload | IMPP.Service.BLL.FileTransfer.AsynFileUpload |
reflection method found in IMPP.Service.dll |
| file send | IMPP.Client.OffLineFileSend.sendFile |
reflection method found in IMPlatformClient.exe |
| file send | com.vision.smack.Chat.sendFileMessage |
reflection method found in smack.dll |
Note: AppContextManager.SendTxtMessageByJid is treated as metadata-confirmed because .NET reflection did not resolve that type in the helper process, while the IL snapshot contains the exact class and method and the binary string scan finds the method and short type name. This is enough for R6a preflight, not enough for production invocation.
A-route UIA preflight result
The helper classifier detects these route facts from a UIA tree:
has_search_edithas_receive_documenthas_send_editorhas_send_buttonhas_file_menuoffline_blocker_visiblesend_button_enabledroute_hint
Synthetic WinForms verification returned:
{
"synthetic_send_uia_route_hint": "A_ROUTE_OFFLINE_BLOCKED"
}
R5b returned live-probe evidence already showed real-window selector candidates for skinAlphaTxt, rtbSendMessage, btnSend, and the file-send menu, plus the offline-send blocker text. The new helper op turns that evidence into repeatable classifier output for the next live package.
Verification
Passing local verification:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\build-win-helper.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\verify-win-helper.ps1 -SkipBuild
Observed helper smoke output:
{
"ok": true,
"helper_version": "0.4.0",
"send_entrypoint_probe_mode": "read_only_send_entrypoint_metadata",
"synthetic_send_uia_route_hint": "A_ROUTE_OFFLINE_BLOCKED",
"uia_available": true
}
Decision
R6a passes as a non-mutating preflight:
- B-route entrypoint metadata is available enough to continue to the next non-production B-route step.
- A-route controls can be classified as a fallback and can explicitly report offline-blocked state.
- Production
isphere_send_messageandisphere_send_fileremain blocked.
Next implementation node
Next node: R6b B-route preview/dry-run contract.
R6b should implement only preview/dry-run and audit shape first:
- target resolution input shape from existing contact/group search result refs;
content_sha256/ file hash and idempotency key validation;- connector metadata such as
connector="implatform-sidecar"andconnector_stage="preview"; - local audit append for preview attempts;
- no real send, no file upload, and no UI click/type.
The later online-only gate remains: one operator-approved sandbox send must still prove success/ack or sent-record evidence before any production send path is exposed.