Changes: Propose the pinned XMPP library decision and add an isolated browser-built selection spike combining reviewed public SASL, SHA-512 and parser seams. Exercise TLS/xmpp handshake, strongest compatible non-PLUS authentication, rejected unsafe paths and extension mappings; document duplicate-body export projection and remaining limits. Preserve dependency notices, evidence and QA handoff. Validation: Clean-cache pinned npm ci succeeded; npm test passed 112 checks; check-dependencies.py verified 51 locked entries, 26 installed packages and 340 unchanged vendor files; make check passed 72 tooling tests. No actual browser runtime, independent full XMPP server/client or production encryption/release readiness claim. Task: S00-003 Agent: auto-protocol-f474114f0168 Role: protocol Action: claim Status: review Task title: Проверить XMPP WSS/auth библиотеку
52 lines
3.0 KiB
Markdown
52 lines
3.0 KiB
Markdown
# S00-003 combined XMPP selection spike
|
|
|
|
One isolated experiment; no application adapter or production provider. See
|
|
`docs/decisions/0002-xmpp-library.md` for selection rationale and limits.
|
|
|
|
Use the authentic pinned Node 24.21.0 / npm 11.19.0 from S00-020. On this host its
|
|
reviewed temporary bin path was `/tmp/luma-S00-026-j1pmys7w/node-v24.21.0-linux-x64/bin`;
|
|
paths may expire. Recreate via the reviewed environment-access probe if needed.
|
|
Keep its verified runtime directory first in PATH. OpenSSL must be available.
|
|
No system install, trust-store change or secret is needed.
|
|
|
|
From project root, with the pinned runtime in PATH:
|
|
|
|
```sh
|
|
node --version
|
|
npm --version
|
|
npm ci --prefix experiments/0002-xmpp-library/selection-spike --ignore-scripts --no-audit --no-fund --engine-strict=true --strict-ssl=true --fetch-retries=0 --fetch-timeout=15000 --cache /tmp/luma-selection-independent-clean
|
|
npm test --prefix experiments/0002-xmpp-library/selection-spike
|
|
python3 experiments/0002-xmpp-library/selection-spike/check-dependencies.py
|
|
make check
|
|
```
|
|
|
|
Use a new empty cache for independent clean-install evidence. The checker compares
|
|
vendor bytes against the reviewed `environment-access/node_modules/stanza` graph;
|
|
that graph must exist (its verify.py recreates it without altering parent inputs).
|
|
No application code or accepted prerequisite source is changed by these commands.
|
|
`dist` and node_modules are ignored build artifacts. npm test explicitly invokes
|
|
Vite even though install lifecycle scripts are disabled. Lock updates need review.
|
|
|
|
Tests run the Vite browser artifact in Node. Reused S00-019 regression tests cover
|
|
known HMAC vectors, public alias, real feature dispatcher, forged/out-of-order
|
|
finals, reset, pending sends, synthetic binding rejection and no derived cache.
|
|
WSS tests use a fresh ephemeral localhost certificate/key under /tmp, explicitly
|
|
trusted only by the test socket; rejectUnauthorized stays true. A native socket
|
|
without that trust must reject it. No certificate/key is committed. The peer
|
|
checks fixed public RFC or accepted independent Scramp transcripts; it is a
|
|
scripted fixture, not an independent full XMPP implementation. Synthetic fixture
|
|
credentials are public/invented data only, never read from the environment.
|
|
|
|
Bounded ingress and SHA-512 composition are byte-identical reviewed copies.
|
|
Only the copied ordering guard extends allowed non-PLUS mechanisms to 512/256/1
|
|
and emits safe policy diagnostics. No fallback is enabled. Browser TLS data is
|
|
unavailable and never synthesized. Registry tests cover basic MAM/MUC/Jingle/
|
|
upload/legacy opaque OMEMO plus an invented extension namespace, not encrypted
|
|
interoperability or OMEMO2 wire compliance. They explicitly select the language
|
|
collection on export because echoing both library body projections duplicates text;
|
|
a separate stock-behavior regression preserves that finding.
|
|
|
|
No real browser/server/client interoperability, load bound, constant-time audit,
|
|
full XEP coverage or product readiness result is implied. All inherited limits
|
|
remain in the ADR. Changes are subject to independent QA review.
|