Recruit S0.1: nav tab + empty view behind a feature flag (FHR-70)#91
Merged
matthewod11-stack merged 1 commit intoMay 26, 2026
Conversation
First visible seam for the Recruit module (FHR-70 / Recruit S0.1). A `recruiting` tab — gated by a compile-time RECRUITING_ENABLED flag, default off — renders an empty RecruitingView in the main content area. With the flag off, Rollup tree-shakes the recruiting code out of the bundle, so this ships dark to production while S0.2/S0.3 build against the seam. - src/lib/featureFlags.ts (new): RECRUITING_ENABLED compile-time gate - src/components/recruiting/ (new): empty RecruitingView, lazy-loaded + barrel - LayoutContext: SidebarTab union += 'recruiting' - TabSwitcher: flag-gated Recruit tab - AppShell: three-case sidebar content - App.tsx: swap main area to <RecruitingView> when the tab is active Verified: tsc clean (both flag states), build clean on/off, 478 Rust tests unchanged. Decisions in DECISIONS.md: compile-time flag over settings toggle; main-area placement over sidebar. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR introduces the first UI “seam” for a future Recruit module by adding a new sidebar tab (recruiting) and an empty RecruitingView, gated behind a compile-time RECRUITING_ENABLED flag (default off) so the feature ships dark.
Changes:
- Adds a compile-time feature-flag constant (
RECRUITING_ENABLED) for gating in-development modules. - Introduces a new (lazy-loaded)
RecruitingViewskeleton and wires it into the main content area when the “Recruit” tab is active. - Extends the layout tab state/type to include
recruitingand updates the sidebar switcher + shell rendering accordingly.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/lib/featureFlags.ts | Adds the compile-time RECRUITING_ENABLED gate. |
| src/contexts/LayoutContext.tsx | Extends SidebarTab with 'recruiting'. |
| src/components/recruiting/RecruitingView.tsx | Adds the empty Recruiting view skeleton. |
| src/components/recruiting/index.ts | Adds a barrel export for the recruiting view. |
| src/components/layout/AppShell.tsx | Adjusts sidebar tab content rendering to handle three tabs (recruiting sidebar intentionally empty). |
| src/components/conversations/TabSwitcher.tsx | Conditionally adds the “Recruit” tab only when the flag is enabled. |
| src/App.tsx | Switches main content to RecruitingView when the recruiting tab is active and the flag is enabled. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+35
to
+37
| const RecruitingView = lazy(() => | ||
| import('./components/recruiting').then((module) => ({ default: module.RecruitingView })) | ||
| ); |
5 tasks
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.
Recruit S0.1 — first seam for the Recruit module
Linear: FHR-70
Adds a
recruitingnav tab + emptyRecruitingView, gated behind a compile-timeRECRUITING_ENABLEDflag (default off). This is the walking-skeleton seam that S0.2 (Rustrecruitingmodule) and S0.3 (live Exa round-trip) attach to.Behavior
Changes
src/lib/featureFlags.ts(new) —RECRUITING_ENABLEDcompile-time gatesrc/components/recruiting/(new) — emptyRecruitingView(lazy-loaded) + barrelsrc/contexts/LayoutContext.tsx—SidebarTab+='recruiting'src/components/conversations/TabSwitcher.tsx— flag-gated tabsrc/components/layout/AppShell.tsx— three-case sidebar contentsrc/App.tsx— main-area swap to<RecruitingView>Verification
npm run type-checkclean (both flag states)npm run buildclean (flag on & off)Decisions (see DECISIONS.md)
🤖 Generated with Claude Code