2b021a9b fix(core): carry stubbed terminal outputs out of band
The paths moved out of `terminalOutput` and into a required
`stubbedTerminalOutputs` id->path map, with `terminalOutput` deleted on the
wire. The field held either bytes or a path before, distinguished only by an
optional sibling array, so a transport that stubbed but forgot to rehydrate
compiled clean and handed a plugin a filename shaped exactly like real output.
A stubbed result now carries no output at all, making that a missing value
instead.
Every transport declares the possibly-stubbed shape it actually carries
(`MaybeStubbedPostTasksExecutionContext`): the daemon client, the daemon
message type and its server handler, the plugin messaging payload,
`runPostTasksExecution`, and `LoadedNxPlugin`.
That wrapper is now the single rehydration point, so the redundant read in
`plugin-worker` is gone -- `loadResolvedNxPluginAsync` returns a
`LoadedNxPlugin`, whose wrapper rehydrates anyway. Rehydration stays there
rather than moving above the `Promise.all` in `tasks-execution-hooks`: hoisting
it would have the daemon read every output into the host process and then
re-stub for the isolated hop, which is the memory profile this change removes.
`basename()` keeps the read sink inside the cache dir. `getCustomHasher` lets a
plugin return any string for a hash, and a hash that needs stripping resolves
to a file that does not exist, which falls back to sending the output inline.
Tests pin the four behaviors that were load-bearing but unpinned: no path left
behind for an unrehydrated reader, a newly stubbable result joining an
already-stubbed context, the caller's context not being mutated, and an empty
output round tripping to `""` rather than being dropped by a truthiness check. a1a5af1f chore(repo): replace ui-courses file dependencies with workspace links (#36856)
## Current Behavior
Every `pnpm install` in this repo resolves the full dependency graph,
even when no manifest and no lockfile line has changed. There is a fast
path for that case, `optimistic-repeat-install`, which prints "Already
up to date" and exits. That fast path switches off as soon as any
workspace manifest declares a `file:` dependency, because pnpm cannot
tell whether the referenced directory changed. The library
`nx-dev/ui-courses` declared six sibling libraries that way. The check
stops at the first `file:` specifier it finds across all manifests.
Those six lines cost every developer a full resolution of all 121
projects.
```
$ pnpm install # second run, nothing changed
Scope: all 121 workspace projects
Done in 5.5s using pnpm v11.22.0
```
## Expected Behavior
A repeat `pnpm install` takes about 258ms instead of 5.5s, and says it
had nothing to do.
```
$ pnpm install # second run, nothing changed
Scope: all 121 workspace projects
Already up to date
Done in 258ms using pnpm v11.22.0
```
The six libraries resolve to symlinks pointing at their sources,
matching every other library under `nx-dev/`.
## Related Issue(s)
NXC-4889
## Implementation Notes
- `@nx/nx-dev-ui-primitives` already used `workspace:*`, and
`@nx/nx-dev-ui-icons` already resolved to a link despite its `file:`
specifier. The lockfile drops five package entries, not seven.
- `nx-dev/ui-courses` held the only `file:` dependencies left in the
workspace, so no other project needs the same change.
<!-- polygraph-session-start -->
---
<p><a
href="https://app.trypolygraph.com/orgs/6a061dcb561c062131116eca/sessions/nxc-4889-f19e8c9c">View
Polygraph session ↗</a></p>
<!-- polygraph-session-end -->