# Private Conversation Shadow Testing This prototype observes one manually selected private conversation without changing the production group workflow. It is intentionally unable to switch conversations or send replies: - The recorder never enqueues matching shadow events. - Every observation carries `shadow_only=true` and `dispatch_allowed=false`. - JWeBot Edge ignores marked observations before routing or persistence. - The shadow registry accepts private targets only. The main group cannot be added to it. - No setting in the shadow registry can enable delivery. ## Local Configuration Keep the real file outside the repository: ```text ~/.config/jwebot/conversation-shadow.json ``` Example with placeholder values: ```json { "format_version": 1, "enabled": true, "targets": [ { "key": "test-direct", "kind": "direct", "title_fingerprint": "<64 lowercase SHA-256 characters>", "sender": "" } ] } ``` Set `JWEBOT_CONVERSATION_SHADOW_CONFIG` to that absolute path only in a local test process. Without the variable, the feature is not imported or enabled. The title fingerprint is the SHA-256 value returned by `title_fingerprint(image)` for a screenshot where the intended conversation is selected. It is an opaque routing value, not a trusted contact identity. ## Controlled Test 1. Keep production services unchanged. 2. Run the recorder in a separate local test state directory. 3. Select the allowlisted private conversation manually. 4. Let the first capture establish a baseline. 5. Send `/状态` or `JWeBot: 测试` from the other account. 6. Inspect the local history for `shadow_only=true`. 7. Assert that the OCR queue remains empty and no outgoing bubble appears. Ordinary private messages are observed but do not set `mention_bot`. Only slash commands and the configured wake word are treated as potential triggers. Do not point this prototype at production state paths and do not add the environment variable to a deployed runtime profile.