Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
139 commits
Select commit Hold shift + click to select a range
c0221f7
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
01790db
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
a483989
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
0a9eb01
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
cf33c6b
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
62dd8df
Add v9.9.0 WhatsApp protocol primitives
the-code-learner Sep 21, 2026
8948d71
Add v9.9.0 WhatsApp handshake session primitives
the-code-learner Sep 21, 2026
c5af4a3
Add v9.9.0 WhatsApp handshake session primitives
the-code-learner Sep 21, 2026
29849af
Add v9.9.0 WhatsApp handshake session primitives
the-code-learner Sep 21, 2026
a0dda6a
Add v9.9.0 WhatsApp handshake session primitives
the-code-learner Sep 21, 2026
542ae91
Add v9.9.0 WhatsApp cryptographic primitives
the-code-learner Sep 21, 2026
939e2b8
Add v9.9.0 WhatsApp WABinary codec
the-code-learner Sep 21, 2026
a65b2f7
Add v9.9.0 candidate runtime and WhatsApp service
the-code-learner Sep 21, 2026
47580c2
Add v9.9.0 tracking approval policy
the-code-learner Sep 21, 2026
f904b49
Add v9.9.0 hybrid email search index
the-code-learner Sep 21, 2026
917db5a
Add v9.9.0 email calendar runtime overlay
the-code-learner Sep 21, 2026
b2b4019
Wire v9.9.0 candidate overlays into composed runtime
the-code-learner Sep 21, 2026
6756343
Restore exact r4 Signal/store sources
the-code-learner Sep 21, 2026
10312ac
Fix v9.9 email search status integration
the-code-learner Sep 21, 2026
63bcfa7
Add v9.9.0 candidate regression tests
the-code-learner Sep 21, 2026
7a61086
Add v9.9.0 candidate regression tests
the-code-learner Sep 21, 2026
0e8ca7c
Add v9.9.0 candidate regression tests
the-code-learner Sep 21, 2026
bef2426
Add v9.9.0 WhatsApp regression tests
the-code-learner Sep 21, 2026
68fbd21
Add v9.9.0 WhatsApp regression tests
the-code-learner Sep 21, 2026
9b53f2e
Add v9.9.0 runtime regression tests
the-code-learner Sep 21, 2026
c13f3f4
Avoid shadowing real MCP SDK in v9.9 runtime tests
the-code-learner Sep 21, 2026
e7da2be
Add exact r4 WhatsApp protocol regression tests
the-code-learner Sep 21, 2026
9c1cad8
Make WhatsApp QR test honor optional local renderer
the-code-learner Sep 21, 2026
706dc5c
Guard WhatsApp acceptance flags in regression tests
the-code-learner Sep 21, 2026
a526d99
Add dedicated WhatsApp v9.9 offline validation workflow
the-code-learner Sep 21, 2026
c4eb2ae
Lazy-initialize v9.9 persistent email state
the-code-learner Sep 21, 2026
83e1a78
Lazy-initialize v9.9 WhatsApp persistent state
the-code-learner Sep 21, 2026
2b052b0
Update final MCP registry contract for v9.9 additions
the-code-learner Sep 21, 2026
30c1808
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
4228450
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
ff6a045
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
ee7b6d6
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
eea125c
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
51d3117
Update final composed registry expectation for v9.9
the-code-learner Sep 21, 2026
c5b5119
Add unauthenticated WhatsApp WebSocket transport smoke
the-code-learner Sep 21, 2026
378cab0
Probe WhatsApp WebSocket transport in GitHub Actions
the-code-learner Sep 21, 2026
763cf03
Add live WhatsApp Noise ServerHello probe
the-code-learner Sep 21, 2026
aebeee0
Verify live WhatsApp Noise ServerHello in Actions
the-code-learner Sep 21, 2026
33640b9
Verify WhatsApp Noise certificate chain
the-code-learner Sep 21, 2026
9b5e196
Fail closed on WhatsApp Noise server certificate
the-code-learner Sep 21, 2026
7ae3548
Test WhatsApp Noise certificate verification
the-code-learner Sep 21, 2026
66e4937
Exercise production Noise certificate verifier live
the-code-learner Sep 21, 2026
5d28e87
Use production Noise certificate verifier in live probe
the-code-learner Sep 21, 2026
5ffb41e
Encode current WhatsApp Web registration and login payloads
the-code-learner Sep 21, 2026
c9bcd84
Test current WhatsApp Web client payload encoding
the-code-learner Sep 21, 2026
e41b514
Pin current WhatsApp WABinary token table
the-code-learner Sep 21, 2026
0e23d28
Decode current WABinary FB and interop JIDs
the-code-learner Sep 21, 2026
14d653a
Add live WhatsApp pair-device registration probe
the-code-learner Sep 21, 2026
d7bcd46
Validate live WhatsApp ClientFinish and pair-device flow
the-code-learner Sep 21, 2026
991dc97
Test pinned WhatsApp token table and modern JIDs
the-code-learner Sep 21, 2026
75d183f
Implement WhatsApp ADV pair-success verification
the-code-learner Sep 21, 2026
b039a0d
Test WhatsApp ADV pair-success signatures
the-code-learner Sep 21, 2026
9970581
Add dependency-free native WhatsApp WebSocket driver
the-code-learner Sep 21, 2026
00f8c10
Run pair-device probe through native WebSocket driver
the-code-learner Sep 21, 2026
d37b51f
Validate pair-device with dependency-free native WebSocket
the-code-learner Sep 21, 2026
5814109
Test dependency-free native WhatsApp WebSocket driver
the-code-learner Sep 21, 2026
89e6682
Implement explicit WhatsApp pairing and reconnect adapter
the-code-learner Sep 21, 2026
13cc580
Test explicit fail-closed WhatsApp pairing adapter
the-code-learner Sep 21, 2026
34351ad
Use explicit current-protocol WhatsApp adapter by default
the-code-learner Sep 21, 2026
0644d1d
Document explicit current-protocol WhatsApp adapter
the-code-learner Sep 21, 2026
f42018e
Implement clean-room Signal v3 Double Ratchet session
the-code-learner Sep 21, 2026
7466fc1
Separate local and remote Signal registration IDs
the-code-learner Sep 21, 2026
84cff2c
Test Signal v3 Double Ratchet end to end
the-code-learner Sep 21, 2026
04e6b14
Compile all WhatsApp candidate modules and tests in CI
the-code-learner Sep 21, 2026
9af7acb
Add WhatsApp Signal pre-key and session IQ helpers
the-code-learner Sep 21, 2026
0aae789
Test WhatsApp Signal key bundle IQ helpers
the-code-learner Sep 21, 2026
51dc759
Add correlated IQ queries to WhatsApp wire session
the-code-learner Sep 21, 2026
0b41c0e
Persist and upload Signal pre-keys after WhatsApp login
the-code-learner Sep 21, 2026
9452b2c
Add WhatsApp USync device discovery
the-code-learner Sep 21, 2026
f2f314e
Test WhatsApp USync device discovery
the-code-learner Sep 21, 2026
342d997
Persist complete signed WhatsApp device identity
the-code-learner Sep 21, 2026
3e851d9
Add WhatsApp direct message wire builders
the-code-learner Sep 21, 2026
f9f997c
Test WhatsApp direct message wire builders
the-code-learner Sep 21, 2026
5d331fe
Add live WhatsApp Noise ClientFinish registration probe
the-code-learner Sep 21, 2026
5a5aeca
Extend WhatsApp live validation through Noise ClientFinish
the-code-learner Sep 21, 2026
2c245e3
Add WhatsApp reply context and read receipt wire builders
the-code-learner Sep 21, 2026
40612ae
Add clean-room WhatsApp pair-success verification
the-code-learner Sep 21, 2026
f4a1d84
Test WhatsApp pair-success verification and signing
the-code-learner Sep 21, 2026
2942867
Remove duplicate pair-success implementation
the-code-learner Sep 21, 2026
bb6fa4c
Remove duplicate pair-success implementation
the-code-learner Sep 21, 2026
b70b4d0
Implement clean-room WhatsApp direct text fan-out
the-code-learner Sep 21, 2026
008ad33
Test WhatsApp direct Signal fan-out and receipt sequencing
the-code-learner Sep 21, 2026
dc4d6f0
Keep WhatsApp send acceptance fail-closed
the-code-learner Sep 21, 2026
f5f2794
Add WhatsApp message padding helpers
the-code-learner Sep 21, 2026
826fd49
Pad WhatsApp messages before Signal encryption
the-code-learner Sep 21, 2026
a65b09b
Test WhatsApp Signal message padding
the-code-learner Sep 21, 2026
d4259f2
Add WhatsApp direct text decode and transport ACK helpers
the-code-learner Sep 21, 2026
b8aef31
Add single-reader WhatsApp wire dispatcher
the-code-learner Sep 21, 2026
5b7a3ca
Add WhatsApp direct receive and correlated ACK dispatch
the-code-learner Sep 21, 2026
5cc5882
Persist WhatsApp inbound messages and remote receipts
the-code-learner Sep 21, 2026
157501a
Test WhatsApp direct receive and asymmetric ACK policy
the-code-learner Sep 21, 2026
9f3c32b
Test WhatsApp inbound text decode and transport ACK
the-code-learner Sep 21, 2026
5d6b872
Fix WhatsApp message helper test imports
the-code-learner Sep 21, 2026
3c654a9
Add clean-room WhatsApp media upload and protobuf helpers
the-code-learner Sep 21, 2026
0be1288
Test WhatsApp media upload download and protobuf helpers
the-code-learner Sep 21, 2026
9b54766
Wire Stored File WhatsApp media upload and Signal relay
the-code-learner Sep 21, 2026
7a52e72
Add read-only WhatsApp group metadata protocol
the-code-learner Sep 21, 2026
799acde
Enable read-only WhatsApp group listing
the-code-learner Sep 21, 2026
d79187c
Test read-only WhatsApp group listing
the-code-learner Sep 21, 2026
7fb4e59
Add controlled-account WhatsApp interop harness
the-code-learner Sep 21, 2026
f62bb6a
Add manual controlled-account WhatsApp Actions gate
the-code-learner Sep 21, 2026
b22f094
Add clean-room Signal SenderKey v3 primitives
the-code-learner Sep 21, 2026
36b4a61
Test Signal SenderKey v3 group primitives
the-code-learner Sep 21, 2026
3a5e297
Add WhatsApp group message stanza builder
the-code-learner Sep 21, 2026
8f73a10
Implement WhatsApp SenderKey group text send
the-code-learner Sep 21, 2026
aa42005
Test WhatsApp SenderKey group text send
the-code-learner Sep 21, 2026
9b34be4
Decode group sender keys through DeviceSentMessage wrappers
the-code-learner Sep 21, 2026
3ba404d
Test wrapped WhatsApp SenderKey distribution decode
the-code-learner Sep 21, 2026
c34d505
Implement WhatsApp SenderKey group text receive
the-code-learner Sep 21, 2026
98ab639
Test WhatsApp SenderKey group receive
the-code-learner Sep 21, 2026
812f682
Separate WhatsApp group stanza and encryption attributes
the-code-learner Sep 21, 2026
f94fc21
Refactor WhatsApp group SenderKey send pipeline
the-code-learner Sep 21, 2026
3e406ee
Implement WhatsApp SenderKey group media send
the-code-learner Sep 21, 2026
13bb006
Test WhatsApp SenderKey group media send
the-code-learner Sep 21, 2026
8d2dbaf
Wire Stored File scope into WhatsApp adapter
the-code-learner Sep 21, 2026
0cee8df
Pass canonical FileStore to WhatsApp service
the-code-learner Sep 21, 2026
c2361e7
Use canonical FileStore in WhatsApp runtime
the-code-learner Sep 21, 2026
2c4d58e
Decode WhatsApp media through DeviceSentMessage wrappers
the-code-learner Sep 21, 2026
4568902
Store inbound WhatsApp media in canonical FileStore
the-code-learner Sep 21, 2026
31f4bab
Test inbound WhatsApp group media Stored File handoff
the-code-learner Sep 21, 2026
2d101a3
Test WhatsApp canonical FileStore runtime wiring
the-code-learner Sep 21, 2026
6639a4e
Add local SVG QR renderer dependency for WhatsApp pairing
the-code-learner Sep 21, 2026
eac74e7
Require local WhatsApp QR renderer in release tests
the-code-learner Sep 21, 2026
0b43c25
Expand controlled WhatsApp acceptance to groups and inbound media
the-code-learner Sep 21, 2026
0ff1fe9
Require full direct group media controlled WhatsApp gate
the-code-learner Sep 21, 2026
8e38b94
Guard full controlled WhatsApp release gate in CI
the-code-learner Sep 21, 2026
b22e3cf
Clarify WhatsApp implementation versus acceptance status
the-code-learner Sep 21, 2026
490a80c
Expose WhatsApp implementation complete but unverified state
the-code-learner Sep 21, 2026
44f04c9
Document non-personal WhatsApp v9.9 release gate
the-code-learner Sep 21, 2026
d68e05b
Bound controlled WhatsApp observation window
the-code-learner Sep 21, 2026
cc8bf98
Test controlled WhatsApp release harness offline
the-code-learner Sep 21, 2026
0ce5b55
Fix controlled harness test module loading
the-code-learner Sep 21, 2026
570e08c
Gate stable v9.9.0 release on WhatsApp acceptance
the-code-learner Sep 21, 2026
114408d
Guard WhatsApp stable-release interlock in CI
the-code-learner Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .github/workflows/stable-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,23 @@ jobs:
version = Path('VERSION').read_text(encoding='utf-8').strip()
if not re.fullmatch(r'[0-9]+\.[0-9]+\.[0-9]+', version):
raise SystemExit(f'Invalid VERSION: {version!r}')
if version == '9.9.0':
runtime = Path('src/postmaster/whatsapp_runtime_v990.py').read_text(encoding='utf-8')
required_acceptance = (
'"protocol_interop_verified": True',
'"signal_multidevice_verified": True',
'"controlled_account_interop_verified": True',
)
missing_acceptance = [
item for item in required_acceptance if item not in runtime
]
if missing_acceptance:
raise SystemExit(
'Refusing stable v9.9.0 release without reviewed controlled-account '
f'WhatsApp acceptance flags: {missing_acceptance}'
)
print('WhatsApp v9.9.0 controlled-account acceptance flags verified.')

