Parent: #66.
Bun.FileSystemRouter constructs MatchedRoute.src through URL.joinWrite. Home's local normalizeURLPath always prefixes the normalized result with /, while Bun's live URL::join_normalize delegates to relative normalize_string_buf. joinWrite then writes the origin plus its own /, so Home produces https://nextjs.org//_next/static/posts/[id].tsx instead of Bun's https://nextjs.org/_next/static/posts/[id].tsx.
Port the relative normalization result and adjust the direct URL.joinNormalize oracle. Verify dot-segment collapse and full joinWrite output with an origin and slash-delimited asset prefix. Audit the only callers so bundler public paths retain one separator.
Acceptance keeps the unchanged filesystem-router assertion and existing URL tests green without trimming the final string at the call site.