@lifeaitools/rdc-skills 0.35.21 → 0.35.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,38 +1,38 @@
1
- > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
2
- > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
3
- > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
4
-
5
-
6
- # rdc:verify — Verification Before Completion
7
-
8
- > Adapted from obra/superpowers `verification-before-completion`.
9
- > Stack-specific: uses `npx vitest run` + `npx tsc --noEmit`. NEVER `pnpm build` (crashes machine — 800MB/process).
10
-
11
- ## The Iron Law
12
-
13
- **NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.**
14
-
15
- You may not say "done", "complete", "working", "fixed", "passing", or imply success until you have:
16
-
17
- 1. **Identified** the exact commands that prove the claim
18
- 2. **Run** those commands fresh in the current state (not memory, not "earlier", not "should")
19
- 3. **Read** the full output
20
- 4. **Verified** the output matches the claim
21
- 5. Only THEN made the claim, quoting the evidence
22
-
23
- If you cannot run the commands, say so explicitly. Do not substitute reasoning for evidence.
24
-
25
- ## Red Flags — Stop and Verify
26
-
27
- If you're about to write any of these, STOP:
28
-
29
- - "should work" / "should pass" / "should be fine"
30
- - "probably" / "seems to" / "looks good"
31
- - "I think the tests pass"
32
- - "the types check out" (without running tsc)
33
- - "everything compiles" (without fresh output)
34
- - Expressing satisfaction or wrapping up before the gate ran
35
-
1
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
2
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
3
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
4
+
5
+
6
+ # rdc:verify — Verification Before Completion
7
+
8
+ > Adapted from obra/superpowers `verification-before-completion`.
9
+ > Stack-specific: uses `npx vitest run` + `npx tsc --noEmit`. NEVER `pnpm build` (crashes machine — 800MB/process).
10
+
11
+ ## The Iron Law
12
+
13
+ **NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.**
14
+
15
+ You may not say "done", "complete", "working", "fixed", "passing", or imply success until you have:
16
+
17
+ 1. **Identified** the exact commands that prove the claim
18
+ 2. **Run** those commands fresh in the current state (not memory, not "earlier", not "should")
19
+ 3. **Read** the full output
20
+ 4. **Verified** the output matches the claim
21
+ 5. Only THEN made the claim, quoting the evidence
22
+
23
+ If you cannot run the commands, say so explicitly. Do not substitute reasoning for evidence.
24
+
25
+ ## Red Flags — Stop and Verify
26
+
27
+ If you're about to write any of these, STOP:
28
+
29
+ - "should work" / "should pass" / "should be fine"
30
+ - "probably" / "seems to" / "looks good"
31
+ - "I think the tests pass"
32
+ - "the types check out" (without running tsc)
33
+ - "everything compiles" (without fresh output)
34
+ - Expressing satisfaction or wrapping up before the gate ran
35
+
36
36
  ## The Gate — Commands for This Stack
37
37
 
38
38
  Run these in order. All must pass. Capture output.
@@ -55,97 +55,97 @@ Required work item evidence:
55
55
  If this check fails, stop validation for that item and reopen it. Do not mark a work item `done` when the checklist itself is not decomposed enough to prove completion.
56
56
 
57
57
  ### 1. Per-package vitest (every package touched)
