From 4a9f3fff1a8219e32d4c5c1f432c666ce8d9b8c3 Mon Sep 17 00:00:00 2001 From: AIOS GitOps Bot Date: Tue, 7 Jul 2026 11:02:43 +0800 Subject: [PATCH] docs(reports): add UCC WeChat owner test report --- ...WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 reports/codex/UCC_WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md diff --git a/reports/codex/UCC_WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md b/reports/codex/UCC_WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md new file mode 100644 index 0000000..f319a3e --- /dev/null +++ b/reports/codex/UCC_WECHAT_SEND_BACKEND_OWNER_TEST_20260707.md @@ -0,0 +1,47 @@ +# UCC WeChat Send Backend Owner Test - 2026-07-07 + +## Status + +PASS + +## Architecture Source + +- Source: `docs/architecture/AIOS_REMOTE_CODEX_MULTI_AGENT_ORCHESTRATION.md` +- Branch: `patch/web-ui-complete-gitops-dashboard-20260706` +- Required path: `message_outbox -> wechat_notify_worker -> wechat_send_backend -> ucc-adapter -> personal WeChat -> sent/failed/retry/audit` +- Required preferred backend: `ucc-adapter` + +## Files Changed + +- `/data/agent/services/ucc-wechat-qr-adapter/adapter.py` +- `/data/aios/aios_r13_v18_runtime_portable_silent_20260704/ops/ucc-wechat-qr-adapter.py` +- `/data/aios-gitops/workspace/scripts/wechat_send_backend.py` +- `/data/aios-gitops/workspace/tests/test_wechat_send_backend.py` +- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/ops/ucc-wechat-qr-adapter.py` +- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/ops/test_ucc_wechat_qr_adapter.py` +- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/scripts/wechat_send_backend.py` +- `E:/codex/aios_v23_RUNTIME_FULL_DEPLOY/tests/test_wechat_send_backend.py` + +## Verification Evidence + +- Local tests: `python -m unittest ops.test_ucc_wechat_qr_adapter tests.test_wechat_send_backend` -> `Ran 7 tests ... OK` +- Remote GitOps tests: `python3 tests/test_wechat_send_backend.py` -> `Ran 3 tests ... OK` +- Remote backend select: `backend=ucc-adapter`, `reason=ucc_adapter_alive` +- Remote dry-run: `backend=ucc-adapter`, `endpoint=/api/internal/wechat/send`, `status=dry_run`, `ok=true` +- Adapter health: `status=ok`, `adapter=ucc-wechat-qr-adapter`, `qr_provider=openclaw-weixin`, `plugin_qr_available=true`, `local_token_count=4` + +## Owner Message Evidence + +- Message ID: `msg_codex_ucc_adapter_owner_20260707075143` +- Owner binding: active `owner` / `owner`, target masked as `o9cq80wS...@im.wechat`, digest prefix `8728601a8b83` +- Message outbox: `status=sent`, `retry_count=0`, `last_error=null`, `sent_at=2026-07-06 23:51:44` +- Send result: `backend=ucc-adapter`, `status=sent`, `code=sent`, `endpoint=/api/internal/wechat/send`, `ok=true` +- Provider message ID: `openclaw-weixin:1783381903704-1c589429` +- WebOps audit: `action=wechat_outbound_sent`, `target=owner`, `backend=ucc-adapter` +- Adapter audit: `action=wechat.send.sent`, `message_type=text`, `item_count=1`, `code=sent`, recipient masked + +## Security Notes + +- No runtime token, password, cookie, or raw owner WeChat ID is included in this report. +- The adapter audit masks recipients for send events. +- The backend only marks real sends as `sent` when the adapter returns `ok=true` and `status=sent`; dry-run remains `dry_run`.