feat(core): show Cloud app link for remote cache instead of docs - #36460
Merged
Conversation
Contributor
|
View your CI Pipeline Execution ↗ for commit de534c0
☁️ Nx Cloud last updated this comment at |
✅ Deploy Preview for nx-dev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for nx-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
jaysoo
force-pushed
the
NXC-4701
branch
2 times, most recently
from
July 27, 2026 17:37
7833d86 to
e295690
Compare
jaysoo
force-pushed
the
NXC-4701
branch
4 times, most recently
from
July 28, 2026 15:13
f2c6360 to
6ffbcb5
Compare
jaysoo
marked this pull request as ready for review
July 28, 2026 20:19
jaysoo
force-pushed
the
NXC-4701
branch
3 times, most recently
from
July 28, 2026 20:40
35f4a4c to
42a14a8
Compare
jaysoo
force-pushed
the
NXC-4701
branch
3 times, most recently
from
July 28, 2026 21:28
8a78b52 to
5530d39
Compare
Contributor
There was a problem hiding this comment.
Nx Cloud has identified a flaky task in your failed CI:
🔂 Since the failure was identified as flaky, we triggered a CI rerun by adding an empty commit to this branch.
🔔 Heads up, your workspace has pending recommendations ↗ to auto-apply fixes for similar failures.
🎓 Learn more about Self-Healing CI on nx.dev
…ding ## Current Behavior The performance report's remote-cache recommendation links to the docs (nx.dev/ci/features/remote-cache). ## Expected Behavior For a disconnected workspace, the CTA links to a short Nx Cloud onboarding URL instead. `forceGithub` routes the user through the VCS provider flow, where Cloud connects the repo and opens the nx.json PR - the CLI never generates or writes an nxCloudId, and never lands on the manual paste-a-token page. Fire-and-forget URL fetch; the docs link stays as the fallback (CI, cloud-disabled, already-connected, or if the fetch hasn't resolved by the time the report renders). ## Related Issue(s) NXC-4701
Promise.race stops the caller waiting but never cancels the loser, and the two axios calls in url-shorten have no timeout (axios defaults to none), so the socket kept the event loop alive long after the report had already fallen back to the get-started link. CLI entry points hide this behind their hard process.exit; releasePublish is a public programmatic export that returns to its caller, and hung there until the OS gave up on the connection. Thread an optional AbortSignal through createNxCloudOnboardingURL and abort it when the timer wins. The parameter is optional, so the other call sites are unaffected.
Nx Console no longer carries a copy of createNxCloudOnboardingURL. Its getCloudOnboardingUrl shells out to `nx@latest connect` and scrapes the URL from stdout, so it picks up changes here through the CLI rather than through duplicated source. Verified against a clone of nrwl/nx-console at 0fb5616: no hits for createNxCloudOnboardingURL, getInstallationSupportsGitHub, getURLifShortenFailed, isGithubIntegrationEnabled, forceGithub, nx-cloud/system/features, nx-cloud/onboarding or connect-workspace, and no url-shorten file.
AgentEnder
pushed a commit
that referenced
this pull request
Aug 4, 2026
…on (#36558) ## Current Behavior Three problems in the `review-pr` skill, found by instrumenting a review of #36460. **1. The pipeline re-establishes the same facts many times per run.** On a **105-line delta**, nine agents spent roughly **755k tokens** across ~246 tool calls, much of it the same work repeated: | fact | independently re-derived by | | --- | --- | | `{ signal: undefined }` is inert in axios | 6 agents (+ the orchestrator) | | every call site passes ≤6 positional args | 5 agents | | the four carried-open items still hold | 4 agents (+ the orchestrator) | | `create-nx-workspace`'s dynamic `require` forces a positional param | 3 agents | | the timeout releases the event loop | 3 agents rebuilt a harness for a fact Step 4.7 had already measured | Step 4.7 ("measure shared load-bearing claims ONCE") already exists and did fire that round, so this is an under-triggered mechanism, not a missing one. Its four signals all describe claims a diff makes **about itself**; the facts above live in the code **around** the diff. Separately, the re-review carry-forward tells every agent to "verify whether these still hold" — N repeats of reads the orchestrator can do once. **2. There was no step for the tracking ticket.** A lot of work in this repo is tracked in Linear, not GitHub. The skill treated an `NXC-…` reference only as *satisfying* the linked-issue check in signal 8 — a fetch target it never fetched. So a PR whose bug report, acceptance criteria and reproduction all lived in Linear was reviewed as though it had no grounding at all, and the reproduce-verifier fell back to inferring intent from the PR body. Across five review attempts of #36460 that produced `NOT_ATTEMPTED` every time, with the ticket sitting there readable. **3. Every agent re-orients from scratch.** On a first review all nine independently work out what the changed module does, who calls it, and what the base did. That is context, not a claim, so Step 4.7 never covered it. ## Expected Behavior **Measure once, more often.** Step 4.7 gains a fifth trigger — a changed shared signature or call contract — and names the facts that species needs measured up front: argument inertness, call-site arity, and whether any consumer reaches the symbol through an untyped dynamic `require` (which decides whether an options-object refactor is even available). It also now asks for each dimension's **corollary** off the rig already standing, rather than the headline conclusion alone: an agent whose question sits one hop away rebuilds the harness regardless. **Fetch the tracking ticket (Step 2).** Extract every `NXC-\d+` (and `linear.app/…` link) from the body and commits, fetch the ticket and its comments — a repro often arrives in a follow-up rather than the original report. The charter carries the problem statement; the verifier receives it as `GROUNDING` **instead of the PR body**, with a `REPRO_CLASSIFICATION` (`RUNNABLE` / `MANUAL_ONLY` / `NONE`) derived once host-side. Where ticket and PR body disagree, that difference is itself reportable. Fails open on no tools, no auth, or an unreadable ticket. Two boundaries come with it. Ticket content **never** reaches the posted draft — nrwl/nx is public and tickets carry embargoed detail — and only the *problem* is shared up front; a comment concluding what the fix should be is rationale, and stays with the Polygraph session until Step 5c so the independent dimensions keep arriving uninformed. **Orient once (charter).** A new `## Orientation` section: changed symbols, their call sites, base behavior, and the entry point that reaches them. Not gated on the diff making a claim — every diff has surrounding code. Call sites and base behavior in; rationale and conclusions out. **Carry-forward flips.** The re-review context changes from "agents, verify these open items" to "the orchestrator re-checked them at HEAD; cite the status", with the dispatch-prompt wording to match. **New "Scoping which agents spawn" section**, two levers at deliberately different bars: - *Content-based* skips need a predicate mechanically decidable from the diff — a docs-only diff genuinely gives the security and performance dimensions nothing to act on. Applies to any review, and generalizes the rule already present for `type-design-analyzer`. "This probably has no security issue" explicitly does **not** qualify. - *Delta-based* judgment skips are confined to **re-reviews**, where unchanged code already has recorded coverage, and must scope **by dimension at stake, never by which files changed** — new code routinely changes what unchanged code means, so a cancellation path can invalidate pre-existing `catch` blocks that never appear in the diff. Every skip is recorded in `## Failures`; a skipped agent stays not-applicable and never forces `verdict: failed`, which remains reserved for an agent that ran and could not prove it read anything. The EVIDENCE bar for agents that *do* run is unchanged. Scoping by PR-level tier stays prohibited. Two downstream rules that contradicted the ticket fetch are corrected: a Linear-only PR is no longer described as an expected `NOT_ATTEMPTED`, and signal 5 now treats a tracking ticket as corroboration instead of pushing a tracked, triaged change toward `blocked` for the sole reason that its tracker is not GitHub. `PIPELINE_VERSION` 4 → 5 so drafts from the old criteria age out of the SHA dedup. `allowed-tools` grants the two read-only Linear tools so the fetch does not prompt. ## Expected impact Honest split, since one of these is not a saving: | scenario | expected token cut | | --- | --- | | First review, ordinary code PR | 10–20% | | First review, signature change | 20–30% | | First review, docs-only | 40–50% | | Re-review, small delta | 35–55% | **The Linear change is a quality fix, not an efficiency one, and may cost more tokens** — the verifier will now run reproductions it previously skipped. That is the point. Docs-only change to a single `.claude/skills/` file — no runtime code, no tests affected. The last two commits are self-review fixes: a `REPRO_CLASSIFICATION` forward reference to an instruction Step 2 did not yet contain, and signal 5's GitHub-only corroboration check. ## Related Issue(s) N/A — follow-up to #36534 (measure-once) and #36557, from measurements taken during a review of #36460. <!-- polygraph-session-start --> --- <p><picture><source media="(prefers-color-scheme: dark)" srcset="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-dark.svg"><img src="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-light.svg" width="16" height="22" align="middle" alt="Polygraph"></picture> <a href="https://app.trypolygraph.com/orgs/6a061dcb561c062131116eca/sessions/Scope-review-pr-agent-dispatch-and-cut-repeat-verification-222c3382">View session ↗</a></p> <!-- polygraph-session-end -->
FrozenPandaz
approved these changes
Aug 4, 2026
ryanhefner
pushed a commit
to ryanhefner/nx
that referenced
this pull request
Aug 4, 2026
…on (nrwl#36558) ## Current Behavior Three problems in the `review-pr` skill, found by instrumenting a review of nrwl#36460. **1. The pipeline re-establishes the same facts many times per run.** On a **105-line delta**, nine agents spent roughly **755k tokens** across ~246 tool calls, much of it the same work repeated: | fact | independently re-derived by | | --- | --- | | `{ signal: undefined }` is inert in axios | 6 agents (+ the orchestrator) | | every call site passes ≤6 positional args | 5 agents | | the four carried-open items still hold | 4 agents (+ the orchestrator) | | `create-nx-workspace`'s dynamic `require` forces a positional param | 3 agents | | the timeout releases the event loop | 3 agents rebuilt a harness for a fact Step 4.7 had already measured | Step 4.7 ("measure shared load-bearing claims ONCE") already exists and did fire that round, so this is an under-triggered mechanism, not a missing one. Its four signals all describe claims a diff makes **about itself**; the facts above live in the code **around** the diff. Separately, the re-review carry-forward tells every agent to "verify whether these still hold" — N repeats of reads the orchestrator can do once. **2. There was no step for the tracking ticket.** A lot of work in this repo is tracked in Linear, not GitHub. The skill treated an `NXC-…` reference only as *satisfying* the linked-issue check in signal 8 — a fetch target it never fetched. So a PR whose bug report, acceptance criteria and reproduction all lived in Linear was reviewed as though it had no grounding at all, and the reproduce-verifier fell back to inferring intent from the PR body. Across five review attempts of nrwl#36460 that produced `NOT_ATTEMPTED` every time, with the ticket sitting there readable. **3. Every agent re-orients from scratch.** On a first review all nine independently work out what the changed module does, who calls it, and what the base did. That is context, not a claim, so Step 4.7 never covered it. ## Expected Behavior **Measure once, more often.** Step 4.7 gains a fifth trigger — a changed shared signature or call contract — and names the facts that species needs measured up front: argument inertness, call-site arity, and whether any consumer reaches the symbol through an untyped dynamic `require` (which decides whether an options-object refactor is even available). It also now asks for each dimension's **corollary** off the rig already standing, rather than the headline conclusion alone: an agent whose question sits one hop away rebuilds the harness regardless. **Fetch the tracking ticket (Step 2).** Extract every `NXC-\d+` (and `linear.app/…` link) from the body and commits, fetch the ticket and its comments — a repro often arrives in a follow-up rather than the original report. The charter carries the problem statement; the verifier receives it as `GROUNDING` **instead of the PR body**, with a `REPRO_CLASSIFICATION` (`RUNNABLE` / `MANUAL_ONLY` / `NONE`) derived once host-side. Where ticket and PR body disagree, that difference is itself reportable. Fails open on no tools, no auth, or an unreadable ticket. Two boundaries come with it. Ticket content **never** reaches the posted draft — nrwl/nx is public and tickets carry embargoed detail — and only the *problem* is shared up front; a comment concluding what the fix should be is rationale, and stays with the Polygraph session until Step 5c so the independent dimensions keep arriving uninformed. **Orient once (charter).** A new `## Orientation` section: changed symbols, their call sites, base behavior, and the entry point that reaches them. Not gated on the diff making a claim — every diff has surrounding code. Call sites and base behavior in; rationale and conclusions out. **Carry-forward flips.** The re-review context changes from "agents, verify these open items" to "the orchestrator re-checked them at HEAD; cite the status", with the dispatch-prompt wording to match. **New "Scoping which agents spawn" section**, two levers at deliberately different bars: - *Content-based* skips need a predicate mechanically decidable from the diff — a docs-only diff genuinely gives the security and performance dimensions nothing to act on. Applies to any review, and generalizes the rule already present for `type-design-analyzer`. "This probably has no security issue" explicitly does **not** qualify. - *Delta-based* judgment skips are confined to **re-reviews**, where unchanged code already has recorded coverage, and must scope **by dimension at stake, never by which files changed** — new code routinely changes what unchanged code means, so a cancellation path can invalidate pre-existing `catch` blocks that never appear in the diff. Every skip is recorded in `## Failures`; a skipped agent stays not-applicable and never forces `verdict: failed`, which remains reserved for an agent that ran and could not prove it read anything. The EVIDENCE bar for agents that *do* run is unchanged. Scoping by PR-level tier stays prohibited. Two downstream rules that contradicted the ticket fetch are corrected: a Linear-only PR is no longer described as an expected `NOT_ATTEMPTED`, and signal 5 now treats a tracking ticket as corroboration instead of pushing a tracked, triaged change toward `blocked` for the sole reason that its tracker is not GitHub. `PIPELINE_VERSION` 4 → 5 so drafts from the old criteria age out of the SHA dedup. `allowed-tools` grants the two read-only Linear tools so the fetch does not prompt. ## Expected impact Honest split, since one of these is not a saving: | scenario | expected token cut | | --- | --- | | First review, ordinary code PR | 10–20% | | First review, signature change | 20–30% | | First review, docs-only | 40–50% | | Re-review, small delta | 35–55% | **The Linear change is a quality fix, not an efficiency one, and may cost more tokens** — the verifier will now run reproductions it previously skipped. That is the point. Docs-only change to a single `.claude/skills/` file — no runtime code, no tests affected. The last two commits are self-review fixes: a `REPRO_CLASSIFICATION` forward reference to an instruction Step 2 did not yet contain, and signal 5's GitHub-only corroboration check. ## Related Issue(s) N/A — follow-up to nrwl#36534 (measure-once) and nrwl#36557, from measurements taken during a review of nrwl#36460. <!-- polygraph-session-start --> --- <p><picture><source media="(prefers-color-scheme: dark)" srcset="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-dark.svg"><img src="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-light.svg" width="16" height="22" align="middle" alt="Polygraph"></picture> <a href="https://app.trypolygraph.com/orgs/6a061dcb561c062131116eca/sessions/Scope-review-pr-agent-dispatch-and-cut-repeat-verification-222c3382">View session ↗</a></p> <!-- polygraph-session-end -->
ryanhefner
pushed a commit
to ryanhefner/nx
that referenced
this pull request
Aug 4, 2026
…l#36460) This PR swaps the docs link in the perf report with a Cloud link instead so the flow is smoother. ## Related Issue(s) NXC-4701 <!-- polygraph-session-start --> --- [View session information ↗](https://snapshot.app.trypolygraph.com/orgs/69cdc268b6aa527e4129c2b4/sessions/ready-jackal-5efe8ef1) <!-- polygraph-session-end --> --------- Co-authored-by: Jason Jean <jason@nrwl.io>
polygraph-snapshot-app Bot
pushed a commit
that referenced
this pull request
Aug 11, 2026
…on (#36558) ## Current Behavior Three problems in the `review-pr` skill, found by instrumenting a review of #36460. **1. The pipeline re-establishes the same facts many times per run.** On a **105-line delta**, nine agents spent roughly **755k tokens** across ~246 tool calls, much of it the same work repeated: | fact | independently re-derived by | | --- | --- | | `{ signal: undefined }` is inert in axios | 6 agents (+ the orchestrator) | | every call site passes ≤6 positional args | 5 agents | | the four carried-open items still hold | 4 agents (+ the orchestrator) | | `create-nx-workspace`'s dynamic `require` forces a positional param | 3 agents | | the timeout releases the event loop | 3 agents rebuilt a harness for a fact Step 4.7 had already measured | Step 4.7 ("measure shared load-bearing claims ONCE") already exists and did fire that round, so this is an under-triggered mechanism, not a missing one. Its four signals all describe claims a diff makes **about itself**; the facts above live in the code **around** the diff. Separately, the re-review carry-forward tells every agent to "verify whether these still hold" — N repeats of reads the orchestrator can do once. **2. There was no step for the tracking ticket.** A lot of work in this repo is tracked in Linear, not GitHub. The skill treated an `NXC-…` reference only as *satisfying* the linked-issue check in signal 8 — a fetch target it never fetched. So a PR whose bug report, acceptance criteria and reproduction all lived in Linear was reviewed as though it had no grounding at all, and the reproduce-verifier fell back to inferring intent from the PR body. Across five review attempts of #36460 that produced `NOT_ATTEMPTED` every time, with the ticket sitting there readable. **3. Every agent re-orients from scratch.** On a first review all nine independently work out what the changed module does, who calls it, and what the base did. That is context, not a claim, so Step 4.7 never covered it. ## Expected Behavior **Measure once, more often.** Step 4.7 gains a fifth trigger — a changed shared signature or call contract — and names the facts that species needs measured up front: argument inertness, call-site arity, and whether any consumer reaches the symbol through an untyped dynamic `require` (which decides whether an options-object refactor is even available). It also now asks for each dimension's **corollary** off the rig already standing, rather than the headline conclusion alone: an agent whose question sits one hop away rebuilds the harness regardless. **Fetch the tracking ticket (Step 2).** Extract every `NXC-\d+` (and `linear.app/…` link) from the body and commits, fetch the ticket and its comments — a repro often arrives in a follow-up rather than the original report. The charter carries the problem statement; the verifier receives it as `GROUNDING` **instead of the PR body**, with a `REPRO_CLASSIFICATION` (`RUNNABLE` / `MANUAL_ONLY` / `NONE`) derived once host-side. Where ticket and PR body disagree, that difference is itself reportable. Fails open on no tools, no auth, or an unreadable ticket. Two boundaries come with it. Ticket content **never** reaches the posted draft — nrwl/nx is public and tickets carry embargoed detail — and only the *problem* is shared up front; a comment concluding what the fix should be is rationale, and stays with the Polygraph session until Step 5c so the independent dimensions keep arriving uninformed. **Orient once (charter).** A new `## Orientation` section: changed symbols, their call sites, base behavior, and the entry point that reaches them. Not gated on the diff making a claim — every diff has surrounding code. Call sites and base behavior in; rationale and conclusions out. **Carry-forward flips.** The re-review context changes from "agents, verify these open items" to "the orchestrator re-checked them at HEAD; cite the status", with the dispatch-prompt wording to match. **New "Scoping which agents spawn" section**, two levers at deliberately different bars: - *Content-based* skips need a predicate mechanically decidable from the diff — a docs-only diff genuinely gives the security and performance dimensions nothing to act on. Applies to any review, and generalizes the rule already present for `type-design-analyzer`. "This probably has no security issue" explicitly does **not** qualify. - *Delta-based* judgment skips are confined to **re-reviews**, where unchanged code already has recorded coverage, and must scope **by dimension at stake, never by which files changed** — new code routinely changes what unchanged code means, so a cancellation path can invalidate pre-existing `catch` blocks that never appear in the diff. Every skip is recorded in `## Failures`; a skipped agent stays not-applicable and never forces `verdict: failed`, which remains reserved for an agent that ran and could not prove it read anything. The EVIDENCE bar for agents that *do* run is unchanged. Scoping by PR-level tier stays prohibited. Two downstream rules that contradicted the ticket fetch are corrected: a Linear-only PR is no longer described as an expected `NOT_ATTEMPTED`, and signal 5 now treats a tracking ticket as corroboration instead of pushing a tracked, triaged change toward `blocked` for the sole reason that its tracker is not GitHub. `PIPELINE_VERSION` 4 → 5 so drafts from the old criteria age out of the SHA dedup. `allowed-tools` grants the two read-only Linear tools so the fetch does not prompt. ## Expected impact Honest split, since one of these is not a saving: | scenario | expected token cut | | --- | --- | | First review, ordinary code PR | 10–20% | | First review, signature change | 20–30% | | First review, docs-only | 40–50% | | Re-review, small delta | 35–55% | **The Linear change is a quality fix, not an efficiency one, and may cost more tokens** — the verifier will now run reproductions it previously skipped. That is the point. Docs-only change to a single `.claude/skills/` file — no runtime code, no tests affected. The last two commits are self-review fixes: a `REPRO_CLASSIFICATION` forward reference to an instruction Step 2 did not yet contain, and signal 5's GitHub-only corroboration check. ## Related Issue(s) N/A — follow-up to #36534 (measure-once) and #36557, from measurements taken during a review of #36460. <!-- polygraph-session-start --> --- <p><picture><source media="(prefers-color-scheme: dark)" srcset="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-dark.svg"><img src="https://static.ops.cloud.nx.app/polygraph/session-logo-v4-light.svg" width="16" height="22" align="middle" alt="Polygraph"></picture> <a href="https://app.trypolygraph.com/orgs/6a061dcb561c062131116eca/sessions/Scope-review-pr-agent-dispatch-and-cut-repeat-verification-222c3382">View session ↗</a></p> <!-- polygraph-session-end -->
polygraph-snapshot-app Bot
pushed a commit
that referenced
this pull request
Aug 11, 2026
) This PR swaps the docs link in the perf report with a Cloud link instead so the flow is smoother. ## Related Issue(s) NXC-4701 <!-- polygraph-session-start --> --- [View session information ↗](https://snapshot.app.trypolygraph.com/orgs/69cdc268b6aa527e4129c2b4/sessions/ready-jackal-5efe8ef1) <!-- polygraph-session-end --> --------- Co-authored-by: Jason Jean <jason@nrwl.io>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR swaps the docs link in the perf report with a Cloud link instead so the flow is smoother.
Related Issue(s)
NXC-4701
View session information ↗