Skip to content

Commit 2c49102

Browse files
committed
chore: mark US-001 complete, update progress and patterns
1 parent 4e4c446 commit 2c49102

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

progress.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ PRD: ralph/kernel-hardening (46 stories)
150150
- wrapNetworkAdapter creates a new object — any new NetworkAdapter methods MUST be explicitly forwarded through wrapNetworkAdapter or they'll be undefined at bridge-setup
151151
- UpgradeSocket.emit must use .call(this) — libraries like ws use `this[Symbol(...)]` in event callbacks requiring proper `this` binding
152152
- Server-side HTTP upgrade relay: driver.ts adds server.on('upgrade') → applySync dispatches to sandbox → sandbox Server._emit('upgrade') → ws handles handshake → UpgradeSocket relays data bidirectionally through bridge
153+
- Net bridge Socket follows child_process dispatch pattern: host→sandbox via applySync with try/catch for post-disposal safety
154+
- Moving a module from DEFERRED to BRIDGE requires 10+ file changes: module-resolver.ts, require-setup.ts, bridge-contract.ts, global-exposure.ts, permissions.ts, types.ts, bridge-setup.ts, driver.ts, plus new bridge/*.ts file
155+
- crypto.subtle.deriveBits (PBKDF2/HKDF) needed for pg SCRAM-SHA-256 auth — implement both in SandboxSubtle (require-setup.ts) and host dispatcher (bridge-setup.ts)
153156

154157
---
155158

@@ -2828,4 +2831,27 @@ PRD: ralph/kernel-hardening (46 stories)
28282831
- openssl days=0 generates a cert that expires at issuance — a 2s delay in beforeAll ensures the cert is actually expired when tests run
28292832
- Self-signed cert (no CA in trust chain) with default rejectUnauthorized=true triggers SELF_SIGNED_CERT_IN_CHAIN
28302833
- Hostname mismatch cert (SAN=wrong.example.com, connecting to 127.0.0.1) triggers ERR_TLS_CERT_ALTNAME_MISMATCH
2834+
2835+
## 2026-03-19 - US-001 (cli-tool-sandbox-tests PRD)
2836+
- What was implemented: TCP net bridge for sandbox, enabling pg library to connect through the sandbox to real Postgres
2837+
- Also implemented: crypto.subtle.deriveBits (PBKDF2, HKDF) and deriveKey for SCRAM-SHA-256 authentication
2838+
- Files changed:
2839+
- packages/secure-exec-core/src/bridge/net.ts — NEW: TCP Socket class with EventEmitter interface, host dispatch handler, isIP/isIPv4/isIPv6 utilities
2840+
- packages/secure-exec-core/src/bridge/index.ts — import and export net bridge
2841+
- packages/secure-exec-core/src/module-resolver.ts — moved net from DEFERRED to BRIDGE, added BUILTIN_NAMED_EXPORTS
2842+
- packages/secure-exec-core/src/shared/bridge-contract.ts — added host/runtime bridge globals for TCP socket
2843+
- packages/secure-exec-core/src/shared/global-exposure.ts — added custom global inventory entries
2844+
- packages/secure-exec-core/src/shared/permissions.ts — added TCP socket forwarding in wrapNetworkAdapter, connect op in stub
2845+
- packages/secure-exec-core/src/types.ts — added NetworkAdapter TCP methods, "connect" to NetworkAccessRequest.op
2846+
- packages/secure-exec-core/isolate-runtime/src/inject/require-setup.ts — removed net from deferred set, added bridge require handler, added SandboxSubtle.deriveBits/deriveKey
2847+
- packages/secure-exec-node/src/bridge-setup.ts — wired TCP socket bridge globals, lazy dispatch ref with try/catch for post-disposal events, added deriveBits/deriveKey to cryptoSubtle dispatcher
2848+
- packages/secure-exec-node/src/driver.ts — implemented real TCP socket management in createDefaultNetworkAdapter
2849+
- packages/secure-exec/tests/e2e-docker/pg-connect/fixture.json — changed expectation from fail to pass
2850+
- **Learnings for future iterations:**
2851+
- Net bridge follows child_process dispatch pattern: host pushes events (data/connect/end/close/error) via applySync to sandbox dispatch function
2852+
- Socket events (end/close) can fire after isolate disposal — wrap dispatch callbacks in try/catch to silently drop late events
2853+
- pg uses crypto.subtle.deriveBits with PBKDF2 for SCRAM-SHA-256 auth — must implement both bridge-side (SandboxSubtle) and host-side (cryptoSubtleRef dispatcher)
2854+
- HKDF implementation requires manual HKDF-Extract (HMAC(salt, ikm)) then HKDF-Expand (iterated HMAC with counter byte)
2855+
- Moving a module from DEFERRED to BRIDGE requires changes in: module-resolver.ts (BRIDGE_MODULES, DEFERRED_CORE_MODULES, BUILTIN_NAMED_EXPORTS), require-setup.ts (deferred set, bridge require handler), bridge-contract.ts, global-exposure.ts, permissions.ts, types.ts, bridge-setup.ts, driver.ts
2856+
- createDefaultNetworkAdapter tracks TCP sockets in a Map<number, net.Socket> keyed by sandbox socketId
28312857
---

0 commit comments

Comments
 (0)