58
-
59
- ```bash
60
- cd <repo-root>
61
- for pkg in <changed-packages>; do
62
- npx vitest run --dir packages/$pkg 2>&1 | tee /tmp/verify-$pkg.log
63
- done
64
- ```
65
-
66
- Or for a single package:
67
- ```bash
68
- npx vitest run --dir packages/<pkg>
69
- npx vitest run --dir apps/<app>
70
- ```
71
-
72
- **NEVER** run `pnpm build` or `pnpm test` at the repo root — spawns 5-7 node processes at 800MB each and crashes the machine.
73
-
74
- ### 2. Typecheck per package
75
-
76
- ```bash
77
- npx tsc --noEmit --project packages/<pkg>/tsconfig.json
78
- npx tsc --noEmit --project apps/<app>/tsconfig.json
79
- ```
80
-
81
- One package at a time. Read the full output — zero errors required.
82
-
83
- ### 3. Lint (if configured for the package)
84
-
85
- ```bash
86
- npx eslint <paths> --max-warnings=0
87
- ```
88
-
89
- ### 4. Smoke check exports (if package adds public API)
90
-
91
- ```bash
92
- node -e "const m = require('<pkg>'); console.log(Object.keys(m));"
93
- ```
94
-
95
- Or for ESM:
96
- ```bash
97
- node --input-type=module -e "import * as m from '<pkg>'; console.log(Object.keys(m));"
98
- ```
99
-
100
- ## Rationalization Prevention
101
-
102
- | You're tempted to think... | Reality |
103
- |---|---|
104
- | "Tests passed earlier, should still pass" | Run them now. Code changed. |
105
- | "TypeScript is strict, if it built it works" | You didn't build. Run tsc. |
106
- | "Small change, no need to retest" | Small changes are where regressions hide. |
107
- | "I'll note it as pending verification" | No. Verify now or mark incomplete. |
108
- | "The test file looks right" | Reading ≠ running. Run it. |
109
-
110
- ## Output Format — Required
111
-
112
- When reporting completion, use this structure:
113
-
114
- ```
115
- ## Verification Evidence
116
-
117
- ### vitest
118
- $ npx vitest run --dir packages/hail
119
- Test Files 12 passed (12)
120
- Tests 147 passed (147)
121
-
122
- ### tsc
123
- $ npx tsc --noEmit --project packages/hail/tsconfig.json
124
- (no output — clean)
125
-
58
+
59
+ ```bash
60
+ cd <repo-root>
61
+ for pkg in <changed-packages>; do
62
+ npx vitest run --dir packages/$pkg 2>&1 | tee /tmp/verify-$pkg.log
63
+ done
64
+ ```
65
+
66
+ Or for a single package:
67
+ ```bash
68
+ npx vitest run --dir packages/<pkg>
69
+ npx vitest run --dir apps/<app>
70
+ ```
71
+
72
+ **NEVER** run `pnpm build` or `pnpm test` at the repo root — spawns 5-7 node processes at 800MB each and crashes the machine.
73
+
74
+ ### 2. Typecheck per package
75
+
76
+ ```bash
77
+ npx tsc --noEmit --project packages/<pkg>/tsconfig.json
78
+ npx tsc --noEmit --project apps/<app>/tsconfig.json
79
+ ```
80
+
81
+ One package at a time. Read the full output — zero errors required.
82
+
83
+ ### 3. Lint (if configured for the package)
84
+
85
+ ```bash
86
+ npx eslint <paths> --max-warnings=0
87
+ ```
88
+
89
+ ### 4. Smoke check exports (if package adds public API)
90
+
91
+ ```bash
92
+ node -e "const m = require('<pkg>'); console.log(Object.keys(m));"
93
+ ```
94
+
95
+ Or for ESM:
96
+ ```bash
97
+ node --input-type=module -e "import * as m from '<pkg>'; console.log(Object.keys(m));"
98
+ ```
99
+
100
+ ## Rationalization Prevention
101
+
102
+ | You're tempted to think... | Reality |
103
+ |---|---|
104
+ | "Tests passed earlier, should still pass" | Run them now. Code changed. |
105
+ | "TypeScript is strict, if it built it works" | You didn't build. Run tsc. |
106
+ | "Small change, no need to retest" | Small changes are where regressions hide. |
107
+ | "I'll note it as pending verification" | No. Verify now or mark incomplete. |
108
+ | "The test file looks right" | Reading ≠ running. Run it. |
109
+
110
+ ## Output Format — Required
111
+
112
+ When reporting completion, use this structure:
113
+
114
+ ```
115
+ ## Verification Evidence
116
+
117
+ ### vitest
118
+ $ npx vitest run --dir packages/hail
119
+ Test Files 12 passed (12)
120
+ Tests 147 passed (147)
121
+
122
+ ### tsc
123
+ $ npx tsc --noEmit --project packages/hail/tsconfig.json
124
+ (no output — clean)
125
+
126
126
  ### Status