changelog = Path('CHANGELOG.md').read_text(encoding='utf-8')
match = re.search(
rf'^## {re.escape(version)} - .*?\n(?P<body>.*?)(?=^## |\Z)',
Expand Down
113 changes: 113 additions & 0 deletions .github/workflows/whatsapp-v990-controlled-interop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: WhatsApp v9.9 controlled account interop

on:
workflow_dispatch:
inputs:
require_inbound_echo:
description: Require controlled direct peer to echo the direct probe token
required: true
default: true
type: boolean
require_group_echo:
description: Require controlled peer to echo the group probe token
required: true
default: true
type: boolean
require_inbound_media:
description: Require controlled peer media in the test group and Stored File handoff
required: true
default: true
type: boolean
require_remote_receipt:
description: Require a remote delivery/read receipt for the direct probe text
required: true
default: true
type: boolean
run_media:
description: Exercise direct/group encrypted media upload and send
required: true
default: true
type: boolean
observe_timeout_seconds:
description: Seconds per controlled peer observation window (10-300)
required: true
default: '120'
type: string

permissions:
contents: read

concurrency:
group: whatsapp-v990-controlled-interop
cancel-in-progress: false

jobs:
controlled-account:
name: WhatsApp controlled-account full interoperability
runs-on: ubuntu-latest
timeout-minutes: 14
environment: whatsapp-v990-controlled
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install repository runtime dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

- name: Validate controlled-session secrets are configured
env:
AUTH_DB: ${{ secrets.POSTMASTER_WA_AUTH_DB_B64 }}
AUTH_KEY: ${{ secrets.POSTMASTER_WA_AUTH_KEY_B64 }}
TEST_JID: ${{ secrets.POSTMASTER_WA_TEST_JID }}
TEST_GROUP_JID: ${{ secrets.POSTMASTER_WA_TEST_GROUP_JID }}
run: |
test -n "$AUTH_DB" || { echo "POSTMASTER_WA_AUTH_DB_B64 is not configured in the whatsapp-v990-controlled environment"; exit 2; }
test -n "$AUTH_KEY" || { echo "POSTMASTER_WA_AUTH_KEY_B64 is not configured in the whatsapp-v990-controlled environment"; exit 2; }
test -n "$TEST_JID" || { echo "POSTMASTER_WA_TEST_JID is not configured in the whatsapp-v990-controlled environment"; exit 2; }
test -n "$TEST_GROUP_JID" || { echo "POSTMASTER_WA_TEST_GROUP_JID is not configured in the whatsapp-v990-controlled environment"; exit 2; }
echo "Controlled-session secrets are configured (values not printed)."

- name: Compile controlled interop harness
run: |
python -m compileall -q src/postmaster/whatsapp_v990 scripts/whatsapp_v990_controlled_interop.py

- name: Run controlled direct/group text/media/receipt/inbound interoperability
env:
PYTHONPATH: src
POSTMASTER_WA_AUTH_DB_B64: ${{ secrets.POSTMASTER_WA_AUTH_DB_B64 }}
POSTMASTER_WA_AUTH_KEY_B64: ${{ secrets.POSTMASTER_WA_AUTH_KEY_B64 }}
POSTMASTER_WA_TEST_JID: ${{ secrets.POSTMASTER_WA_TEST_JID }}
POSTMASTER_WA_TEST_GROUP_JID: ${{ secrets.POSTMASTER_WA_TEST_GROUP_JID }}
POSTMASTER_WA_REQUIRE_INBOUND_ECHO: ${{ inputs.require_inbound_echo }}
POSTMASTER_WA_REQUIRE_GROUP_ECHO: ${{ inputs.require_group_echo }}
POSTMASTER_WA_REQUIRE_INBOUND_MEDIA: ${{ inputs.require_inbound_media }}
POSTMASTER_WA_REQUIRE_REMOTE_RECEIPT: ${{ inputs.require_remote_receipt }}
POSTMASTER_WA_RUN_MEDIA: ${{ inputs.run_media }}
POSTMASTER_WA_OBSERVE_TIMEOUT_SECONDS: ${{ inputs.observe_timeout_seconds }}
POSTMASTER_WA_EVIDENCE_PATH: whatsapp-v990-controlled-evidence.json
run: python scripts/whatsapp_v990_controlled_interop.py

- name: Upload non-secret interoperability evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: whatsapp-v990-controlled-evidence
path: whatsapp-v990-controlled-evidence.json
if-no-files-found: ignore
retention-days: 1

- name: State acceptance boundary
if: always()
run: |
echo "This workflow never changes source acceptance flags automatically."
echo "A release-qualifying run must leave every full-profile input enabled and must end with"
echo "controlled_account_interop_observed=true in the non-secret evidence artifact."
echo "A successful run must be reviewed before protocol_interop_verified, signal_multidevice_verified,"
echo "or controlled_account_interop_verified can change in source."
echo "No QR refs, auth database bytes, auth key, JIDs, private keys, session secrets or media payloads"
echo "are written to the evidence artifact."
219 changes: 219 additions & 0 deletions .github/workflows/whatsapp-v990-offline-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
name: WhatsApp v9.9 offline validation

on:
pull_request:
branches:
- main
paths:
- 'src/postmaster/whatsapp_v990/**'
- 'src/postmaster/whatsapp_runtime_v990.py'
- 'src/postmaster/webgui_whatsapp_v990.py'
- 'tests/test_whatsapp_*_v990.py'
- 'scripts/whatsapp_v990_network_smoke.py'
- 'scripts/whatsapp_v990_noise_server_hello_probe.py'
- 'scripts/whatsapp_v990_noise_registration_probe.py'
- 'scripts/whatsapp_v990_pair_device_probe.py'
- 'scripts/whatsapp_v990_controlled_interop.py'
- '.github/workflows/whatsapp-v990-offline-validation.yml'
- '.github/workflows/whatsapp-v990-controlled-interop.yml'
- '.github/workflows/stable-release.yml'
workflow_dispatch:

permissions:
contents: read

concurrency:
group: whatsapp-v990-offline-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
offline-protocol:
name: WhatsApp v9.9 offline protocol/runtime
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install repository runtime dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

- name: Compile WhatsApp candidate
run: |
python -m compileall -q \
src/postmaster/whatsapp_v990 \
src/postmaster/whatsapp_runtime_v990.py \
src/postmaster/webgui_whatsapp_v990.py \
scripts/whatsapp_v990_controlled_interop.py \
tests

- name: Run WhatsApp offline regression suite
env:
PYTHONPATH: src
run: |
python -W error::ResourceWarning -m unittest discover -s tests -p 'test_whatsapp_*_v990.py' -v

- name: Guard controlled-account release boundary
run: |
python - <<'PY'
from pathlib import Path

runtime = Path('src/postmaster/whatsapp_runtime_v990.py').read_text(encoding='utf-8')
harness = Path('scripts/whatsapp_v990_controlled_interop.py').read_text(encoding='utf-8')
workflow = Path('.github/workflows/whatsapp-v990-controlled-interop.yml').read_text(encoding='utf-8')
stable_release = Path('.github/workflows/stable-release.yml').read_text(encoding='utf-8')

expected_false = (
'"protocol_interop_verified": False',
'"signal_multidevice_verified": False',
'"controlled_account_interop_verified": False',
)
missing = [item for item in expected_false if item not in runtime]
assert not missing, (
'Live acceptance flags must stay false until controlled-account evidence exists: '
f'{missing}'
)

required_harness_checks = (
'POSTMASTER_WA_TEST_GROUP_JID',
'group_sender_key_interop_observed',
'media_interop_observed',
'receipt_policy_observed',
'inbound_group_media_stored_file_observed',
'controlled_account_interop_observed',
)
missing = [item for item in required_harness_checks if item not in harness]
assert not missing, f'Controlled interop harness lost release-critical checks: {missing}'

required_workflow_checks = (
'environment: whatsapp-v990-controlled',
'POSTMASTER_WA_TEST_GROUP_JID',
'require_group_echo',
'require_inbound_media',
'controlled_account_interop_observed=true',
)
missing = [item for item in required_workflow_checks if item not in workflow]
assert not missing, f'Controlled interop workflow lost release-critical gates: {missing}'

release_interlock = (
"version == '9.9.0'",
'"protocol_interop_verified": True',
'"signal_multidevice_verified": True',
'"controlled_account_interop_verified": True',
'Refusing stable v9.9.0 release',
)
missing = [item for item in release_interlock if item not in stable_release]
assert not missing, f'Stable-release WhatsApp interlock is incomplete: {missing}'

print(
'Offline validation passed; implementation can advance without an account, '
'but stable acceptance remains controlled-account gated.'
)
PY

network-transport-smoke:
name: WhatsApp WebSocket unauthenticated transport smoke
runs-on: ubuntu-latest
timeout-minutes: 2
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Probe current WhatsApp WebSocket endpoint
run: python scripts/whatsapp_v990_network_smoke.py

- name: State acceptance boundary
if: always()
run: |
echo "This job validates only DNS/TCP/TLS/RFC6455 reachability."
echo "It does not validate QR pairing, Noise authentication, Signal multi-device, account interoperability, messages, media, groups, or receipts."

live-noise-server-hello:
name: WhatsApp live Noise ServerHello probe
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install repository crypto runtime and CI-only WebSocket driver
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install 'websockets>=15,<16'

- name: Decrypt live Noise ServerHello and verify certificate chain
env:
PYTHONPATH: src
run: python scripts/whatsapp_v990_noise_server_hello_probe.py

- name: State acceptance boundary
if: always()
run: |
echo "This job stops before ClientFinish/ClientPayload."
echo "No QR/account/device credentials or authenticated WhatsApp actions are exercised."
echo "Passing does not set protocol_interop_verified, signal_multidevice_verified, or controlled_account_interop_verified."

live-registration-pair-device:
name: WhatsApp live ClientFinish and pair-device probe
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install repository runtime dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

- name: Complete throw-away registration and receive encrypted pair-device
env:
PYTHONPATH: src
run: python scripts/whatsapp_v990_pair_device_probe.py

- name: State acceptance boundary
if: always()
run: |
echo "This job validates ClientFinish, current ClientPayload, encrypted transport and WABinary pair-device refs."
echo "QR refs are never printed or persisted and no account is paired."
echo "Passing still does not set signal_multidevice_verified or controlled_account_interop_verified."


live-noise-client-finish:
name: WhatsApp live Noise ClientFinish registration probe
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install repository crypto runtime and CI-only WebSocket driver
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install 'websockets>=15,<16'

- name: Send live ClientFinish and authenticate first transport response
env:
PYTHONPATH: src
run: python scripts/whatsapp_v990_noise_registration_probe.py

- name: State acceptance boundary
if: always()
run: |
echo "This job uses fresh one-run Noise/Signal registration material and stops before QR scan/account pairing."
echo "Passing validates ClientFinish/registration transport compatibility only."
echo "It does not set protocol_interop_verified, signal_multidevice_verified, or controlled_account_interop_verified."
Loading
Loading