Skip to content

Commit d09ebb8

Browse files
committed
chore: update progress for US-185
1 parent 7afdbeb commit d09ebb8

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

progress.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ PRD: ralph/kernel-hardening (46 stories)
9797
- tcgetattr returns a deep copy — callers cannot mutate internal state
9898
- /dev/fd/N in fdOpen → dup(N); VFS-level readDir/stat for /dev/fd are PID-unaware; use devFdReadDir(pid) and devFdStat(pid, fd) on KernelInterface for PID-aware operations
9999
- Device layer has DEVICE_DIRS set (/dev/fd, /dev/pts) for pseudo-directories — stat returns directory mode 0o755, readDir returns empty (PID context required for dynamic content)
100+
- diagnostics_channel.tracingChannel() stub must include traceSync/tracePromise/traceCallback — libraries (pino, etc.) call these directly
101+
- Project-matrix fixtures using pino: use process.stdout as destination (sonic-boom fd writes fail with EBADF in sandbox)
100102
- ResourceBudgets (maxOutputBytes, maxBridgeCalls, maxTimers, maxChildProcesses) flow: NodeRuntimeOptions → RuntimeDriverOptions → NodeExecutionDriver constructor
101103
- Bridge-side timer budget: inject `_maxTimers` number as global, bridge checks `_timers.size + _intervals.size >= _maxTimers` synchronously — host-side enforcement doesn't work because `_scheduleTimer.apply()` is async (Promise)
102104
- Bridge `_scheduleTimer.apply(undefined, [delay], { result: { promise: true } })` is async — host throws become unhandled Promise rejections, not catchable try/catch
@@ -2323,3 +2325,18 @@ PRD: ralph/kernel-hardening (46 stories)
23232325
- chalk v5 exports `Chalk` as a named export (not `chalk.Chalk`) — use `import { Chalk } from "chalk"` and `new Chalk({ level: 1 })` for deterministic ANSI output
23242326
- Forcing `level: 1` ensures basic ANSI codes regardless of TTY detection, producing identical output in host and sandbox
23252327
---
2328+
2329+
## 2026-03-18 - US-185
2330+
- Added pino project-matrix fixture (pino-pass)
2331+
- Fixed diagnostics_channel.tracingChannel() stub to include traceSync/tracePromise/traceCallback methods
2332+
- Files changed:
2333+
- packages/secure-exec/tests/projects/pino-pass/ (new fixture: fixture.json, package.json, src/index.js)
2334+
- packages/secure-exec-core/isolate-runtime/src/inject/require-setup.ts (diagnostics_channel stub fix)
2335+
- packages/secure-exec-core/src/generated/isolate-runtime.ts (rebuilt)
2336+
- docs/nodejs-compatibility.mdx (added pino to Tested Packages table)
2337+
- **Learnings for future iterations:**
2338+
- pino uses sonic-boom (async fd writes via fs.writeSync) by default — sandbox doesn't support direct fd writes, so use process.stdout as destination
2339+
- pino.destination({ dest: 1, sync: true }) fails in sandbox with EBADF; pino({}, process.stdout) works
2340+
- diagnostics_channel.tracingChannel() must return traceSync/tracePromise/traceCallback no-op wrappers that execute the passed function — libraries like pino call these directly
2341+
- Use `timestamp: false, base: undefined` with pino for deterministic output (removes time, pid, hostname)
2342+
---

scripts/ralph/prd.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3188,7 +3188,7 @@
31883188
"Tests pass (project-matrix)"
31893189
],
31903190
"priority": 185,
3191-
"passes": false,
3191+
"passes": true,
31923192
"notes": "pino exercises streams, worker_threads fallback, fast serialization."
31933193
},
31943194
{

0 commit comments

Comments
 (0)