S00-003: Record blocked task and remediation handoff

Changes: Preserve incomplete work and blocker metadata for S00-003. This checkpoint does not mark implementation accepted.
Validation: Session ended with status blocked.
Blocker: Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.

Task: S00-003
Agent: auto-protocol-dcdf92cd067e
Role: protocol
Action: claim
Status: blocked

Task title: Проверить XMPP WSS/auth библиотеку
This commit is contained in:
wt committed 2026-10-15 02:38:42 +07:00
1 parent 74e1fd87d9
commit e69372c6db
13 files changed
+339 -27

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@
Зафиксировать Web scope, browser targets и проверенные кандидаты, не устанавливая непроверенный framework по догадке.
Задач: 18; entry: нет; exit: S00-010.
Задач: 19; entry: нет; exit: S00-010.
## [S01: Предметные контракты](stages/S01.md)
+3 -2
View File
@@ -1,12 +1,12 @@
# Матрица задач
Generated; state revision **46**. Canonical status: state/tasks.json.
Generated; state revision **48**. Canonical status: state/tasks.json.
| ID | Этап | Оператор | Reviewer | Статус | Owner | Зависимости | Задача |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [S00-001](tasks/S00-001.md) | S00 | orchestrator | security | done | auto-orchestrator-48aab142ecde | | Утвердить Web-профиль |
| [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | done | auto-orchestrator-68a05c587e33 | S00-001, S00-011, S00-012 | Выбрать framework и build runtime |
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | todo | | S00-001, S00-002, S00-017, S00-018 | Проверить XMPP WSS/auth библиотеку |
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | blocked | auto-protocol-dcdf92cd067e | S00-001, S00-002, S00-017, S00-018, S00-019 | Проверить XMPP WSS/auth библиотеку |
| [S00-004](tasks/S00-004.md) | S00 | crypto | security | todo | | S00-001, S00-002 | Проверить browser OMEMO backend |
| [S00-005](tasks/S00-005.md) | S00 | storage | qa | todo | | S00-002 | Выбрать IndexedDB wrapper и migration policy |
| [S00-006](tasks/S00-006.md) | S00 | orchestrator | security | todo | | S00-002 | Зафиксировать browser/reference matrix |
@@ -21,6 +21,7 @@ Generated; state revision **46**. Canonical status: state/tasks.json.
| [S00-016](tasks/S00-016.md) | S00 | ci-cd | qa | done | auto-ci-cd-351a0cbbabef | S00-001, S00-011, S00-013, S00-014 | Restore reviewer model availability after provider capacity failure |
| [S00-017](tasks/S00-017.md) | S00 | protocol | security | done | auto-protocol-599343cd9e3f | S00-001, S00-002 | Establish fail-closed SCRAM server-final validation |
| [S00-018](tasks/S00-018.md) | S00 | protocol | security | done | auto-protocol-89fe6563092c | S00-001, S00-002, S00-017 | Validate bounded standalone XML ingress for the XMPP candidate |
| [S00-019](tasks/S00-019.md) | S00 | crypto | security | todo | | S00-001, S00-002, S00-017, S00-018 | Validate browser-compatible SCRAM-SHA-512 through a public mechanism API |
| [S00-010](tasks/S00-010.md) | S00 | qa | orchestrator | todo | | S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009 | Gate: Профиль и проверка стека |
| [S01-001](tasks/S01-001.md) | S01 | orchestrator | security | todo | | S00-010 | Описать identity/model contracts |
| [S01-002](tasks/S01-002.md) | S01 | orchestrator | security | todo | | S00-010, S01-001 | Описать async account context |
+3 -3
View File
@@ -14,7 +14,7 @@ Allocated означает наличие плана/приёмки, а не р
| ACC-001 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-003, S21-001 |
| ACC-002 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-001, S21-001 |
| ACC-003 | out_of_scope | Native host/port TCP configuration; Web uses ACC-004 WSS. | |
| ACC-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-001, S06-003, S21-001 |
| ACC-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-001, S06-003, S21-001 |
| ACC-005 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-001, S06-011, S21-001 |
| ACC-006 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-003, S06-004, S21-001 |
| ACC-007 | web | Web requirement; cross-platform clauses apply only in Web context. | S06-002, S06-009, S20-008, S21-001 |
@@ -27,8 +27,8 @@ Allocated означает наличие плана/приёмки, а не р
| ACC-014 | web | Web requirement; cross-platform clauses apply only in Web context. | S01-002, S02-010, S06-006, S06-010, S21-001 |
| NET-001 | web | Web requirement; cross-platform clauses apply only in Web context. | S02-008, S05-001, S05-002, S05-009, S21-001 |
| NET-002 | out_of_scope | Native transport discovery; Web WSS addressed by ACC-004/NET-001. | |
| NET-003 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-003, S21-001 |
| NET-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S05-003, S05-009, S21-001 |
| NET-003 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-003, S21-001 |
| NET-004 | web | Web requirement; cross-platform clauses apply only in Web context. | S00-003, S00-017, S00-018, S00-019, S05-003, S05-009, S21-001 |
| NET-005 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-004, S21-001 |
| NET-006 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-002, S05-010, S06-004, S20-002, S21-001 |
| NET-007 | web | Web requirement; cross-platform clauses apply only in Web context. | S05-007, S21-001 |
+2 -1
View File
@@ -8,7 +8,7 @@
- [S00-001](../tasks/S00-001.md): Утвердить Web-профиль — orchestrator; done.
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; done.
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; todo.
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; blocked.
- [S00-004](../tasks/S00-004.md): Проверить browser OMEMO backend — crypto; todo.
- [S00-005](../tasks/S00-005.md): Выбрать IndexedDB wrapper и migration policy — storage; todo.
- [S00-006](../tasks/S00-006.md): Зафиксировать browser/reference matrix — orchestrator; todo.
@@ -23,6 +23,7 @@
- [S00-016](../tasks/S00-016.md): Restore reviewer model availability after provider capacity failure — ci-cd; done.
- [S00-017](../tasks/S00-017.md): Establish fail-closed SCRAM server-final validation — protocol; done.
- [S00-018](../tasks/S00-018.md): Validate bounded standalone XML ingress for the XMPP candidate — protocol; done.
- [S00-019](../tasks/S00-019.md): Validate browser-compatible SCRAM-SHA-512 through a public mechanism API — crypto; todo.
- [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo.
## Граница этапа
+2 -1
View File
@@ -1,7 +1,7 @@
id,stage,operator,reviewer,status,owner,depends_on,title
S00-001,S00,orchestrator,security,done,auto-orchestrator-48aab142ecde,,Утвердить Web-профиль
S00-002,S00,orchestrator,security,done,auto-orchestrator-68a05c587e33,"S00-001, S00-011, S00-012",Выбрать framework и build runtime
S00-003,S00,protocol,qa,todo,,"S00-001, S00-002, S00-017, S00-018",Проверить XMPP WSS/auth библиотеку
S00-003,S00,protocol,qa,blocked,auto-protocol-dcdf92cd067e,"S00-001, S00-002, S00-017, S00-018, S00-019",Проверить XMPP WSS/auth библиотеку
S00-004,S00,crypto,security,todo,,"S00-001, S00-002",Проверить browser OMEMO backend
S00-005,S00,storage,qa,todo,,S00-002,Выбрать IndexedDB wrapper и migration policy
S00-006,S00,orchestrator,security,todo,,S00-002,Зафиксировать browser/reference matrix
@@ -16,6 +16,7 @@ S00-015,S00,ci-cd,qa,done,auto-ci-cd-84e209103f24,"S00-001, S00-011, S00-013, S0
S00-016,S00,ci-cd,qa,done,auto-ci-cd-351a0cbbabef,"S00-001, S00-011, S00-013, S00-014",Restore reviewer model availability after provider capacity failure
S00-017,S00,protocol,security,done,auto-protocol-599343cd9e3f,"S00-001, S00-002",Establish fail-closed SCRAM server-final validation
S00-018,S00,protocol,security,done,auto-protocol-89fe6563092c,"S00-001, S00-002, S00-017",Validate bounded standalone XML ingress for the XMPP candidate
S00-019,S00,crypto,security,todo,,"S00-001, S00-002, S00-017, S00-018",Validate browser-compatible SCRAM-SHA-512 through a public mechanism API
S00-010,S00,qa,orchestrator,todo,,"S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009",Gate: Профиль и проверка стека
S01-001,S01,orchestrator,security,todo,,S00-010,Описать identity/model contracts
S01-002,S01,orchestrator,security,todo,,"S00-010, S01-001",Описать async account context
1 id stage operator reviewer status owner depends_on title
2 S00-001 S00 orchestrator security done auto-orchestrator-48aab142ecde Утвердить Web-профиль
3 S00-002 S00 orchestrator security done auto-orchestrator-68a05c587e33 S00-001, S00-011, S00-012 Выбрать framework и build runtime
4 S00-003 S00 protocol qa todo blocked auto-protocol-dcdf92cd067e S00-001, S00-002, S00-017, S00-018 S00-001, S00-002, S00-017, S00-018, S00-019 Проверить XMPP WSS/auth библиотеку
5 S00-004 S00 crypto security todo S00-001, S00-002 Проверить browser OMEMO backend
6 S00-005 S00 storage qa todo S00-002 Выбрать IndexedDB wrapper и migration policy
7 S00-006 S00 orchestrator security todo S00-002 Зафиксировать browser/reference matrix
16 S00-016 S00 ci-cd qa done auto-ci-cd-351a0cbbabef S00-001, S00-011, S00-013, S00-014 Restore reviewer model availability after provider capacity failure
17 S00-017 S00 protocol security done auto-protocol-599343cd9e3f S00-001, S00-002 Establish fail-closed SCRAM server-final validation
18 S00-018 S00 protocol security done auto-protocol-89fe6563092c S00-001, S00-002, S00-017 Validate bounded standalone XML ingress for the XMPP candidate
19 S00-019 S00 crypto security todo S00-001, S00-002, S00-017, S00-018 Validate browser-compatible SCRAM-SHA-512 through a public mechanism API
20 S00-010 S00 qa orchestrator todo S00-001, S00-002, S00-003, S00-004, S00-005, S00-006, S00-007, S00-008, S00-009 Gate: Профиль и проверка стека
21 S01-001 S01 orchestrator security todo S00-010 Описать identity/model contracts
22 S01-002 S01 orchestrator security todo S00-010, S01-001 Описать async account context
+61 -1
View File
@@ -269,7 +269,8 @@
"S00-001",
"S00-002",
"S00-017",
"S00-018"
"S00-018",
"S00-019"
],
"requirements": [
"ACC-004",
@@ -1055,6 +1056,65 @@
],
"context_budget_chars": 48000
},
{
"id": "S00-019",
"stage": "S00",
"kind": "blocker",
"root_task": "S00-003",
"blocker_depth": 1,
"unblocks": [
"S00-003"
],
"role": "crypto",
"reviewer_role": "security",
"title": "Validate browser-compatible SCRAM-SHA-512 through a public mechanism API",
"outcome": "One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.",
"depends_on": [
"S00-001",
"S00-002",
"S00-017",
"S00-018"
],
"requirements": [
"ACC-004",
"NET-003",
"NET-004"
],
"scope": [
"experiments/0002-xmpp-library/sha512-validation/**",
"docs/decisions/0002-xmpp-sha512-validation.md"
],
"inputs": [
"docs/WEB_PROFILE.md",
"docs/ARCHITECTURE.md",
"docs/CONTRACTS.md",
"docs/TESTING.md",
"roles/protocol.md",
"docs/decisions/README.md",
"state/blockers/S00-019.md"
],
"spec_sections": [],
"ui_sections": [],
"steps": [
"Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.",
"Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.",
"Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.",
"Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review."
],
"acceptance": [
"RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.",
"Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.",
"Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.",
"Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work."
],
"checks": [
"Reproduce original browser sha-512 HMAC mismatch.",
"Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.",
"Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.",
"Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite."
],
"context_budget_chars": 48000
},
{
"id": "S00-010",
"stage": "S00",
+1 -1
View File
@@ -5,7 +5,7 @@
- Этап: S00
- Оператор: protocol
- Reviewer: qa
- Зависимости: S00-001, S00-002, S00-017, S00-018
- Зависимости: S00-001, S00-002, S00-017, S00-018, S00-019
- Требования: ACC-004, NET-003, NET-004
## Один результат
+61
View File
@@ -0,0 +1,61 @@
# S00-019: Validate browser-compatible SCRAM-SHA-512 through a public mechanism API
- Remediation для: S00-003; root: S00-003; depth: 1
> Generated from planning/tasks.json; status is in state/tasks.json.
- Этап: S00
- Оператор: crypto
- Reviewer: security
- Зависимости: S00-001, S00-002, S00-017, S00-018
- Требования: ACC-004, NET-003, NET-004
## Один результат
One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.
## Разрешённые пути
- `experiments/0002-xmpp-library/sha512-validation/**`
- `docs/decisions/0002-xmpp-sha512-validation.md`
Не изменять другие modules, shared contracts или spec snapshots без изменения плана. Stem без расширения разрешает принятые stack-specific extensions и focused test рядом.
## Прочитать
- docs/WEB_PROFILE.md
- docs/ARCHITECTURE.md
- docs/CONTRACTS.md
- docs/TESTING.md
- roles/protocol.md
- docs/decisions/README.md
- state/blockers/S00-019.md
## Шаги
1. Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.
2. Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.
3. Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.
4. Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review.
## Приёмка
1. RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.
2. Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.
3. Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.
4. Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work.
## Focused checks
1. Reproduce original browser sha-512 HMAC mismatch.
2. Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.
3. Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.
4. Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite.
## Блокер и завершение запуска
Для всех ролей scope — только эта задача. При блокере создать issue JSON по state/ISSUE_TEMPLATE.json, вызвать escalate с текущим ID/role/agent, проверить status=blocked и resolution_task, затем немедленно завершить запуск. Не решать blocker и не выбирать следующую задачу самому. Новый агент назначается runner. Правки metadata через CLI — единственное исключение scope.
## Передача
Сохранить evidence/handoff; submit → review и завершить запуск. Reviewer также выполняет только эту задачу, включая обязательное escalate при блокере.
+22
View File
@@ -0,0 +1,22 @@
# Blocker S00-019
- Original task: S00-003
- Root task: S00-003
- Reporter: auto-protocol-dcdf92cd067e
- Role: protocol
- Original owner: auto-protocol-dcdf92cd067e
- Waits for user/external condition: False
## Cause
Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.
## One remediation outcome
One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.
## Evidence / reproduction
Run the inline diagnostic in state/evidence/S00-003-auto-protocol-dcdf92cd067e.md using accepted Node runtime; sha-512 mismatches fixed RFC/Node digest while sha512 alias and SHA-256/SHA-1 controls match. Source Hmac.js uses alg === sha512 for 128-byte blocks.
The reporting agent must stop now. A new agent implements only S00-019.
@@ -0,0 +1,84 @@
# S00-003 blocked executor evidence
Agent: auto-protocol-dcdf92cd067e, protocol. Date: 2026-10-15.
Input: master_prompt and assigned startup/role/workflow documents; CLI resume/show;
S00-003 card/context and previous handoff; required docs/TESTING.md and
docs/decisions/README.md; accepted scope/stack/SASL/parser ADRs and dependency
reports/handoffs; exact ACC-004/NET-003/NET-004. Assigned owner confirmed;
no repeat claim. Output remains the library selection spike, not completed.
## Reproduced blocker
Pinned Stanza 12.22.1 browser createHmac('sha-512', ...) does not match
RFC 4231 section 4.2 Test Case 1 or Node's independent native implementation.
Its browser Hmac constructor chooses 128-byte blocks only when alg === 'sha512';
otherwise it chooses 64. Browser createHmac lowercases but does not remove the
hyphen. SCRAM derives algorithm 'sha-512' from the correct wire mechanism
SCRAM-SHA-512. This makes merely registering SASL.SCRAM under that mechanism
insufficient for browser interoperability. Browser getHashes advertises sha-512.
The SCRAM algorithm field is private in shipped index.d.ts, so changing it is
not a public supported integration path. No vendor/private-field patch attempted.
Public key: 20 bytes 0x0b; data: Hi There (RFC test data only).
Expected SHA-512:
87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854
Browser sha-512 actual:
9656975ee5de55e75f2976ecce9a04501060b9dc22a6eda2eaef638966280182477fe09f080b2bf564649cad42af8607a2bd8d02979df3a980f15e2326a0a22a
Browser sha512 alias matches expected; sha-1 and sha-256 also match Node controls.
This is a direct browser-backend module diagnostic executed in Node, not an
actual browser execution, full SCRAM exchange or WSS handshake.
## Commands and observed results
- python3 scripts/tasks.py resume --agent auto-protocol-dcdf92cd067e: exit 0,
assigned S00-003 in_progress.
- python3 scripts/tasks.py show S00-003: exit 0, dependencies done/scope confirmed.
- Scoped cat/rg reads: actual SASL/browser Hmac/createHash/factory/features/Client
source and public declarations examined. Guessed platform/browser.js,
lib/sasl/scram.js and parent .npmrc paths absent (cat calls exit 1);
actual platform/browser/index.js and lib/sasl/index.js/.d.ts located/read.
These exploratory failures are not passed tests or missing required artifacts.
- git status --short: exit 0; only coordinator state/tasks.json claim change.
- The following exact diagnostic ran with exit 0 and printed matching controls
and the SHA-512 mismatch above (exit 0 means reproduction completed, not safety):
```sh
PATH=/private/tmp/luma-stack-runtime/node-v24.21.0-darwin-arm64/bin:$PATH node --input-type=module <<'JS'
import {createRequire} from 'node:module';
import {createHmac} from 'node:crypto';
const require = createRequire(new URL('./experiments/0002-xmpp-library/package.json', `file://${process.cwd()}/`));
const browser = require('stanza/platform/browser/index.js');
const key = browser.Buffer.alloc(20, 0x0b);
for (const name of ['sha-1','sha-256','sha-512','sha512']) {
const actual = browser.createHmac(name,key).update('Hi There').digest('hex');
const expected = createHmac(name.replace('-', ''), Buffer.alloc(20,0x0b)).update('Hi There').digest('hex');
console.log(JSON.stringify({name, matchesNode: actual === expected, actual, expected}));
}
JS
```
Primary sources opened on 2026-10-15: RFC 7395, RFC 5802, RFC 7677,
https://www.rfc-editor.org/rfc/rfc4231.html#section-4.2,
https://github.com/legastero/stanza and https://github.com/xmppjs/xmpp.js.
Pinned shipped files establish the defect; upstream documentation alone is not
acceptance evidence. RFC 4231 provides the independent fixed HMAC vector.
Reused previously accepted isolated runtime; no new installation/checksum claim.
## Boundaries and next input
No source edits, manifest/lock/dependency changes, new primitive, credential,
TLS/CORS bypass or private vendor patch. No make check, npm ci, dependency
suite rerun, browser build/runtime, WSS handshake or independent interoperability
is claimed in this session. Accepted S00-017/S00-018 experiments remain unchanged.
Their local acceptance does not cover SHA-512 browser crypto. Current parent
selection ADR is absent and candidate unselected. No plaintext/downgrade
workaround was implemented.
One fresh crypto resolver must demonstrate correct browser-compatible
SCRAM-SHA-512 through a supported mechanism API using vetted existing crypto,
including SHA-512 known vectors, full proof/server-final and failure behavior;
independent security review precedes original-task resumption. The resolver may
assess an existing alternative backend/candidate inside its isolated scope, not
implement parent selection/WSS or shared contracts. This reporter exits after
escalation and does not solve remediation or launch another agent.
+26 -8
View File
@@ -1,14 +1,32 @@
# S00-003 blocked handoff
Executor: auto-protocol-902594b44429, protocol, 2026-10-15.
Original outcome remains library selection with WSS/auth/parser/extension spike.
Executor: auto-protocol-dcdf92cd067e, protocol, 2026-10-15.
Outcome remains library selection with WSS/auth/parser/extension spike.
Prior S00-017 SASL validation remediation is independently accepted. Read its ADR/plugin/44-test evidence; this session did not rerun those tests or change that experiment. Stanza is still an unselected candidate and the parent exploratory manifest/lock remain incomplete.
Accepted prerequisites: S00-001 scope, S00-002 stack, S00-017 fail-closed SASL
and S00-018 bounded parser ingress. Their ADRs/evidence were read; their suites
were not rerun or changed. Parent Stanza candidate remains unselected, parent
exploratory manifest/lock incomplete, selection ADR absent.
New bounded probe: experiments/0002-xmpp-library/parser-probe/reproduce.mjs. With the accepted Node 24.21.0 runtime, its actual parser/Client registry accepts a 1 MiB body and 256 nested children and retains/reassembles unfinished XML across 18 writes into a 64 KiB body without error. StreamParserOptions exposes no resource-limit configuration. The shipped WebSocket transport forwards successive messages to that persistent parser without enforcing standalone XML or limits. Evidence and exact command: state/evidence/S00-003-auto-protocol-902594b44429.md. This is a local diagnostic, not WSS/server/browser execution or an exhaustion benchmark.
Blocker newly reproduced in pinned Stanza 12.22.1 browser crypto:
createHmac('sha-512', RFC 4231 section 4.2 key/data) returns a different digest
than the fixed primary-spec vector and Node native crypto. sha512 alias and
sha-256/sha-1 controls match. Browser Hmac tests only alg === 'sha512' for its
128-byte block size, while SCRAM-SHA-512 derives 'sha-512'; that SCRAM field
is private in declarations. Direct browser module execution in Node is a
backend diagnostic, not actual browser/WSS execution. Exact reproduction and
digests: state/evidence/S00-003-auto-protocol-dcdf92cd067e.md.
Blocker: cannot attest the required bounded parser ingress using the candidate's stock input path. Needs one separately reviewed experiment enforcing finite input resource limits and complete standalone text XML per WebSocket message, using vetted parsing and a supported integration path. Do not patch ignored vendor source or rely on post-import events after allocations. Keep policy local to the experiment; no shared contract/product-limit decision is authorized here.
Source edits stopped; none were made. Do not patch ignored vendor code/private
fields, implement primitives, change wire name, claim successful SHA-512 from
Node-only crypto or silently downgrade to avoid the defect. One fresh crypto
resolver must produce an isolated browser-compatible SCRAM-SHA-512 integration
using vetted existing crypto and supported public mechanism extension APIs,
with known vectors, full proof/server-final and negative tests. Independent
security review must accept that outcome before coordinator resumes original.
Source edits stopped after diagnosis. No selection ADR, actual WSS handshake, browser build/runtime, complete mechanism policy, module extension roundtrip or independent interoperability is completed. No make check/clean install claimed for this run; source/accepted dependencies/specs were not altered beyond the bounded probe.
Next input: fresh resolver agent performs only the issue's parser ingress experiment and independent reviewer validates it. Only after reviewed done and coordinator commit may a new original executor resume remaining S00-003 acceptance. Current reporter must exit after escalation, cannot implement resolver, unblock, claim again or launch another agent.
No WSS handshake, browser build/runtime, complete mechanism policy, extension
roundtrip, selection or independent interoperability has been completed in this
session. No clean install/make check claimed. No shared/spec/accepted dependency
changes. Reporter exits immediately after escalate and cannot implement resolver,
unblock/reclaim or launch another process.
@@ -0,0 +1,32 @@
{
"title": "Validate browser-compatible SCRAM-SHA-512 through a public mechanism API",
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.",
"reproduction": "Run the inline diagnostic in state/evidence/S00-003-auto-protocol-dcdf92cd067e.md using accepted Node runtime; sha-512 mismatches fixed RFC/Node digest while sha512 alias and SHA-256/SHA-1 controls match. Source Hmac.js uses alg === sha512 for 128-byte blocks.",
"role": "crypto",
"reviewer_role": "security",
"scope": [
"experiments/0002-xmpp-library/sha512-validation/**",
"docs/decisions/0002-xmpp-sha512-validation.md"
],
"outcome": "One isolated runnable independently reviewed browser-compatible SCRAM-SHA-512 integration uses vetted existing crypto through a supported public mechanism API and validates proof/server-final without vendor/private-field patching or custom primitives.",
"steps": [
"Read original blocker, accepted stack/SASL ADR and pinned browser implementation/public APIs.",
"Reproduce the HMAC alias defect and evaluate an existing vetted mechanism/backend or candidate with primary docs, exact pins, license and browser/API checks.",
"Implement only isolated SCRAM-SHA-512 integration via supported public APIs using existing cryptographic code; retain fail-closed mutual authentication and real absence of channel binding.",
"Run fixed known vectors and full exchange positive/negative checks against the browser-resolved backend; preserve evidence, limitations and handoff for independent security review."
],
"acceptance": [
"RFC SHA-512 known vectors match using actual browser-compatible crypto backend, including algorithm spelling and varied key lengths.",
"Full SCRAM-SHA-512 client proof and verified server-final agree with an independent existing implementation/fixed externally derived vector; missing/forged/premature final fails without authentication/restart.",
"Integration uses public mechanism APIs, correct SCRAM-SHA-512 wire name, no private-field/vendor patch, invented binding, custom primitives or plaintext downgrade.",
"Runnable pinned fixture experiment and browser bundle/backend evidence permit independent review; no parent WSS/library selection/shared contract work."
],
"checks": [
"Reproduce original browser sha-512 HMAC mismatch.",
"Fixed SHA-512/HMAC known vectors including long keys using selected browser backend.",
"Full SCRAM-SHA-512 verified exchange and forged/missing/out-of-order server-final rejection.",
"Exact dependency/license/API/browser checks and repeatable clean install/bundle plus focused suite."
],
"depends_on": [],
"requires_user_input": false
}
+41 -9
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"revision": 46,
"revision": 48,
"tasks": {
"S00-001": {
"status": "done",
@@ -32,14 +32,16 @@
"completed_at": "2026-10-14T19:06:23+00:00"
},
"S00-003": {
"status": "todo",
"owner": null,
"started_at": "2026-10-14T19:20:57+00:00",
"reason": null,
"updated_at": "2026-10-14T19:35:55+00:00",
"blocked_by": [],
"status": "blocked",
"owner": "auto-protocol-dcdf92cd067e",
"started_at": "2026-10-14T19:35:56+00:00",
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success.",
"updated_at": "2026-10-14T19:38:42+00:00",
"blocked_by": [
"S00-019"
],
"resume_status": "in_progress",
"blocker_report": "state/blockers/S00-018.md",
"blocker_report": "state/blockers/S00-019.md",
"handoff": "state/handoffs/S00-003.md",
"previous_owner": "auto-protocol-902594b44429",
"resumed_after_blocker": true
@@ -1245,6 +1247,12 @@
"reviewer": "auto-security-64dc2d9fa232",
"review_evidence": "state/evidence/S00-018-review.md",
"completed_at": "2026-10-14T19:35:55+00:00"
},
"S00-019": {
"status": "todo",
"owner": null,
"external_wait": false,
"reason": null
}
},
"events": [
@@ -1847,6 +1855,29 @@
"to": "done",
"reason": null,
"evidence": "state/evidence/S00-018-review.md"
},
{
"revision": 47,
"at": "2026-10-14T19:35:56+00:00",
"action": "claim",
"task": "S00-003",
"agent": "auto-protocol-dcdf92cd067e",
"role": "protocol",
"from": "todo",
"to": "in_progress",
"reason": null
},
{
"revision": 48,
"at": "2026-10-14T19:38:42+00:00",
"action": "escalate",
"task": "S00-003",
"resolution_task": "S00-019",
"agent": "auto-protocol-dcdf92cd067e",
"role": "protocol",
"from": "in_progress",
"to": "blocked",
"reason": "Stanza 12.22.1 browser HMAC sha-512 fails RFC 4231 Test Case 1: wrong 64-byte block selection. SCRAM-SHA-512 derives that hyphenated algorithm; private algorithm mutation/vendor patches are unsupported. Parent cannot attest browser strongest-mechanism compatibility from Node-only success."
}
],
"retired_agents": [
@@ -1857,6 +1888,7 @@
"auto-qa-98b05bd56c25",
"auto-ci-cd-5475930af078",
"auto-protocol-826aa6bc12ef",
"auto-protocol-902594b44429"
"auto-protocol-902594b44429",
"auto-protocol-dcdf92cd067e"
]
}