Compare commits

..
4 changed files with 236 additions and 70 deletions
@@ -0,0 +1,115 @@
# Personal-Weixin R10 B3/B4 Evidence Gate Result
```yaml
status: EVIDENCE_REQUIRED
decision: STOP_BEFORE_B3_IMPLEMENTATION
task: Personal-Weixin R10 post-F0 B3/B4 evidence gate
timestamp_utc8: 20260716T101002UTC8
foundation:
implementation_commit: 2fcab6f5833a405a9a26683811600b6e5f1aa7b1
implementation_parent: d5b51e1342541bf51887782f530c3d2971155996
implementation_tree: bca1a70cabe91c40ad0008f038105cb92fab5edd
result_commit: 64a71b6199a8e2bd609ba145349e67b874888505
image_digest: sha256:ed741d1f028c4bd507c6eda71fb1dcc11e0815c0107afcbfcbaaaaa23d5a11bb
image_digest_kind: local-image-config-digest
status: PASS
lineage:
commit: 74e603c0c943501110577dbe3c7f6a0b18b8ec7d
parent: d5b51e1342541bf51887782f530c3d2971155996
tree: bf12a3ba54f50b9e1131e7e32fa1a958a79777ed
amendment_sha256: 014f0488ca971bf4cd8925882f9fc303ecbde19d15515333ba2073b193183990
foundation_node: F0_PERSONAL_WEIXIN_FOUNDATION
precedes:
- B3
- B4
- B5
- B6
- B7
b3:
status: EVIDENCE_REQUIRED
exact_allowlist_count: 15
allowlist_source_commit: d74229927b2dadca7719455984aea10d010c5123
evidence_path: release/v2r1c0-rc1/weixin-bridge-evidence.json
evidence_present_at_lineage: false
implementation_started: false
qualifying_post_f0_ref_present: false
missing_non_secret_inputs:
- exact installed TypeScript/JavaScript source paths and SHA-256 digests
- exact inbound bigint and raw field contract
- authenticated account, sender, and conversation source ownership
- authority-map owner, mode, and schema
- candidate credential contract and enforcement-mode owner
action: stop_without_implementation_commit
b4:
status: EVIDENCE_REQUIRED
exact_allowlist_count: 19
allowlist_source_commit: d74229927b2dadca7719455984aea10d010c5123
hermes_evidence_path: release/v2r1c0-rc1/hermes-http-contract-evidence.json
outbound_binding_evidence_path: release/v2r1c0-rc1/weixin-outbound-binding-evidence.json
hermes_evidence_present_at_lineage: false
outbound_binding_evidence_present_at_lineage: false
implementation_started: false
qualifying_post_f0_ref_present: false
missing_non_secret_inputs:
- live Hermes listener, unit, source, schema, and source digest
- exact downstream timeout and tenant/user ownership contract
- repeated route_id idempotency behavior
- owner/vendor protocol evidence binding exact client_id to provider message_id
action: stop_without_implementation_commit
later_stages:
B5: NOT_STARTED
B6: NOT_STARTED
B7: NOT_STARTED
release_preflight: NOT_STARTED
canary: NOT_STARTED
production_promotion: NOT_STARTED
repository_state_at_capture:
main_commit: 3cf9958cb94614449e093639cbf902216d73447f
v1r4c6_tag_peeled_commit: d8cf6058e99f5c7f2dfd2b45a406c0a7edf955b2
v2r1c0_tag_present: false
production:
changed: false
declared_baseline: V1R4C6
declared_baseline_file: /data/aios-gitops/workspace/baseline/current.json
declared_baseline_file_sha256: f8daf701565c1d15dc823ef54c6adfe00318fe502b450a596b17fd8c7bf57481
declared_baseline_note: baseline metadata states the release was not yet deployed to production
actual_current_runtime: /opt/aios-v23/releases/v3-lite-20260705T103927
baseline_runtime_mapping_reconciled: false
release_status: paused
safety:
implementation_or_control_branch_modified: false
production_mutated: false
secret_values_read: false
secret_values_recorded: false
force_push: false
execution_counters:
permission_denied_count: 0
checkout_collision_count: 0
git_lock_collision_count: 0
```
## Evidence decision
The committed R10 plan contains exact B3 and B4 path allowlists, but the
required evidence records are absent from the post-F0 lineage tree. Existing
historical B3/B4 branches do not contain the accepted F0 implementation or the
lineage amendment and therefore are not qualifying continuation inputs.
B3 must not start until its installed-source and authority evidence is captured
without inference. B4 remains independently stopped until both the live Hermes
contract and an exact owner/vendor protocol echo binding `client_id` to
`message_id` are accepted. A timestamp or local synthetic identifier is not a
substitute for that provider evidence.
Production was not modified. The declared `V1R4C6` baseline and the actual
`/opt/aios-v23/current` target are recorded separately because their mapping
has not been reconciled. No secret value was inspected or included.
@@ -0,0 +1,98 @@
# RESULT-CODEX-V2R1-PERSONAL-WEIXIN-UPSTREAM-PROTOCOL-EVIDENCE-20260716T105003UTC8
```yaml
status: EVIDENCE_RECORDED
scope: official_upstream_protocol_evidence_only
baseline_commit: 62a4067cf7a462ebe7cf29524238bc5d0a70b813
verified_at: 2026-07-16T10:50:03+08:00
upstream:
repository: Tencent/openclaw-weixin
release: v2.4.6
release_commit: cef0bfc390393f716903e16d50408118047f87e0
npm_package: "@tencent-weixin/openclaw-weixin"
npm_version: 2.4.6
B3: PARTIAL
B3_raw_fixture: NOT_AVAILABLE_IN_REVIEWED_OFFICIAL_SOURCES
B4: NO_OFFICIAL_EXACT_BINDING_CONTRACT
implementation_changed: false
main_changed: false
production_changed: false
```
## Official primary sources
- Release commit: <https://github.com/Tencent/openclaw-weixin/commit/cef0bfc>
- Release patch with full commit identity: <https://github.com/Tencent/openclaw-weixin/commit/cef0bfc.patch>
- Release tag: <https://github.com/Tencent/openclaw-weixin/releases/tag/v2.4.6>
- Point-in-time tag/main comparison: <https://github.com/Tencent/openclaw-weixin/compare/v2.4.6...main>
- Protocol types at the immutable release commit: <https://raw.githubusercontent.com/Tencent/openclaw-weixin/cef0bfc/src/api/types.ts>
- API implementation at the immutable release commit: <https://raw.githubusercontent.com/Tencent/openclaw-weixin/cef0bfc/src/api/api.ts>
- Outbound send implementation at the immutable release commit: <https://raw.githubusercontent.com/Tencent/openclaw-weixin/cef0bfc/src/messaging/send.ts>
- Protocol README at the release tag: <https://raw.githubusercontent.com/Tencent/openclaw-weixin/v2.4.6/README.md>
- Official npm package metadata page: <https://www.npmjs.com/package/@tencent-weixin/openclaw-weixin?activeTab=versions>
## Version and provenance boundary
The GitHub release page binds `v2.4.6` to commit `cef0bfc`; the official patch endpoint expands that identity to `cef0bfc390393f716903e16d50408118047f87e0`. At verification time, the official comparison page reported `v2.4.6` and `main` as identical. `main` is mutable and the npm web page is dynamically published metadata, so protocol conclusions below are bound to the immutable release commit, not to future `main` or future dist-tag state.
The official npm page reported `@tencent-weixin/openclaw-weixin` version `2.4.6` as `latest` at verification time. This corroborates release provenance but does not add wire-level response fields beyond the immutable source.
## B3 — PARTIAL
Official documentation and types establish the structural inbound contract:
- `getUpdates` returns a `msgs` collection and a reusable `get_updates_buf` cursor.
- `WeixinMessage` declares `message_id`, `client_id`, `from_user_id`, `to_user_id`, `session_id`, `context_token`, message type/state, and item content fields.
- The implementation posts the cursor to `ilink/bot/getupdates`, parses the JSON response as `GetUpdatesResp`, and returns the parsed envelope.
This is sufficient to identify candidate wire fields and to design a strict parser. It is not sufficient for B3 acceptance because none of the reviewed official URLs provides an authenticated, redacted raw `getUpdates` response captured from the provider. No authoritative raw fixture was available in the reviewed source/document set, so real field presence, numeric/string encoding, authority ownership, credential wiring, and rotation/reload behavior remain unproven.
```yaml
B3:
status: PARTIAL
official_schema: VERIFIED
official_endpoint_semantics: VERIFIED
provider_raw_capture: MISSING
deployable_authority_map: NOT_PROVEN
credential_contract: NOT_PROVEN
```
## B4 — NO_OFFICIAL_EXACT_BINDING_CONTRACT
The immutable source has two distinct identifier surfaces but does not bind them:
- `WeixinMessage` can carry both provider-side `message_id` and client-supplied `client_id` on inbound/update messages.
- `SendMessageReq` carries the client-generated `client_id`.
- `SendMessageResp` contains only `ret` and `errmsg`; it has no provider `message_id` and no echoed `client_id` field.
- The API layer treats a zero/absent `ret` as success and returns no provider identifier.
- The outbound helper generates a local `client_id`, sends it, then returns that same local value as `messageId`. This is a local alias after accepted send, not evidence of a provider-assigned message ID.
No reviewed official response schema, event example, source path, release note, or README semantics demonstrates an exact relation of the form `request.client_id -> authoritative provider.message_id` for the same send. Therefore an exact outbound quote binding cannot be asserted from official upstream evidence, and using the helper's returned `messageId` as a provider ID would be semantically incorrect.
```yaml
B4:
status: NO_OFFICIAL_EXACT_BINDING_CONTRACT
request_client_id: PRESENT
send_response_provider_message_id: ABSENT
send_response_client_id_echo: ABSENT
local_messageId_value: generated_client_id
authoritative_provider_binding: NOT_PROVEN
safe_policy: keep_outbound_quote_authority_disabled
```
## Verification summary
```yaml
official_source_fetch: PASS
release_commit_identity: PASS
release_tag_identity: PASS
tag_main_point_in_time_comparison: IDENTICAL
npm_version_metadata: PASS
implementation_tests: NOT_APPLICABLE_RESULT_ONLY
secrets_recorded: false
long_verbatim_quotes_recorded: false
```
## Release impact
This result narrows the evidence boundary; it does not authorize B3/B4 implementation, release preflight, canary, tag creation, or production deployment. B3 still requires owner/vendor raw evidence and deployment contracts. B4 requires an owner/vendor exact binding contract or an owner-approved contract amendment that keeps outbound quote authority disabled.
@@ -1,70 +0,0 @@
status: BLOCKED_DEPENDENCY_SOURCE
previous_result_commit: 67b2d571aa1244dbb1a1ef2a293bdf04c59f52aa
owner_patch_bundle_sha256: d4c1c0436473a7dda08ad26e628f8ad929a64ca56769e47bebc87025f9427e80
owner_requirements_sha256: 5c4307ece9524c883f1926e50fc333d7a98f50b7ebf3811affa8aa007915789a
owner_dockerfile_sha256: 68565361c35d5ed6e8d6820c063d413a39fe6398fed5d7775cb7df1c1379f4fd
owner_apply_script_sha256: 3ffda9de825bd27f0367256670a80364ff9953c3b650184c2726d176b299134f
archive_safety_gate: PASS
owner_patch_archive_members: PASS
owner_patch_member_sha256: PASS
owner_apply_script_syntax: PASS
owner_apply_script_result: PASS
owner_apply_exit: 0
staging_reference_16_sources: PASS
changed_paths_exact_18: PASS
staging_manifest_valid: PASS
symlink_count: 0
unauthorized_path_count: 0
trusted_portal_python: /tmp/pwx-foundation-retry3.91ecvh/venv/bin/python
trusted_django_version: 5.2.15
trusted_asgiref_version: 3.12.1
trusted_sqlparse_version: 0.5.5
trusted_dependency_version_gate: PASS
offline_wheelhouse: BLOCKED_DEPENDENCY_SOURCE
offline_wheelhouse_manifest_sha256: null
offline_wheel_files: []
offline_wheel_sha256: {}
dependency_network_used: false
dependency_source_failure: >
Owner wheelhouse materializer rejected the trusted Django distribution RECORD file
inventory before wheel generation. Exact stderr: ERROR: unsafe installed-distribution
path: '../../../../pycache/tmp/pwx-foundation-retry3.91ecvh/venv/lib/python3.12/site-packages/django/__init__.cpython-312.pyc'
implementation_branch: patch/v2r1-personal-weixin-foundation-codex-retry8-20260715T183951UTC8
implementation_commit: null
implementation_parent: d5b51e1342541bf51887782f530c3d2971155996
implementation_commits: 0
merge_commits: 0
runtime_wheel: NOT_RUN
fresh_venv_install: NOT_RUN
external_import: NOT_RUN
package_identity_tests: NOT_RUN
portal_check: NOT_RUN
migration_dry_run: NOT_RUN
temporary_migration_apply: NOT_RUN
model_security: NOT_RUN
repository_single_consume: NOT_RUN
repository_idempotency: NOT_RUN
repository_conflict_fail_closed: NOT_RUN
repository_concurrency_contract: NOT_RUN
local_base_digest_equivalence: NOT_RUN
build_engine: none
build_network: none
remote_resolution_attempted: false
image_build: NOT_RUN
container_offline_dependency_gate: NOT_RUN
container_non_root: NOT_RUN
runtime_uid: null
image_id: null
image_digest: null
image_digest_kind: null
image_contract: NOT_RUN
gitleaks: NOT_RUN
worktree_artifact_pollution: PASS
worktree_clean: true
production_changed: false
baseline_after: V1R4C6
release_status: paused
b6_b7_started: false
canary_started: false
owner_action_required: Provide a fresh owner-authorized trusted dependency source without the outside-site-packages RECORD pycache entry, or an owner-authored exception.
next_gate: Re-run Retry 8 from fresh staging after owner-authorized dependency-source replacement.
@@ -0,0 +1,23 @@
{
"schemaVersion": 1,
"contract": "personal-weixin-r10-lineage-amendment",
"foundation": {
"node": "F0_PERSONAL_WEIXIN_FOUNDATION",
"implementationCommit": "2fcab6f5833a405a9a26683811600b6e5f1aa7b1",
"resultCommit": "64a71b6199a8e2bd609ba145349e67b874888505",
"imageDigest": "sha256:ed741d1f028c4bd507c6eda71fb1dcc11e0815c0107afcbfcbaaaaa23d5a11bb",
"status": "PASS"
},
"precedes": [
"B3",
"B4",
"B5",
"B6",
"B7"
],
"production": {
"baseline": "V1R4C6",
"changed": false,
"releaseStatus": "paused"
}
}