127
127
  Checklist quality: PASS
128
128
  PASS — safe to mark tasks done.
129
129
  ```
130
130
 
131
131
  If any step fails: do NOT claim completion. Report the failure, fix it, re-run the entire gate.
132
-
133
- ## When to Invoke
134
-
135
- - **End of `/rdc:build`** — mandatory final phase before marking epic done
136
- - **During `/rdc:review`** — verification gate after fixes applied
137
- - **Before any "done" declaration** — if an agent or supervisor is about to say work is complete
138
- - **After merging waves** — when parallel agents finish and their work is combined
139
-
140
- ## Agent Delegation
141
-
142
- When dispatching a verification agent, give them:
143
- - Exact list of packages/apps to verify
132
+
133
+ ## When to Invoke
134
+
135
+ - **End of `/rdc:build`** — mandatory final phase before marking epic done
136
+ - **During `/rdc:review`** — verification gate after fixes applied
137
+ - **Before any "done" declaration** — if an agent or supervisor is about to say work is complete
138
+ - **After merging waves** — when parallel agents finish and their work is combined
139
+
140
+ ## Agent Delegation
141
+
142
+ When dispatching a verification agent, give them:
143
+ - Exact list of packages/apps to verify
144
144
  - Explicit ban on `pnpm build` / `pnpm test` / `pnpm -r`
145
145
  - Work item checklists and the matching plan doc so `decomp-*` quality can be verified first
146
146
  - Required output format (above)
147
147
  - Instruction: "If any command fails, STOP and report. Do not fix. Do not continue."
148
-
149
- ## The Bottom Line
150
-
151
- Evidence before claims. Fresh evidence, not remembered evidence. Full output, not selective reading. If you skip the gate, you are lying about the work being done.
148
+
149
+ ## The Bottom Line
150
+
151
+ Evidence before claims. Fresh evidence, not remembered evidence. Full output, not selective reading. If you skip the gate, you are lying about the work being done.
@@ -1,106 +1,106 @@
1
- > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
2
- > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
3
- > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
4
-
5
- > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first (fallback: `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md`).
6
-
7
-
8
- # rdc:viz — Visualization Agent
9
-
10
- ## Mandatory First Steps
11
-
12
- Read BOTH guides before ANY code:
13
- ```
14
- {PROJECT_ROOT}/.rdc/guides/frontend.md (fallback: {PROJECT_ROOT}/.rdc/guides/frontend.md)
15
- {PROJECT_ROOT}/.rdc/guides/design.md (fallback: {PROJECT_ROOT}/.rdc/guides/design.md)
16
- ```
17
-
18
- ## Before Writing Any Code
19
-
20
- 1. **Check for existing prototypes:**
21
- ```sql
22
- SELECT name, component, source_path, status, notes
23
- FROM prototype_registry
24
- WHERE status IN ('prototype', 'converting')
25
- ORDER BY created_at DESC;
26
- ```
27
- Source path is usually `docs/source/`. **Read it first.**
28
-
29
- 2. **Check design decisions:**
30
- ```sql
31
- SELECT topic, summary FROM design_context
32
- WHERE topic ILIKE '%<viz-name>%';
33
- ```
34
-
35
- ## SVG Layout Patterns
36
-
37
- When building new SVG-based viz:
38
- - Define all layout constants at top (`W`, `H`, column x-centers, box dimensions)
39
- - Build path builders as pure functions
40
- - Separate data from rendering
41
- - Use `viewBox` for responsive scaling
42
- - Animate with appropriate motion libraries
43
-
44
- ```tsx
45
- const W = 980, H = 570;
46
- const COL_A = 80, COL_B = 240, COL_C = 435;
47
-
48
- function pathTo(x1: number, y1: number, x2: number, y2: number): string {
49
- const mx = (x1 + x2) / 2;
50
- return `M ${x1} ${y1} C ${mx} ${y1} ${mx} ${y2} ${x2} ${y2}`;
51
- }
52
- ```
53
-
54
- ## Viz Component Contract
55
-
56
- ```tsx
57
- "use client";
58
- import * as React from "react";
59
- import { cva, type VariantProps } from "class-variance-authority";
60
- import { cn } from "../lib/utils";
61
-
62
- // CVA variants required on every new viz component
63
- const myVizVariants = cva("relative w-full", {
64
- variants: {
65
- layout: { single: "", double: "flex flex-col", grid: "" },
66
- density: { compact: "", comfortable: "", spacious: "" },
67
- },
68
- defaultVariants: { layout: "single", density: "comfortable" },
69
- });
70
-
71
- interface MyVizProps
72
- extends React.HTMLAttributes<HTMLDivElement>,
73
- VariantProps<typeof myVizVariants> {}
74
-
75
- const MyViz = React.forwardRef<HTMLDivElement, MyVizProps>(
76
- ({ className, layout, density, ...props }, ref) => (
77
- <div ref={ref} className={cn(myVizVariants({ layout, density }), className)} {...props} />
78
- )
79
- );
80
- MyViz.displayName = "MyViz";
81
- export { MyViz, myVizVariants };
82
- ```
83
-
84
- Export from package's index after building.
85
-
86
- ## Registering New Viz Components
87
-
88
- After completing:
89
- ```sql
90
- INSERT INTO prototype_registry (name, component, source_path, notes, created_by)
91
- VALUES (
92
- 'MyViz v1.0',
93
- 'MyViz',
94
- 'packages/ui/src/components/my-viz.tsx',
95
- 'Production component. Props: <list key props>',
96
- 'agent'
97
- );
98
- ```
99
-
100
- ## Safety Rules
101
-
102
- - Branch: development branch — auto-commit
103
- - NEVER run `pnpm build`
104
- - Reduce motion: always wrap animations with appropriate hooks
105
- - NEVER overlap with other agents on the same component file
106
- - Write tests FIRST — red → implement → green
1
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
2
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
3
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
4
+
5
+ > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first (fallback: `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md`).
6
+
7
+
8
+ # rdc:viz — Visualization Agent
9
+
10
+ ## Mandatory First Steps
11
+
12
+ Read BOTH guides before ANY code:
13
+ ```
14
+ {PROJECT_ROOT}/.rdc/guides/frontend.md (fallback: {PROJECT_ROOT}/.rdc/guides/frontend.md)
15
+ {PROJECT_ROOT}/.rdc/guides/design.md (fallback: {PROJECT_ROOT}/.rdc/guides/design.md)
16
+ ```
17
+
18
+ ## Before Writing Any Code
19
+
20
+ 1. **Check for existing prototypes:**
21
+ ```sql
22
+ SELECT name, component, source_path, status, notes
23
+ FROM prototype_registry
24
+ WHERE status IN ('prototype', 'converting')
25
+ ORDER BY created_at DESC;
26
+ ```
27
+ Source path is usually `docs/source/`. **Read it first.**
28
+
29
+ 2. **Check design decisions:**
30
+ ```sql
31
+ SELECT topic, summary FROM design_context
32
+ WHERE topic ILIKE '%<viz-name>%';
33
+ ```
34
+
35
+ ## SVG Layout Patterns
36
+
37
+ When building new SVG-based viz:
38
+ - Define all layout constants at top (`W`, `H`, column x-centers, box dimensions)
39
+ - Build path builders as pure functions
40
+ - Separate data from rendering
41
+ - Use `viewBox` for responsive scaling
42
+ - Animate with appropriate motion libraries
43
+
44
+ ```tsx
45
+ const W = 980, H = 570;
46
+ const COL_A = 80, COL_B = 240, COL_C = 435;
47
+
48
+ function pathTo(x1: number, y1: number, x2: number, y2: number): string {
49
+ const mx = (x1 + x2) / 2;
50
+ return `M ${x1} ${y1} C ${mx} ${y1} ${mx} ${y2} ${x2} ${y2}`;
51
+ }
52
+ ```
53
+
54
+ ## Viz Component Contract
55
+
56
+ ```tsx
57
+ "use client";
58
+ import * as React from "react";
59
+ import { cva, type VariantProps } from "class-variance-authority";
60
+ import { cn } from "../lib/utils";
61
+
62
+ // CVA variants required on every new viz component
63
+ const myVizVariants = cva("relative w-full", {
64
+ variants: {
65
+ layout: { single: "", double: "flex flex-col", grid: "" },
66
+ density: { compact: "", comfortable: "", spacious: "" },
67
+ },
68
+ defaultVariants: { layout: "single", density: "comfortable" },
69
+ });
70
+
71
+ interface MyVizProps
72
+ extends React.HTMLAttributes<HTMLDivElement>,
73
+ VariantProps<typeof myVizVariants> {}
74
+
75
+ const MyViz = React.forwardRef<HTMLDivElement, MyVizProps>(
76
+ ({ className, layout, density, ...props }, ref) => (
77
+ <div ref={ref} className={cn(myVizVariants({ layout, density }), className)} {...props} />
78
+ )
79
+ );
80
+ MyViz.displayName = "MyViz";
81
+ export { MyViz, myVizVariants };
82
+ ```
83
+
84
+ Export from package's index after building.
85
+
86
+ ## Registering New Viz Components
87
+
88
+ After completing:
89
+ ```sql
90
+ INSERT INTO prototype_registry (name, component, source_path, notes, created_by)
91
+ VALUES (
92
+ 'MyViz v1.0',
93
+ 'MyViz',
94
+ 'packages/ui/src/components/my-viz.tsx',
95
+ 'Production component. Props: <list key props>',
96
+ 'agent'
97
+ );
98
+ ```
99
+
100
+ ## Safety Rules
101
+
102
+ - Branch: development branch — auto-commit
103
+ - NEVER run `pnpm build`
104
+ - Reduce motion: always wrap animations with appropriate hooks
105
+ - NEVER overlap with other agents on the same component file
106
+ - Write tests FIRST — red → implement → green
@@ -1,17 +1,17 @@
1
- # Orchestration Epic Guide
2
-
3
- An orchestration epic governs a repeatable build, test, or delivery workflow
4
- rather than one feature. It must define:
5
-
6
- 1. Exact trigger surfaces and deterministic scope classification.
7
- 2. The isolated environment model and live-system boundaries.
8
- 3. Happy, repair, rollback, and block paths.
9
- 4. A suite matrix with machine-checkable evidence.
10
- 5. Bounded repair attempts and semantic escalation.
11
- 6. Definition-of-Done, exit gates, and a durable receipt schema.
12
- 7. The hook, skill, validator, commit gate, or deployment gate that prevents bypass.
13
- 8. How RDC planning, build, refactor, review, and validators discover it.
14
-
15
- At minimum, prove trigger clarity, worker isolation, subsystem coverage,
16
- bounded repair, evidence-preserving block behavior, durable receipts, active
17
- enforcement, and closure with no pending required work.
1
+ # Orchestration Epic Guide
2
+
3
+ An orchestration epic governs a repeatable build, test, or delivery workflow
4
+ rather than one feature. It must define:
5
+
6
+ 1. Exact trigger surfaces and deterministic scope classification.
7
+ 2. The isolated environment model and live-system boundaries.
8
+ 3. Happy, repair, rollback, and block paths.
9
+ 4. A suite matrix with machine-checkable evidence.
10
+ 5. Bounded repair attempts and semantic escalation.
11
+ 6. Definition-of-Done, exit gates, and a durable receipt schema.
12
+ 7. The hook, skill, validator, commit gate, or deployment gate that prevents bypass.
13
+ 8. How RDC planning, build, refactor, review, and validators discover it.
14
+
15
+ At minimum, prove trigger clarity, worker isolation, subsystem coverage,
16
+ bounded repair, evidence-preserving block behavior, durable receipts, active
17
+ enforcement, and closure with no pending required work.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.35.21",
3
+ "version": "0.35.23",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -70,7 +70,7 @@ function filesModifiedSince(cwd, baseSha) {
70
70
  const tracked = gitIn(cwd, ["diff", "--name-only", `${baseSha}..HEAD`]);
71
71
  const untracked = gitIn(cwd, ["ls-files", "--others", "--exclude-standard"]);
72
72
  const set = new Set();
73
- for (const line of (tracked + "\n" + untracked).split(/\r?\n/)) {
73
+ for (const line of `${tracked}\n${untracked}`.split(/\r?\n/)) {
74
74
  const p = line.trim();
75
75
  if (p) set.add(p.replace(/\\/g, "/"));
76
76
  }
@@ -87,7 +87,17 @@ function writePreconditionFiles(worktreePath, files) {
87
87
  }
88
88
  }
89
89
 
90
- function spawnHiddenShell(command, args, { cwd, env, timeoutMs }) {
90
+ // Exported so other callers that need the same Windows-safe spawn+quote+timeout
91
+ // behavior (e.g. scripts/rdc-design-compare-cli.mjs dispatching a design brief to
92
+ // both engines) reuse this instead of reimplementing argv quoting. See
93
+ // agent-bootstrap.md §Reuse Existing Subsystem APIs.
94
+ //
95
+ // `stdin`, when provided, is written to the child's stdin and the pipe is then
96
+ // closed — this is how a large prompt (bigger than Windows' ~8191-char command
97
+ // line limit) gets to the child without going through argv at all. When
98
+ // `stdin` is omitted, the child's stdin is closed immediately (`"ignore"`),
99
+ // preserving the exact prior behavior for existing callers (spawnClaude/spawnCodex).
100
+ export function spawnHiddenShell(command, args, { cwd, env, timeoutMs, stdin }) {
91
101
  return new Promise((resolve) => {
92
102
  let settled = false;
93
103
  let stdout = "";
@@ -99,11 +109,16 @@ function spawnHiddenShell(command, args, { cwd, env, timeoutMs }) {
99
109
  // which is harmless here. Quote each arg so the shell preserves prompts
100
110
  // with spaces/metacharacters as single argv tokens.
101
111
  const safeArgs = args.map((arg) => JSON.stringify(String(arg)));
102
- child = spawn(command, safeArgs, { cwd, env, shell: true, windowsHide: true, stdio: ["ignore", "pipe", "pipe"] });
112
+ const stdioIn = typeof stdin === "string" ? "pipe" : "ignore";
113
+ child = spawn(command, safeArgs, { cwd, env, shell: true, windowsHide: true, stdio: [stdioIn, "pipe", "pipe"] });
103
114
  } catch (e) {
104
115
  resolve({ exit: -1, stdout: "", stderr: `spawn failed: ${e.message}`, timedOut: false });
105
116
  return;
106
117
  }
118
+ if (typeof stdin === "string") {
119
+ child.stdin.on("error", () => {}); // EPIPE if the child exits before we finish writing
120
+ child.stdin.end(stdin);
121
+ }
107
122
  const timer = setTimeout(() => {
108
123
  if (settled) return;
109
124
  try { child.kill("SIGKILL"); } catch {}
@@ -116,7 +131,7 @@ function spawnHiddenShell(command, args, { cwd, env, timeoutMs }) {
116
131
  if (settled) return;
117
132
  clearTimeout(timer);
118
133
  settled = true;
119
- resolve({ exit: -1, stdout, stderr: stderr + `\nspawn error: ${e.message}`, timedOut: false });
134
+ resolve({ exit: -1, stdout, stderr: `${stderr}\nspawn error: ${e.message}`, timedOut: false });
120
135
  });
121
136
  child.on("close", (code) => {
122
137
  if (settled) return;
@@ -172,7 +187,7 @@ export function parseContentRange(header) {
172
187
  const m = header.match(/\/(\d+|\*)\s*$/);
173
188
  if (!m) return 0;
174
189
  if (m[1] === "*") return 0;
175
- const n = parseInt(m[1], 10);
190
+ const n = Number.parseInt(m[1], 10);
176
191
  return Number.isFinite(n) ? n : 0;
177
192
  }
178
193