Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 58 additions & 12 deletions packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -158,14 +158,12 @@ const STALL_MS = 10_000;
* The shim's own no-progress bound, mirrored from `bin/run-dev.js`
* (`STDERR_DRAIN_STALL_MS`) and held equal to it by a case below rather than
* trusted. Case 5's ceiling no longer budgets it — that ceiling is a constant
* now — but two cases here are still sized against it and would quietly stop
* now — and case 6 no longer reads it either, having stopped judging by a wall
* clock at all. ONE case is still sized against it and would quietly stop
* discriminating if it moved:
*
* • `STALL_MS` above must stay strictly BELOW it, or case 4's stalled reader
* outlasts the shim's own give-up and reds against a WORKING fix;
* • case 6 reads the closed-reader path as released in less than `STALL_MS`,
* which is evidence of a fast path only while `STALL_MS` is itself below
* the bound.
* outlasts the shim's own give-up and reds against a WORKING fix.
*/
const SHIM_DRAIN_STALL_MS = 15_000;

Expand DownExpand Up@@ -457,12 +455,60 @@ describe('the mirror direction: a reader that is never coming back', () => {
expect(Number(String(declared).replaceAll('_', ''))).toBe(SHIM_DRAIN_STALL_MS);
});

it('a CLOSED read end is released at once, not held for the bound (EPIPE reaches the callback)', () => {
// Pins the fast path measured alongside the hang: when the reader is gone
// rather than idle, the write callback fires with EPIPE and the wait ends
// immediately. A future change to the bound must not quietly make the
// closed-reader paths pay it.
expect(closedEnd.signal).toBeNull();
expect(closedEnd.elapsedMs).toBeLessThan(STALL_MS);
it('a CLOSED read end ends the child on its own — by an uncaught EPIPE, never by the bound', () => {
// ⚠️ This case used to read `elapsedMs < STALL_MS`, and its name used to
// say "released at once … EPIPE reaches the callback". BOTH were wrong
// about this shape, and the trace that settles it is worth more than the
// assertion it replaces.
//
// What the child ACTUALLY does with its read end destroyed: oclif's
// `displayWarnings()` makes the first stderr write, the pipe is already
// gone, node raises `write EPIPE` as an `error` event on `process.stderr`,
// NOTHING IS LISTENING, and the process dies of an uncaught exception —
// exit 1, ~1.4 s in. `writeStderr()` is never called, so the bound this
// case was named after is never armed, let alone paid. Traced on one box
// with a `--import` observer: the shim's own 415-byte write is #175, at
// 9250 ms, behind 174 oclif writes that all EPIPE — 7.8 s after the
// unobserved child is already dead.
//
// ⛔ So the wall-clock bound was not merely fragile, it was a PHANTOM: it
// could not fail for the reason it named. Ablated on `bin/run-dev.js`,
// same box, same probe, with the old bound's verdict in brackets:
//
// pristine exit 1, 1387-1711 ms [green]
// write callback REMOVED, so a closed path
// could only finish on the bound — the
// regression this case named exit 1, 1517-1633 ms [GREEN]
// EPIPE made non-fatal, callback kept exit 2, 8787-8979 ms [green, 1.2 s spare]
// both, so the path really pays the bound exit 2, 23601-23712 ms [red]
//
// The bound moved only on lines 3 and 4, which change the EXIT CODE too;
// against its own regression it stayed green. And its whole measured term
// is child cold start, which is elastic — 1.4 s here, 8.9 s the moment
// anything lets the child run further — judged against 10 s borrowed from
// case 4's parent stall, a number with no relationship to this case.
//
// ⭐ The exit status IS the observation the wall clock was standing in for,
// and it carries no load term at all. 1 means the child died on its first
// write and never reached the drain; 2 means it got through to `handle()`,
// which is only reachable THROUGH `writeStderr()` — bound paid or not. Every
// ablation above that reaches the drain flips it, including the one the old
// assertion could not see.
//
// ⚠️ 1 is what the CLI DOES, not what anyone contracted: a caller whose
// stderr is closed gets 1 where every other reader gets 2, and cannot tell a
// failed command from a crashed CLI. Filed as #14858. If that is fixed to
// exit 2 this case reds, which is the point — the fixing PR flips the number
// here and says why. ⛔ Do not "repair" a red by loosening this to
// `not.toBeNull()`; that is the phantom check all over again.
const evidence =
`closed-read-end child ran ${closedEnd.elapsedMs} ms (harness cap ${UNREAD_HARD_CAP_MS} ms); ` +
`case 1 measured the same child at ${unbuilt.elapsedMs} ms on this runner minutes earlier`;
expect(closedEnd.signal, `the harness SIGKILLed the child — it was still alive at the ceiling. ${evidence}`).toBeNull();
expect(
closedEnd.code,
`the child did not die on its first stderr write — it reached the shim's drain, so something now ` +
`tolerates EPIPE on stderr (see #14858 and the ablation table above this assertion). ${evidence}`,
).toBe(1);
});
});
Loading