Conversation
🎩 PreviewA preview build has been created at: |
This was referenced Sep 18, 2026
Draft
Collaborator
Author
camielvs
marked this pull request as draft
September 19, 2026 00:08
This was referenced Sep 19, 2026
This was referenced Sep 22, 2026
Tangent's UI is a bundle fetched from its own origin at runtime, and the provider waits on that import without watching for it to fail. A Tangent that is not running left the page blank for good, with only an uncaught rejection in the console to say why. The import is now made here as well, which is what makes the failure observable — module imports are cached per url, so the provider's own import resolves against this one rather than fetching twice, and the same url is handed to the provider so the two cannot disagree about what was tried. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
camielvs
force-pushed
the
09-18-feat_say_when_tangent_is_unreachable
branch
from
September 23, 2026 20:57
fe2475f to
837e4ed
Compare
camielvs
force-pushed
the
09-18-feat_open_a_project_in_tangent
branch
from
September 23, 2026 20:57
58773a0 to
46de677
Compare
This branch has not been deployed
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.

Now that a project tile and a freshly created project both open a Tangent session, a Tangent that isn't running is something you land on rather than something you have to go looking for. Today that shows a blank page, with only an uncaught rejection in the console to say why.
Why not an error boundary
The failure is an async rejection, not a render error, so a boundary would never catch it.
TangentProviderdoes:There's no
.catch. When the import rejects,readystaysfalseforever and the provider renders<tangent-provider>withnullchildren — hence the blank page.How this observes it
loadEmbedRuntimeisn't exported from@tangent/embed-react, souseTangentRuntimeperforms the same dynamic import and watches both outcomes. Module imports are cached per URL by the browser, so this does not fetch twice — the provider's own import resolves against this one.To remove any chance of the probe and the provider disagreeing about what was tried, the URL is built once and passed to the provider via its existing
channelUrlprop (which is documented as defaulting to exactly this path).A failed module import stays failed for the life of the document, so Try again reloads the page rather than retrying in place.
Scope
TangentProjectPagegains two lines and an early return; the view is its own component so it can be tested — nothing underTangent/has component tests, only hooks and services.Testing
pnpm run validateclean; 2984 tests pass, 6 new.Verified in a real browser against the dev server with
tangent-shellon and no Tangent running: the page now shows the box instead of blank, in both light and dark, and the two uncaughtTypeError: Failed to fetch dynamically imported modulerejections are gone (the early return means the provider never starts its unhandled import). TheERR_CONNECTION_REFUSEDnetwork log remains, as it must.Not verified: the path where Tangent is reachable — it isn't set up locally. That path is unchanged apart from receiving an explicit
channelUrlequal to the default it already computed.🤖 Generated with Claude Code