S00-003: Evaluate Stanza with verified SCRAM and bounded WSS ingress
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 библиотеку
This commit is contained in:
1 parent
e08c0ab590
commit
51a414d386
28 files changed
+6709
-32
No files matched your search
@@ -0,0 +1,4 @@
|
||||
Evaluate Stanza with verified SCRAM and bounded WSS ingress
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,129 @@
|
||||
# S00-003 executor evidence
|
||||
|
||||
Agent: auto-protocol-f474114f0168 (protocol), 2026-10-15.
|
||||
Result: proposed Stanza selection with combined runnable spike; independent QA pending.
|
||||
|
||||
Input: master/AGENTS/README/common/protocol; profile, architecture, contracts,
|
||||
workflow, automation, Git, required TESTING and decisions registry; assigned
|
||||
resume/show/card/context packet, previous blocked handoff; exact immutable
|
||||
ACC-004/NET-003/NET-004; accepted scope/stack/SASL/parser/SHA512 ADRs, direct
|
||||
prerequisite evidence and handoffs, remediation independent reviews including
|
||||
S00-020; shipped vendor API/source. No missing input or unresolved blocker.
|
||||
No repeat claim, agent launch, other task execution or Git mutation.
|
||||
|
||||
One output: proposed docs/decisions/0002-xmpp-library.md and isolated
|
||||
experiments/0002-xmpp-library/selection-spike. Source scope unchanged elsewhere;
|
||||
workflow evidence/handoff/message are metadata. Original parent manifest/lock,
|
||||
accepted experiments/ADRs, shared contracts and spec snapshots unchanged.
|
||||
Initial git status showed only coordinator state/tasks.json claim modification.
|
||||
|
||||
## Actual commands and results
|
||||
|
||||
All npm/node commands used PATH=/tmp/luma-S00-026-j1pmys7w/node-v24.21.0-linux-x64/bin:$PATH
|
||||
from project root (authentic Linux runtime independently accepted by S00-020).
|
||||
|
||||
- python3 scripts/tasks.py resume --agent auto-protocol-f474114f0168 and
|
||||
python3 scripts/tasks.py show S00-003: exit 0 each; assigned in_progress.
|
||||
python3 scripts/tasks.py packet S00-003 --agent auto-protocol-f474114f0168:
|
||||
exit 0, exact packet retrieved again before handoff.
|
||||
- node --version / npm --version: exit 0 each, v24.21.0 / 11.19.0.
|
||||
- npm install --prefix experiments/0002-xmpp-library/selection-spike
|
||||
--ignore-scripts --no-audit --no-fund --strict-ssl=true --engine-strict=true
|
||||
--fetch-retries=0 --fetch-timeout=15000 --cache /tmp/luma-selection-cache:
|
||||
exit 0, 26 packages, independent lock generated. No upgrade notice acted on.
|
||||
- Initial npm test: exit 1, 3/17 passed. Fixture incorrectly supplied endpoint
|
||||
as {url:...}; shipped Client.connect requires string. Corrected only test
|
||||
config; rerun exit 0, 17/17. This was a harness error, not missing WSS support.
|
||||
- Extension test development npm test: exit 1, 21/23 passed. Guessed upload field
|
||||
was wrong (actual public shape httpUpload.download); raw imported MAM export
|
||||
exposed duplicated body projection. Inspected shipped mapping and diagnostic
|
||||
import/export, corrected field assertion and made explicit fixture export
|
||||
projection. Rerun exit 0, 23/23. Added permanent raw duplicate regression;
|
||||
finding and future adapter obligation retained in ADR, not hidden as a pass.
|
||||
- Copied unchanged reviewed SHA512 backend/feature-dispatcher regressions into
|
||||
this independent package; npm test exit 0, 110 passed. No crypto reimplementation.
|
||||
- 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-S00-003-clean-f474114f0168:
|
||||
exit 0, new empty cache, 26 installed packages. Lock retained; scripts disabled.
|
||||
- Final npm test --prefix experiments/0002-xmpp-library/selection-spike
|
||||
> /tmp/luma-S00-003-final-tests.log 2>&1: exit 0 after clean install;
|
||||
build 171 modules, browser.mjs 695.84 kB / gzip 141.63 kB;
|
||||
112 passed, zero failures/skips/cancellations, duration 3121.874019 ms.
|
||||
Final two checks add plaintext-endpoint rejection and explicit raw-export
|
||||
regression. No plugin/transport/crypto source changes after clean install.
|
||||
- python3 experiments/0002-xmpp-library/selection-spike/check-dependencies.py:
|
||||
exit 0 before and after clean install; 51 lock entries, 26 installed exact
|
||||
pins/notices, HTTPS registry/SHA512 integrity, all 340 Stanza files match
|
||||
independently installed environment-access vendor graph; reviewed parser,
|
||||
SHA512 alias and saxes license byte-identical. Browser module graph verified.
|
||||
- make check > /tmp/luma-S00-003-check.log 2>&1: exit 0; 296 tasks / 22 stages,
|
||||
221 requirements, 211 allocated Web requirements; 72 tooling tests in 18.819s.
|
||||
Foundation checks only, not application readiness.
|
||||
- git diff --check: exit 0. Final source scope and authored whitespace checked
|
||||
separately including untracked files; final result recorded below.
|
||||
|
||||
## Demonstrated result and evidence boundaries
|
||||
|
||||
Real loopback HTTPS + ws fixture peer, ephemeral OpenSSL localhost certificate,
|
||||
explicit per-fixture CA trust and rejectUnauthorized:true. Actual TLS hostname
|
||||
validation remains; native WebSocket without fixture CA rejects that certificate.
|
||||
No system trust/network/proxy change, disabled TLS, CORS bypass or real provider.
|
||||
Plain ws endpoint rejects before socket construction. Private keys exist only
|
||||
in temporary test directory and are deleted by test cleanup; no committed key.
|
||||
|
||||
Tests import actual browser-built Client, Registry, SCRAM and bounded transport.
|
||||
Client.connect/queue/feature dispatcher run unchanged. Peer observes TLS and xmpp
|
||||
subprotocol, framing open, exact fixed proof and restart only after verified
|
||||
final. Mixed offers choose SHA512, then SHA256, then SHA1 as available. Public
|
||||
RFC SHA1/256 and independently accepted Scramp SHA512 transcript fixtures are
|
||||
compared exactly. Forged/premature final never succeeds or restarts. PLUS-only,
|
||||
PLAIN-only and empty offers fail; diagnostics report binding unavailable and
|
||||
fallback disabled. Existing regression rejects synthetic tlsUnique, verifies
|
||||
n,,/c=biws, reset/order/send races and lack of persisted derived cache.
|
||||
|
||||
WSS oversized/incomplete messages close before any stanza delivery; pre-import
|
||||
checks also reject depth, multiple roots, DTD and binary types. Full resource
|
||||
and stale-callback evidence remains in byte-identical accepted parser source and
|
||||
S00-018 tests; those standalone suites were not separately rerun here.
|
||||
Registry import/export fixtures preserve MAM IDs, MUC join, Jingle session ID,
|
||||
upload URL, legacy opaque bytes and invented plugin namespace isolation.
|
||||
Raw dual-body export duplication is deliberately reproduced, with explicit
|
||||
single-representation export for the MAM fixture. This is an API mapping limit
|
||||
for future adapters, not an unreviewed shared-interface change.
|
||||
|
||||
## Digests and limitations
|
||||
|
||||
SHA256:
|
||||
- package-lock.json: 02bb48038b194b72efc688752927815e3de94bf589bfe1d2e5bcee68283c4abc
|
||||
- validated-sasl.mjs: 42a7e751565c27b45eee371852973d3613d26981586b48271d78586141466d61
|
||||
- dist/browser.mjs: b95b0ba5c2fbf5d52b5b1e62c40f6b4d5669d22499cbfef0fe3d88b6bf708cee
|
||||
|
||||
Primary sources opened through web tools on 2026-10-15: RFC7395, RFC5802,
|
||||
Stanza and xmpp.js upstream, XEP0313/0045/0166/0363. Exact shipped pinned source
|
||||
supplies authoritative API/version behavior. Candidate comparison is documentary
|
||||
for xmpp.js, not installed/tested equivalence. Dated source links are in ADR.
|
||||
License inventory includes optional hosts; installed notices include Stanza
|
||||
ancestry, preserved saxes upstream license and unmodified MPL build dependencies.
|
||||
No advisory/provenance clearance claimed.
|
||||
|
||||
No actual browser runtime, independent full XMPP server/client, OMEMO encryption,
|
||||
OMEMO2 wire validation, product support matrix, load/timing/security audit or
|
||||
release readiness. Browser artifact executes in Node with native host APIs and
|
||||
an injected trusted fixture socket; no browser channel binding is available.
|
||||
Strict SCRAM profile, no timeout, synchronous derivation/string verifier equality,
|
||||
local ingress limits, incomplete stream lifecycle and unbounded aggregate queues
|
||||
remain disclosed in ADR. Public extension seam is verified, future API stability
|
||||
is not promised. No real accounts/conversations/secrets or fake crypto used.
|
||||
|
||||
QA should inspect source/diff/message, repeat README with fresh cache and pinned
|
||||
runtime, verify dependency graph/notices/unchanged vendor and limitations, then
|
||||
record an independent review decision. Executor submits and stops; coordinator
|
||||
commits before review. Proposed ADR is not independently accepted yet.
|
||||
|
||||
Final verification: first inline whitespace assertion failed on verbatim
|
||||
THIRD_PARTY_NOTICES.md upstream trailing spaces; it was not an implementation
|
||||
failure and notices were preserved unchanged. Corrected inspection exempts
|
||||
verbatim notices/license texts: exit 0, all changed paths within task scope or
|
||||
allowed metadata, authored final-newline/trailing-whitespace checks passed.
|
||||
git diff --check exited 0. No failed check is described as passed.
|
||||
+33
-22
@@ -1,27 +1,38 @@
|
||||
# S00-003 blocked handoff
|
||||
# S00-003 handoff for independent QA review
|
||||
|
||||
Executor: auto-protocol-59f4d359b339, protocol, 2026-10-15.
|
||||
Outcome remains library selection with WSS/auth/parser/extension spike.
|
||||
Executor: auto-protocol-f474114f0168 (protocol), 2026-10-15.
|
||||
No blocker. Proposed Stanza 12.22.1 selection and combined isolated spike at
|
||||
experiments/0002-xmpp-library/selection-spike; ADR docs/decisions/0002-xmpp-library.md.
|
||||
|
||||
Accepted prerequisites S00-001/002/017/018/019 were read. The SHA-512 public
|
||||
mechanism composition is now independently accepted; the earlier crypto blocker
|
||||
is resolved. Their suites were not rerun in this environment. Parent candidate
|
||||
remains unselected and selection ADR absent.
|
||||
Actual result: clean-cache locked install on accepted Linux Node24.21.0/npm11.19.0,
|
||||
browser bundle and 112 tests pass. Real synthetic loopback WSS TLS/xmpp handshake,
|
||||
fixed SCRAM512/256/1 proofs/finals/restart, strongest compatible non-PLUS policy,
|
||||
PLUS/plaintext rejection, untrusted certificate/plain endpoint rejection,
|
||||
bounded XML over WSS and registry extension checks. 51 locked/26 installed
|
||||
package checks and notices, 340 unmodified vendor files, reviewed parser/SHA512
|
||||
source reuse verified. make check: 72 tooling tests passed, exit 0.
|
||||
Evidence: state/evidence/S00-003-auto-protocol-f474114f0168.md.
|
||||
|
||||
Current blocker: accepted Node 24.21.0/npm 11.19.0 and installed Stanza are not
|
||||
available in this Linux session (host tools 24.1.0/11.3.0; parent node_modules
|
||||
absent). Official checksum retrieval over configured HTTPS fails with curl exit
|
||||
5, unresolved proxy. See state/evidence/S00-003-auto-protocol-59f4d359b339.md for exact reproduction.
|
||||
QA next: inspect actual diff/executor message, proposed ADR and README. Repeat
|
||||
clean npm ci with a new cache, npm test, check-dependencies.py and relevant
|
||||
foundation check using reviewed runtime currently at
|
||||
/tmp/luma-S00-026-j1pmys7w/node-v24.21.0-linux-x64/bin.
|
||||
Temporary tools may expire; environment-access probe can recreate authentic
|
||||
runtime/vendor comparison graph. Do not change accepted pins or security policy.
|
||||
Verify browser graph, public seams, fail-closed effects, notices and limitations.
|
||||
|
||||
Next input: external environment owner must restore approved HTTPS access to
|
||||
nodejs.org and registry.npmjs.org or provide authentic, checksum/integrity-
|
||||
verifiable pinned Linux toolchain and locked package artifacts through an
|
||||
approved local path. Do not change stack pins, bypass proxy policy/TLS, fabricate
|
||||
engine metadata or reuse a macOS binary. Fresh remediation executor must verify
|
||||
exact runtime and lock installation, with independent review before parent
|
||||
returns to a new executor. Supply no credentials in committed evidence.
|
||||
Raw imported messages carry selected body plus language bodies; passing both to
|
||||
export duplicates text in this version. Permanent regression records it. MAM
|
||||
fixture explicitly exports the language collection only; future adapters must
|
||||
construct outbound shapes. Upload's actual field is httpUpload.download.
|
||||
Initial harness failures and corrections are recorded, not counted as passed.
|
||||
|
||||
No source changes or installs/build/tests/browser/WSS execution occurred. Browser
|
||||
binaries are present but not exercised. No make check, complete SASL policy,
|
||||
extension roundtrip, independent interoperability or selection claimed.
|
||||
Reporter exits after escalation; no resolver work, unblock or new agent launch.
|
||||
Limits: browser-built backend runs in Node, no actual browser or independent
|
||||
full XMPP server/client; scripted peer uses accepted fixed transcripts. No OMEMO
|
||||
crypto/OMEMO2 wire validation, full XEP semantics or release readiness. Fixture
|
||||
certificate trusted only through injected socket with validation enabled; no
|
||||
system trust changes/keys committed. No real binding/fallback. Inherited strict
|
||||
SCRAM layout/timeout/timing, minimal transport/lifecycle and aggregate queue
|
||||
limits remain. Source changes are only current task paths plus workflow metadata.
|
||||
ADR stays proposed until separate QA acceptance. Coordinator alone commits and
|
||||
launches new process; executor exits immediately after submit.
|
||||
+30
-6
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"revision": 112,
|
||||
"revision": 114,
|
||||
"tasks": {
|
||||
"S00-001": {
|
||||
"status": "done",
|
||||
@@ -32,17 +32,18 @@
|
||||
"completed_at": "2026-10-14T19:06:23+00:00"
|
||||
},
|
||||
"S00-003": {
|
||||
"status": "todo",
|
||||
"owner": null,
|
||||
"started_at": "2026-10-15T04:12:38+00:00",
|
||||
"status": "review",
|
||||
"owner": "auto-protocol-f474114f0168",
|
||||
"started_at": "2026-10-15T11:10:08+00:00",
|
||||
"reason": null,
|
||||
"updated_at": "2026-10-15T10:09:24+00:00",
|
||||
"updated_at": "2026-10-15T11:19:59+00:00",
|
||||
"blocked_by": [],
|
||||
"resume_status": "in_progress",
|
||||
"blocker_report": "state/blockers/S00-020.md",
|
||||
"handoff": "state/handoffs/S00-003.md",
|
||||
"previous_owner": "auto-protocol-59f4d359b339",
|
||||
"resumed_after_blocker": true
|
||||
"resumed_after_blocker": true,
|
||||
"evidence": "state/evidence/S00-003-auto-protocol-f474114f0168.md"
|
||||
},
|
||||
"S00-004": {
|
||||
"status": "blocked",
|
||||
@@ -2901,6 +2902,29 @@
|
||||
"to": "done",
|
||||
"reason": null,
|
||||
"evidence": "state/evidence/S00-023-review.md"
|
||||
},
|
||||
{
|
||||
"revision": 113,
|
||||
"at": "2026-10-15T11:10:08+00:00",
|
||||
"action": "claim",
|
||||
"task": "S00-003",
|
||||
"agent": "auto-protocol-f474114f0168",
|
||||
"role": "protocol",
|
||||
"from": "todo",
|
||||
"to": "in_progress",
|
||||
"reason": null
|
||||
},
|
||||
{
|
||||
"revision": 114,
|
||||
"at": "2026-10-15T11:19:59+00:00",
|
||||
"action": "submit",
|
||||
"task": "S00-003",
|
||||
"agent": "auto-protocol-f474114f0168",
|
||||
"role": null,
|
||||
"from": "in_progress",
|
||||
"to": "review",
|
||||
"reason": null,
|
||||
"evidence": "state/evidence/S00-003-auto-protocol-f474114f0168.md"
|
||||
}
|
||||
],
|
||||
"retired_agents": [
|
||||
|
||||
Reference in new issue
Block a user