S00-011: Approve verified npm access after independent TLS and integrity checks

Changes: Accept the bounded S00-011 registry remediation; record independent security evidence and review handoff. Source probe and stack remain unchanged by review.
Validation: Original npm view and fresh-cache verify.py returned exit 0; 26394-byte react@19.3.1 matched registry SHA-512. Disabled TLS was refused with exit 1. make check passed 66 tests; executor patch/message, scope, ignore rules and whitespace checked. App build, provenance and future harness connectivity remain unverified.

Task: S00-011
Agent: auto-security-1e9200de1765
Role: security
Action: review
Status: done

Task title: Restore verified npm registry access for the stack spike
This commit is contained in:
wt committed 2026-10-15 01:11:33 +07:00
1 parent e4672fba91
commit 06f353b214
7 files changed
+120 -19

No files matched your search

+3 -3
View File
@@ -1,11 +1,11 @@
# Матрица задач
Generated; state revision **8**. Canonical status: state/tasks.json.
Generated; state revision **9**. 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 | blocked | auto-orchestrator-3a4f07103316 | S00-001, S00-011 | Выбрать framework и build runtime |
| [S00-002](tasks/S00-002.md) | S00 | orchestrator | security | todo | | S00-001, S00-011 | Выбрать framework и build runtime |
| [S00-003](tasks/S00-003.md) | S00 | protocol | qa | todo | | S00-001, S00-002 | Проверить 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 |
@@ -13,7 +13,7 @@ Generated; state revision **8**. Canonical status: state/tasks.json.
| [S00-007](tasks/S00-007.md) | S00 | security | orchestrator | todo | | S00-004, S00-005 | Утвердить password и crypto unlock модель |
| [S00-008](tasks/S00-008.md) | S00 | ci-cd | qa | todo | | S00-003, S00-004 | Описать WSS/upload/TURN/push topology |
| [S00-009](tasks/S00-009.md) | S00 | orchestrator | security | todo | | S00-003, S00-004, S00-005, S00-006, S00-007, S00-008 | Согласовать результаты spikes |
| [S00-011](tasks/S00-011.md) | S00 | ci-cd | security | review | auto-ci-cd-d105e8027730 | S00-001 | Restore verified npm registry access for the stack spike |
| [S00-011](tasks/S00-011.md) | S00 | ci-cd | security | done | auto-ci-cd-d105e8027730 | S00-001 | Restore verified npm registry access for the stack spike |
| [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 |
+2 -2
View File
@@ -7,7 +7,7 @@
## Задачи
- [S00-001](../tasks/S00-001.md): Утвердить Web-профиль — orchestrator; done.
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; blocked.
- [S00-002](../tasks/S00-002.md): Выбрать framework и build runtime — orchestrator; todo.
- [S00-003](../tasks/S00-003.md): Проверить XMPP WSS/auth библиотеку — protocol; todo.
- [S00-004](../tasks/S00-004.md): Проверить browser OMEMO backend — crypto; todo.
- [S00-005](../tasks/S00-005.md): Выбрать IndexedDB wrapper и migration policy — storage; todo.
@@ -15,7 +15,7 @@
- [S00-007](../tasks/S00-007.md): Утвердить password и crypto unlock модель — security; todo.
- [S00-008](../tasks/S00-008.md): Описать WSS/upload/TURN/push topology — ci-cd; todo.
- [S00-009](../tasks/S00-009.md): Согласовать результаты spikes — orchestrator; todo.
- [S00-011](../tasks/S00-011.md): Restore verified npm registry access for the stack spike — ci-cd; review.
- [S00-011](../tasks/S00-011.md): Restore verified npm registry access for the stack spike — ci-cd; done.
- [S00-010](../tasks/S00-010.md): Gate: Профиль и проверка стека — qa; todo.
## Граница этапа
+2 -2
View File
@@ -1,6 +1,6 @@
id,stage,operator,reviewer,status,owner,depends_on,title
S00-001,S00,orchestrator,security,done,auto-orchestrator-48aab142ecde,,Утвердить Web-профиль
S00-002,S00,orchestrator,security,blocked,auto-orchestrator-3a4f07103316,"S00-001, S00-011",Выбрать framework и build runtime
S00-002,S00,orchestrator,security,todo,,"S00-001, S00-011",Выбрать framework и build runtime
S00-003,S00,protocol,qa,todo,,"S00-001, S00-002",Проверить 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
@@ -8,7 +8,7 @@ S00-006,S00,orchestrator,security,todo,,S00-002,Зафиксировать brows
S00-007,S00,security,orchestrator,todo,,"S00-004, S00-005",Утвердить password и crypto unlock модель
S00-008,S00,ci-cd,qa,todo,,"S00-003, S00-004",Описать WSS/upload/TURN/push topology
S00-009,S00,orchestrator,security,todo,,"S00-003, S00-004, S00-005, S00-006, S00-007, S00-008",Согласовать результаты spikes
S00-011,S00,ci-cd,security,review,auto-ci-cd-d105e8027730,S00-001,Restore verified npm registry access for the stack spike
S00-011,S00,ci-cd,security,done,auto-ci-cd-d105e8027730,S00-001,Restore verified npm registry access for the stack spike
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 blocked todo auto-orchestrator-3a4f07103316 S00-001, S00-011 Выбрать framework и build runtime
4 S00-003 S00 protocol qa todo S00-001, S00-002 Проверить 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
8 S00-007 S00 security orchestrator todo S00-004, S00-005 Утвердить password и crypto unlock модель
9 S00-008 S00 ci-cd qa todo S00-003, S00-004 Описать WSS/upload/TURN/push topology
10 S00-009 S00 orchestrator security todo S00-003, S00-004, S00-005, S00-006, S00-007, S00-008 Согласовать результаты spikes
11 S00-011 S00 ci-cd security review done auto-ci-cd-d105e8027730 S00-001 Restore verified npm registry access for the stack spike
12 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: Профиль и проверка стека
13 S01-001 S01 orchestrator security todo S00-010 Описать identity/model contracts
14 S01-002 S01 orchestrator security todo S00-010, S01-001 Описать async account context
@@ -0,0 +1,4 @@
Approve verified npm access after independent TLS and integrity checks
Changes: Accept the bounded S00-011 registry remediation; record independent security evidence and review handoff. Source probe and stack remain unchanged by review.
Validation: Original npm view and fresh-cache verify.py returned exit 0; 26394-byte react@19.3.1 matched registry SHA-512. Disabled TLS was refused with exit 1. make check passed 66 tests; executor patch/message, scope, ignore rules and whitespace checked. App build, provenance and future harness connectivity remain unverified.
+64
View File
@@ -0,0 +1,64 @@
# S00-011 — independent security review
Reviewer: auto-security-1e9200de1765 (security).
Executor: auto-ci-cd-d105e8027730 (ci-cd).
Date: 2026-10-15. Decision: approve the bounded registry-access remediation.
Input: assigned card/context packet, original blocker, NFR-007, executor
handoff/evidence, accepted ADR 0000 and S00-001 dependency evidence/review.
Output: independent review of the documented TLS-enabled registry path and
exact-version tarball retrieval. Acceptance is connectivity and integrity only.
## Findings
Examined executor commit e4672fba91f515123bbd09fd93c87d6cd3c5dd03,
its message and every changed file, plus prior release checkpoint b8afc70.
The executor message matches the actual scoped probe, README, ignore rule and
workflow artifacts. Initial working tree was clean. Source changes are limited
to experiments/0001-stack/registry-access; other changes are task metadata,
generated matrices, evidence, handoff and commit message. No spec, shared
contract, application dependency, stack decision or harness change was included.
The probe fixes the HTTPS registry, enables strict-ssl explicitly, rejects
NODE_TLS_REJECT_UNAUTHORIZED=0, uses empty user/global npmrc files and a fresh
temporary cache, and runs outside the project npmrc context. Subprocess arguments
are arrays without shell evaluation. Exact metadata version and tarball URL are
checked before npm pack; the expected filename is fixed before reading bytes.
Package scripts are disabled, no archive is extracted and no package is installed.
Python hashlib SHA-512 is compared against both registry and pack integrity.
Unexpected versions/origins/algorithms or mismatches terminate without success.
The public registry/TLS trust remains the source of expected integrity; this is
not independent package provenance or a hostile-registry defense.
Independently repeated the original metadata request and fresh-cache probe in
this fresh reviewer harness. Both succeeded. react@19.3.1 was 26394 bytes with
registry/actual integrity:
sha512-QNhWdt7nrgVWWQG58QuGsAR3jv3Hbe4mb4vz7w2csnHavciZJgda1CPNaldF6eVxv90ud3jUXpKlHL69gO38yw==
No TLS/CORS bypass, secrets, real conversations or credentials found in the
reviewed patch. Generated public artifacts are ignored. The README records
DNS/HTTPS egress, normal certificate trust, project/temporary write boundaries,
exact commands and explicit limits. The next stack executor must retain this
network-enabled harness and perform its own clean install/build and decisions.
## Actual independent checks
| Command/check | Exit | Result |
| --- | --- | --- |
| `python3 scripts/tasks.py resume --agent auto-security-1e9200de1765` | 0 | Empty owned-task list, expected for reviewer; no claim. |
| `python3 scripts/tasks.py show S00-011` and `packet S00-011 --agent auto-security-1e9200de1765` | 0 each | Correct review role, owner, scope, acceptance and dependency context. |
| `git log --all --oneline --grep='^S00-011:'`, `git show e4672fb` (all scoped sections) and `git show b8afc70 --stat` | 0 each | Executor patch/message and release checkpoint examined. |
| `npm view react version license engines --json --cache /private/tmp/luma-stack-npm-cache --fetch-retries=0 --fetch-timeout=15000` | 0 | version 19.3.1, MIT, node >=0.10.0. |
| `npm config get strict-ssl` | 0 | true. |
| `python3 experiments/0001-stack/registry-access/verify.py` | 0 | Both npm children exit 0; fresh-cache download and SHA-512 match as above. |
| Python subprocess wrapper invoking verify.py with NODE_TLS_REJECT_UNAUTHORIZED=0 | 0 wrapper; 1 child | Asserted exact refusal stderr and empty stdout; exits before npm execution. |
| `git check-ignore` for artifacts/metadata.json, result.json and react-19.3.1.tgz | 0 | All three generated artifacts ignored. |
| `make check` | 0 | 276 tasks, 22 stages, 221 requirements, 211 allocated Web requirements, revision 8; 66 tooling tests passed in 10.382s. |
| `git diff --check` and `git status --short` before review metadata | 0 each | No whitespace errors; working tree remains clean. |
No blocker or acceptance defect found. Foundation tests do not prove app
readiness. No browser/CORS, app install/build, signature/provenance, library
compatibility or future/different-harness availability was tested or accepted.
The cause of the earlier external DNS repair is not asserted. Approval accepts
the observed registry path and reproducible bounded probe only. Git commit and
the next fresh session remain coordinator-owned.
+9
View File
@@ -19,3 +19,12 @@ S00-002 executor, which must retain working DNS/HTTPS egress and perform its own
clean install/build. Current observed Node/npm versions and sample React version
are not a stack selection. No app readiness, browser/provider behavior, signature
verification or future/different-harness network availability is claimed.
Independent security review: auto-security-1e9200de1765, 2026-10-15.
Accepted the bounded registry-access remediation after repeating the original
npm metadata request and fresh-cache verify.py (exit 0, 26394 bytes, SHA-512
match), testing disabled-TLS refusal, and running make check (66 tests passed).
Review evidence: state/evidence/S00-011-review.md. No blocker. Next fresh
S00-002 executor must retain working DNS/HTTPS/TLS and run its own stack spike;
no stack/build/browser/provenance acceptance is implied. Coordinator must commit
this review transition before launching that session.
+36 -12
View File
@@ -1,6 +1,6 @@
{
"schema_version": 1,
"revision": 8,
"revision": 9,
"tasks": {
"S00-001": {
"status": "done",
@@ -15,17 +15,17 @@
"completed_at": "2026-10-14T18:03:56+00:00"
},
"S00-002": {
"status": "blocked",
"owner": "auto-orchestrator-3a4f07103316",
"status": "todo",
"owner": null,
"started_at": "2026-10-14T18:03:56+00:00",
"reason": "S00-002 cannot verify versions/licenses or run its required clean install/build: local npm lookup fails with getaddrinfo ENOTFOUND registry.npmjs.org. Restricted network and never-approval execution policy cannot be changed by this agent. External owner must supply registry-capable execution while preserving TLS validation and project-only writes.",
"updated_at": "2026-10-14T18:05:01+00:00",
"blocked_by": [
"S00-011"
],
"reason": null,
"updated_at": "2026-10-14T18:11:33+00:00",
"blocked_by": [],
"resume_status": "in_progress",
"blocker_report": "state/blockers/S00-011.md",
"handoff": "state/handoffs/S00-002.md"
"handoff": "state/handoffs/S00-002.md",
"previous_owner": "auto-orchestrator-3a4f07103316",
"resumed_after_blocker": true
},
"S00-003": {
"status": "todo",
@@ -1120,14 +1120,17 @@
"owner": null
},
"S00-011": {
"status": "review",
"status": "done",
"owner": "auto-ci-cd-d105e8027730",
"external_wait": false,
"reason": null,
"started_at": "2026-10-14T18:07:56+00:00",
"updated_at": "2026-10-14T18:10:10+00:00",
"updated_at": "2026-10-14T18:11:33+00:00",
"evidence": "state/evidence/S00-011-auto-ci-cd-d105e8027730.md",
"handoff": "state/handoffs/S00-011.md"
"handoff": "state/handoffs/S00-011.md",
"reviewer": "auto-security-1e9200de1765",
"review_evidence": "state/evidence/S00-011-review.md",
"completed_at": "2026-10-14T18:11:33+00:00"
}
},
"events": [
@@ -1219,6 +1222,27 @@
"to": "review",
"reason": null,
"evidence": "state/evidence/S00-011-auto-ci-cd-d105e8027730.md"
},
{
"revision": 9,
"at": "2026-10-14T18:11:33+00:00",
"action": "auto-unblock",
"task": "S00-002",
"resolved_by": "S00-011",
"to": "todo",
"fresh_agent_required": true
},
{
"revision": 9,
"at": "2026-10-14T18:11:33+00:00",
"action": "approve",
"task": "S00-011",
"agent": "auto-security-1e9200de1765",
"role": "security",
"from": "review",
"to": "done",
"reason": null,
"evidence": "state/evidence/S00-011-review.md"
}
],
"retired_agents": [