Skip to content

test(examples-chat): pin no-nav-loop invariant#541

Merged
blove merged 2 commits into
mainfrom
claude/nav-loop-test
May 25, 2026
Merged

test(examples-chat): pin no-nav-loop invariant#541
blove merged 2 commits into
mainfrom
claude/nav-loop-test

Conversation

@blove

@blove blove commented May 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a regression guard for the URL↔signal sync invariant that every PR in the routing chain (#500/#504/#514/#518/#527) was dancing around: when the URL→signal effect hydrates threadIdSignal from /embed/<id>, the signal→URL effect MUST see signal===urlId and short-circuit. Without the guard we'd loop:

URL → signal → router.navigate → URL → signal → ...

The test asserts zero NavigationEnd events fire between initial navigateByUrl and end of detectChanges — proving the compare-and-set guard at demo-shell.component.ts (signal→URL effect) does its job.

Follow-up: Minting service Vercel deploy

Unrelated to this PR but worth flagging: the Minting service deploy job has been red on the last 4 main runs. Error:

The provided path "~/work/.../apps/minting-service/apps/minting-service" does not exist

The Vercel project for minting-service has its Root Directory set to apps/minting-service in the Vercel dashboard. The workflow runs vercel pull from working-directory: apps/minting-service, so Vercel computes the root as <cwd>/<configured-root> and the path doubles.

Fix (Vercel dashboard, no code change required): set the project's Root Directory to empty/blank.

Test plan

  • 33/33 examples-chat-angular unit tests passing locally (18 in demo-shell.spec, +1 new)
  • CI green on this PR

🤖 Generated with Claude Code

Adds a regression guard for the invariant every PR in the routing
chain (#500/#504/#514/#518/#527) was dancing around: when the URL→
signal effect hydrates threadIdSignal from /embed/<id>, the
signal→URL effect MUST see signal === urlState().threadId and
short-circuit. Without that guard we'd loop:
  URL → signal → router.navigate → URL → ...

The test asserts zero NavigationEnd events fire between the initial
navigateByUrl and the end of detectChanges — proving the compare-
and-set guard at demo-shell.component.ts (signal→URL effect) does
its job.

33/33 examples-chat-angular unit tests passing locally.
@vercel

vercel Bot commented May 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
threadplane Ready Ready Preview, Comment May 25, 2026 4:58pm

Request Review

@blove blove merged commit 4e111a6 into main May 25, 2026
26 checks passed
blove added a commit that referenced this pull request Jun 9, 2026
* test(examples-chat): pin no-nav-loop invariant in URL↔signal sync

Adds a regression guard for the invariant every PR in the routing
chain (#500/#504/#514/#518/#527) was dancing around: when the URL→
signal effect hydrates threadIdSignal from /embed/<id>, the
signal→URL effect MUST see signal === urlState().threadId and
short-circuit. Without that guard we'd loop:
  URL → signal → router.navigate → URL → ...

The test asserts zero NavigationEnd events fire between the initial
navigateByUrl and the end of detectChanges — proving the compare-
and-set guard at demo-shell.component.ts (signal→URL effect) does
its job.

33/33 examples-chat-angular unit tests passing locally.

* test: remove unused vi import (broke Angular build)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant