@vzn/vx 0.0.146 → 0.0.148

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.
package/README.md CHANGED
@@ -155,15 +155,16 @@ tasks per row, medians; vx first, theirs second.
155
155
  | [medusajs/medusa](https://github.com/medusajs/medusa) | Turbo | 308 s / 315 s | 3.86 s / 7.16 s | 947 ms / 3.29 s |
156
156
  | [n8n-io/n8n](https://github.com/n8n-io/n8n) | Turbo | 137.2 s / **133.7 s** | 8.27 s / 12.5 s | 842 ms / 1.36 s |
157
157
  | [calcom/cal.com](https://github.com/calcom/cal.com) | Turbo | 245.7 s / 250.7 s | 17.4 s / 19.9 s | 14.7 s / 18.5 s |
158
- | [TanStack/query](https://github.com/TanStack/query) | Nx | 47.4 s / 55.1 s | 656 ms / 1.98 s | 174 ms / 1.88 s |
158
+ | [TanStack/query](https://github.com/TanStack/query) | Nx | 34.6 s / 37.1 s | 910 ms / 1.62 s | 291 ms / 1.60 s |
159
159
  | [strapi/strapi](https://github.com/strapi/strapi) | Nx | 238.2 s / 245.7 s | 1.61 s / 3.94 s | 341 ms / 4.02 s |
160
160
  | [novuhq/novu](https://github.com/novuhq/novu) | Nx | 291.2 s / 299.4 s | 3.10 s / 9.05 s | 655 ms / 8.55 s |
161
- | [TanStack/router](https://github.com/TanStack/router) | Nx | 199.9 s / 226.7 s | 1.00 s / 3.33 s | 505 ms / 3.21 s |
161
+ | [TanStack/router](https://github.com/TanStack/router) | Nx | 123.0 s / 138.0 s | 1.27 s / 3.82 s | 626 ms / 3.91 s |
162
162
  | [refinedev/refine](https://github.com/refinedev/refine) | Nx | 96.2 s / 105.9 s | 1.06 s / 1.19 s | 303 ms / 1.16 s |
163
163
 
164
164
  **Bold** marks the other tool winning. Versions, revisions, scopes and
165
165
  harness per repo: [benchmarks](packages/vx/docs/benchmarks.md) (astro
166
- and refine as re-measured on 2026-09-27, the rest 2026-09-10 and -11).
166
+ and refine as re-measured on 2026-09-27, TanStack/query and
167
+ TanStack/router through `nx()` on 2026-09-28, the rest 2026-09-10 and -11).
167
168
 
168
169
  ## How it compares
169
170
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vzn/vx",
3
- "version": "0.0.146",
3
+ "version": "0.0.148",
4
4
  "description": "A fast, correct task runner and build cache for JavaScript monorepos.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -17,10 +17,10 @@
17
17
  "node": ">=18"
18
18
  },
19
19
  "optionalDependencies": {
20
- "@vzn/vx-linux-x64": "0.0.146",
21
- "@vzn/vx-linux-arm64": "0.0.146",
22
- "@vzn/vx-darwin-x64": "0.0.146",
23
- "@vzn/vx-darwin-arm64": "0.0.146"
20
+ "@vzn/vx-linux-x64": "0.0.148",
21
+ "@vzn/vx-linux-arm64": "0.0.148",
22
+ "@vzn/vx-darwin-x64": "0.0.148",
23
+ "@vzn/vx-darwin-arm64": "0.0.148"
24
24
  },
25
25
  "dependencies": {
26
26
  "@anthropic-ai/sandbox-runtime": "^0.0.76"
@@ -1324,7 +1324,10 @@ async function runSandboxedOnce(
1324
1324
  const { wrapped, tag, srtCommand, baselines, forwardsSignals, traced } =
1325
1325
  await wrapSandboxedCommand({ ...args, ...(useStrace ? { trace: useStrace } : {}) })
1326
1326
  const takeRecords = collectRecords(SandboxManager.getSandboxViolationStore(), srtCommand)
1327
- const straceLog = traced ? path.join(os.tmpdir(), `vx-strace-${tag}.log`) : undefined
1327
+ // Beside the task directories, which every sandbox replaces with its own:
1328
+ // in the shared temp dir a concurrent task read this log, every path
1329
+ // this task opened (L-25).
1330
+ const straceLog = traced ? path.join(taskTmpRoot(), `vx-strace-${tag}.log`) : undefined
1328
1331
  if (straceLog) unlinkOnExit(straceLog)
1329
1332
  let proc: ReturnType<typeof Bun.spawn>
1330
1333
  let traceFd: number | undefined
@@ -227,10 +227,11 @@ function predictPlan(tasks: PlannedTask[]): PlanPrediction {
227
227
  const byId = new Map(tasks.map((t) => [t.node.id, t]))
228
228
  const dependents = new Map<string, string[]>()
229
229
  const indeg = new Map<string, number>()
230
+ // Every dep is a planned task: the task graph refuses a dep it does not
231
+ // hold, and every task of it runs in plan().
230
232
  for (const t of tasks) {
231
- const deps = t.deps.filter((d) => byId.has(d))
232
- indeg.set(t.node.id, deps.length)
233
- for (const d of deps) {
233
+ indeg.set(t.node.id, t.deps.length)
234
+ for (const d of t.deps) {
234
235
  const list = dependents.get(d)
235
236
  if (list) list.push(t.node.id)
236
237
  else dependents.set(d, [t.node.id])