Repository navigation
feat(frontend): move the start sequence into an exported bootstrap() - #998
Merged
smart-ssh-coordinator[bot] merged 1 commit intoOct 27, 2026
Conversation
…882) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
11 tasks
11 tasks
There was a problem hiding this comment.
Review
Verdict: approved
Review level: normal
Blocking
- None.
Non-blocking
- None.
Verified
- AC1:
bootstrap()with the three options;main.tsxis only the CSS import +await bootstrap()(read: bootstrap.tsx, main.tsx) - AC2 tests mapped 1:1 to
src/bootstrap.test.tsx(read): platform →sets the platform attribute; PROD on/off →installs the context-menu suppression only in production; order →runs getStartupState, initI18n, beforeRender, then renders; rejecting hook →logs a rejecting beforeRender and still renders; extensions locked/unlocked + throwing →renders extensions only when unlocked…; wrap →passes the App element to wrap… - Start steps and their order match the old main.tsx (diff read); comments kept next to the code
- counter-proof: not applicable, new feature (refactor)
- edge cases: no
extensions/wrapgiven → plain<App/>(ok); throwing extension → own ErrorBoundary, App stays (ok) - callers checked:
main.tsx(1 reference in e2e comment only) → ok - tests run locally:
npx vitest run src/bootstrap.test.tsx src/components/StartupGate→ 22 passed (executed);npx tsc -b→ clean (executed) - CI on the PR: all checks green incl. Browser Tests, lint (read: gh pr checks)
- UI: no visible change; Playwright suite is green in CI
Timing analysis
- 1 test file analysed: awaits
findBy*/waitForon final DOM, no fixed waits, no timing dependency found (read)
Spec
- visible behaviour changed: none for users; new supported entry point for embedding apps
- spec searched (bootstrap, extension, start, Startzustand, main.tsx): 0038 section 4 (frontend extension points)
- verdict: spec change present and matches the code
Security checks
- Start order unchanged; extensions mount inside StartupGate so no data commands run while locked (read: bootstrap.tsx). Fail-open only for the optional
beforeRender, as the issue requires. No filter/risk/redaction/credential paths touched. Threat model note present.
Follow-ups
- None.
smart-ssh-coordinator
Bot
deleted the
issue-882-frontend-move-the-start-sequence-into-an
branch
October 27, 2026 23:56
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.
Closes #882
Summary
New
src/bootstrap.tsxexportsbootstrap(options)with the unchanged start steps of the oldmain.tsx(same order), thenbeforeRender, then render.main.tsxis now the CSS import plusawait bootstrap().extensionsrender inside the StartupGate (only when unlocked), each in its own ErrorBoundary;wrapwraps<App/>; a failingbeforeRenderis logged and the app still renders.Acceptance Criteria
src/bootstrap.test.tsx): platform attributesets the platform attribute; PRODinstalls the context-menu suppression only in production; orderruns getStartupState, initI18n, beforeRender, then renders;logs a rejecting beforeRender and still renders;renders extensions only when unlocked; a throwing one leaves the app;passes the App element to wrap…: metTests
New test file ran 10x without failure. No counter-proof (new feature).
Assumptions
The existing theme init (
initTheme/applyStoredTheme) from main.tsx moved into bootstrap() unchanged. Extensions render after<App/>as siblings.Spec: updated 0038
Threat model: no change – frontend start refactor, no new boundary.
Manual test steps
Follow-ups
None.
🤖 Generated with Claude Code