Skip to content

feat: use lifecycles API#7793

Merged
kyle-ssg merged 14 commits into
mainfrom
feat/lifecycle-stats-api
Jul 8, 2026
Merged

feat: use lifecycles API#7793
kyle-ssg merged 14 commits into
mainfrom
feat/lifecycle-stats-api

Conversation

@kyle-ssg

@kyle-ssg kyle-ssg commented Jun 16, 2026

Copy link
Copy Markdown
Member

Conform the project lifecycle page to the new backend API (#7789):

  • Add lifecycle-status-counts RTK query for sidebar counts in one call
  • Add lifecycle_stage + evaluation_period_days params to getProjectFlags and a lifecycle_stage field on ProjectFlag
  • Each section now fetches only its own stage, classified server-side
  • Remove client-side tag/code-reference/evaluation classification, the per-flag EvaluationChecker and useEvaluationCounts hook
  • Single environment (name-matched "prod" by default, switchable in the left nav, persisted per project in a new redux slice) and a single evaluation_period_days replace the multi-env + dual-period controls
  • Drop the non-functional "LIFECYCLE STAGES" sidebar header/Add button

Thanks for submitting a PR! Please check the boxes below:

  • I have read the Contributing Guide.
  • I have added information to docs/ if required so people know about the feature.
  • I have filled in the "Changes" section below.
  • I have filled in the "How did you test this code" section below.

Changes

Hooks up API for feature lifecycle

image

How did you test this code?

Go to lifecycle page as in the Flagsmith project

…ification

Conform the project lifecycle page to the new backend API (#7789):

- Add lifecycle-status-counts RTK query for sidebar counts in one call
- Add lifecycle_stage + evaluation_period_days params to getProjectFlags
  and a lifecycle_stage field on ProjectFlag
- Each section now fetches only its own stage, classified server-side
- Remove client-side tag/code-reference/evaluation classification, the
  per-flag EvaluationChecker and useEvaluationCounts hook
- Single environment (name-matched "prod" by default, switchable in the
  left nav, persisted per project in a new redux slice) and a single
  evaluation_period_days replace the multi-env + dual-period controls
- Drop the non-functional "LIFECYCLE STAGES" sidebar header/Add button

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kyle-ssg kyle-ssg requested a review from a team as a code owner June 16, 2026 09:06
@kyle-ssg kyle-ssg requested review from talissoncosta and removed request for a team June 16, 2026 09:06
@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
flagsmith-frontend-preview Ready Ready Preview, Comment Jul 8, 2026 12:56pm
flagsmith-frontend-staging Ready Ready Preview, Comment Jul 8, 2026 12:56pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Ignored Ignored Preview Jul 8, 2026 12:56pm

Request Review

@github-actions github-actions Bot added the front-end Issue related to the React Front End Dashboard label Jun 16, 2026
@kyle-ssg kyle-ssg marked this pull request as draft June 16, 2026 09:07
@github-actions github-actions Bot added the feature New feature or request label Jun 16, 2026
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Docker builds report

Image Build Status Security report
ghcr.io/flagsmith/flagsmith-api-test:pr-7793 Finished ✅ Skipped
ghcr.io/flagsmith/flagsmith-e2e:pr-7793 Finished ✅ Skipped
ghcr.io/flagsmith/flagsmith-api:pr-7793 Finished ✅ Results
ghcr.io/flagsmith/flagsmith:pr-7793 Finished ✅ Results
ghcr.io/flagsmith/flagsmith-private-cloud:pr-7793 Finished ✅ Results
ghcr.io/flagsmith/flagsmith-frontend:pr-7793 Finished ✅ Results

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  1 passed

Details

stats  1 test across 1 suite
duration  39.5 seconds
commit  a369ed5
info  🔄 Run: #17534 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  1 passed

Details

stats  1 test across 1 suite
duration  37.2 seconds
commit  a369ed5
info  🔄 Run: #17534 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 4 suites
duration  10.5 seconds
commit  a369ed5
info  🔄 Run: #17534 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  1 minute, 10 seconds
commit  a369ed5
info  🔄 Run: #17534 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  43.3 seconds
commit  c890063
info  🔄 Run: #17980 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  3 passed

Details

stats  3 tests across 2 suites
duration  12 seconds
commit  c890063
info  🔄 Run: #17980 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  41.4 seconds
commit  8923106
info  🔄 Run: #17981 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  44.8 seconds
commit  8923106
info  🔄 Run: #17981 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  2 passed

Details

stats  2 tests across 2 suites
duration  53.4 seconds
commit  c890063
info  🔄 Run: #17980 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  19.8 seconds
commit  8923106
info  🔄 Run: #17981 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 5 suites
duration  3.7 seconds
commit  8923106
info  🔄 Run: #17981 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  42.3 seconds
commit  bf57a38
info  🔄 Run: #17982 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  39.8 seconds
commit  bf57a38
info  🔄 Run: #17982 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

failed  1 failed
passed  1 passed

Details

stats  2 tests across 2 suites
duration  57.7 seconds
commit  c890063
info  📦 Artifacts: View test results and HTML report
🔄 Run: #17980 (attempt 1)

Failed tests

firefox › tests/environment-permission-test.pw.ts › Environment Permission Tests › Environment-level permissions control access to features, identities, and segments @enterprise

### Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 4 suites
duration  33.2 seconds
commit  bf57a38
info  🔄 Run: #17982 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  3 passed

Details

stats  3 tests across 2 suites
duration  12.5 seconds
commit  bf57a38
info  🔄 Run: #17982 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  42 seconds
commit  06ac488
info  🔄 Run: #17983 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  45.4 seconds
commit  06ac488
info  🔄 Run: #17983 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  6 passed

Details

stats  6 tests across 5 suites
duration  34.4 seconds
commit  06ac488
info  🔄 Run: #17983 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  12.2 seconds
commit  06ac488
info  🔄 Run: #17983 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  41.3 seconds
commit  ac8d1a3
info  🔄 Run: #17997 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  11.9 seconds
commit  ac8d1a3
info  🔄 Run: #17997 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  42.1 seconds
commit  ac8d1a3
info  🔄 Run: #17997 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  10.8 seconds
commit  ac8d1a3
info  🔄 Run: #17997 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  41.6 seconds
commit  5cf7e38
info  🔄 Run: #17998 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  4.3 seconds
commit  5cf7e38
info  🔄 Run: #17998 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  41.3 seconds
commit  5cf7e38
info  🔄 Run: #17998 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  36.1 seconds
commit  5cf7e38
info  🔄 Run: #17998 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  45.5 seconds
commit  0fe0f62
info  🔄 Run: #18000 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 3 suites
duration  43.1 seconds
commit  0fe0f62
info  🔄 Run: #18000 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  18.8 seconds
commit  0fe0f62
info  🔄 Run: #18000 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 3 suites
duration  38.4 seconds
commit  0fe0f62
info  🔄 Run: #18000 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  2 passed

Details

stats  2 tests across 2 suites
duration  50.8 seconds
commit  34e3478
info  🔄 Run: #18001 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  45.6 seconds
commit  34e3478
info  🔄 Run: #18001 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 4 suites
duration  32.2 seconds
commit  34e3478
info  🔄 Run: #18001 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  2 passed

Details

stats  2 tests across 2 suites
duration  59.6 seconds
commit  34e3478
info  🔄 Run: #18001 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  3 passed

Details

stats  3 tests across 3 suites
duration  41.1 seconds
commit  94fcab4
info  🔄 Run: #18076 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  45.2 seconds
commit  94fcab4
info  🔄 Run: #18076 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  18.1 seconds
commit  94fcab4
info  🔄 Run: #18076 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  5 passed

Details

stats  5 tests across 5 suites
duration  36.2 seconds
commit  94fcab4
info  🔄 Run: #18076 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  42.9 seconds
commit  9b69c08
info  🔄 Run: #18096 (attempt 1)

Playwright Test Results (oss - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  45.3 seconds
commit  9b69c08
info  🔄 Run: #18096 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-arm-16)

passed  4 passed

Details

stats  4 tests across 3 suites
duration  36.7 seconds
commit  9b69c08
info  🔄 Run: #18096 (attempt 1)

Playwright Test Results (private-cloud - depot-ubuntu-latest-16)

passed  5 passed

Details

stats  5 tests across 4 suites
duration  43 seconds
commit  9b69c08
info  🔄 Run: #18096 (attempt 1)

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Visual Regression

19 screenshots compared. See report for details.
View full report

@manos-saratsis

This comment was marked as spam.

Match the feature-lifecycle endpoints introduced in PR #7789:
- lowercase LifecycleStage values + SECTION_TO_STAGE mapping
- env-scoped counts URL (environments/{env}/feature-lifecycle-counts/)
- read lowercase count keys; drop unsupported filter + evaluation_period
  params from the counts query
- remove the orphaned evaluation-period selector (backend derives the
  window from project.stale_flags_limit_days)

Extract prod-environment prediction into predictProdEnvironment().

Add frontend context doc for running an unmerged backend PR's Docker image.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kyle-ssg and others added 2 commits July 1, 2026 09:50
- Fix loading state: use isFetching in addition to isLoading for proper
  loading indicator when switching between lifecycle sections
- Change environment picker from tag chips to dropdown select
- Add tooltip explaining environment selection affects evaluations only
- Remove checkbox selection from Stale and Remove sections for visual
  consistency with other sections
- Fix MONITOR_TOOLTIP type error by converting JSX to HTML string
- Add spacing before "Why am I seeing this?" link
- Fix FeatureImport.tsx type error with proper ternary for existingFlags

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Comment thread frontend/.claude/context/testing-against-pr-backend.md Outdated
@github-actions github-actions Bot added feature New feature or request and removed feature New feature or request labels Jul 1, 2026
Clicking a feature row in the lifecycle page now opens a side modal
with Usage and Settings tabs, matching the main feature modal styling.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@kyle-ssg kyle-ssg requested a review from talissoncosta July 8, 2026 07:24
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces client-side feature lifecycle evaluation and counting with backend-driven lifecycle counts and stage classification. It adds lifecycle request/response types, a new lifecycle counts query, a persisted per-project environment selection slice and hook, and refactors the feature lifecycle page and section components to use environment-scoped data. It also adds row click handling and a feature usage modal, and updates the lifecycle sidebar and labels.

Estimated code review effort: 4 (Complex) | ~60 minutes


Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/web/components/pages/feature-lifecycle/components/FeatureUsageModal.tsx (1)

1-44: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

New component doesn't follow the mandated folder structure.

FeatureUsageModal.tsx is a brand-new component placed flat in components/, rather than in its own FeatureUsageModal/FeatureUsageModal.tsx with a co-located barrel index.ts.

As per coding guidelines, "Each new component must live in its own folder with a barrel index.ts, a ComponentName/ComponentName.tsx file, co-located ComponentName.scss, any subcomponents, and imports should use the component folder path rather than the inner file."

#!/bin/bash
# Description: Verify current placement/structure of the new component.
fd FeatureUsageModal frontend/web/components/pages/feature-lifecycle

Source: Coding guidelines

♻️ Duplicate comments (1)
frontend/web/components/pages/feature-lifecycle/hooks/useLifecycleData.ts (1)

52-90: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated FeatureListStore subscribe/unsubscribe block across both hooks.

The identical useEffect wiring FeatureListStore.on/off('saved'|'removed', refetch) is repeated verbatim in useLifecycleCounts and useLifecycleSectionFlags. This is also the direct-store-coupling pattern previously flagged as making the hook hard to test (no seam to inject/mock the event source). Extracting a small shared hook (e.g. useRefetchOnFeatureListEvents(refetch)) would remove the duplication and provide the seam needed for testability.

♻️ Proposed refactor
+function useRefetchOnFeatureListEvents(refetch: () => void) {
+  useEffect(() => {
+    FeatureListStore.on('saved', refetch)
+    FeatureListStore.on('removed', refetch)
+    return () => {
+      FeatureListStore.off('saved', refetch)
+      FeatureListStore.off('removed', refetch)
+    }
+  }, [refetch])
+}
+
 export function useLifecycleCounts({
   environmentId,
 }: {
   environmentId: number | undefined
 }) {
   const query = useGetLifecycleStatusCountsQuery(
     environmentId ? { environment: environmentId } : skipToken,
     { refetchOnMountOrArgChange: true },
   )

-  const { refetch } = query
-  useEffect(() => {
-    FeatureListStore.on('saved', refetch)
-    FeatureListStore.on('removed', refetch)
-    return () => {
-      FeatureListStore.off('saved', refetch)
-      FeatureListStore.off('removed', refetch)
-    }
-  }, [refetch])
+  useRefetchOnFeatureListEvents(query.refetch)

Apply the equivalent replacement in useLifecycleSectionFlags.

Also applies to: 93-132


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 79bdbfe8-b1bb-4457-8851-b653e1dfa56e

📥 Commits

Reviewing files that changed from the base of the PR and between 5c55544 and 94fcab4.

📒 Files selected for processing (23)
  • frontend/common/lifecycleEnvironmentSlice.ts
  • frontend/common/services/useProjectFlag.ts
  • frontend/common/store.ts
  • frontend/common/types/requests.ts
  • frontend/common/types/responses.ts
  • frontend/web/components/feature-summary/ProjectFeatureRow.tsx
  • frontend/web/components/pages/feature-lifecycle/FeatureLifecyclePage.tsx
  • frontend/web/components/pages/feature-lifecycle/components/EvaluationChecker.tsx
  • frontend/web/components/pages/feature-lifecycle/components/FeatureUsageModal.tsx
  • frontend/web/components/pages/feature-lifecycle/components/LifecycleSidebar.tsx
  • frontend/web/components/pages/feature-lifecycle/components/LiveSection.tsx
  • frontend/web/components/pages/feature-lifecycle/components/MonitorSection.tsx
  • frontend/web/components/pages/feature-lifecycle/components/NewSection.tsx
  • frontend/web/components/pages/feature-lifecycle/components/PermanentSection.tsx
  • frontend/web/components/pages/feature-lifecycle/components/RemoveSection.tsx
  • frontend/web/components/pages/feature-lifecycle/components/SectionShell.tsx
  • frontend/web/components/pages/feature-lifecycle/components/StaleSection.tsx
  • frontend/web/components/pages/feature-lifecycle/constants.tsx
  • frontend/web/components/pages/feature-lifecycle/hooks/predictProdEnvironment.ts
  • frontend/web/components/pages/feature-lifecycle/hooks/useEvaluationCounts.ts
  • frontend/web/components/pages/feature-lifecycle/hooks/useLifecycleData.ts
  • frontend/web/components/pages/feature-lifecycle/hooks/useLifecycleEnvironment.ts
  • frontend/web/components/pages/feature-lifecycle/types.ts
💤 Files with no reviewable changes (3)
  • frontend/web/components/pages/feature-lifecycle/components/EvaluationChecker.tsx
  • frontend/web/components/pages/feature-lifecycle/types.ts
  • frontend/web/components/pages/feature-lifecycle/hooks/useEvaluationCounts.ts

Comment thread frontend/common/services/useProjectFlag.ts
Comment thread frontend/web/components/feature-summary/ProjectFeatureRow.tsx
Comment thread frontend/web/components/pages/feature-lifecycle/components/RemoveSection.tsx Outdated
talissoncosta
talissoncosta previously approved these changes Jul 8, 2026

@talissoncosta talissoncosta left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good on my view! Thanks for addressing the feedback.

- Invalidate LifecycleCounts on flag update and delete so sidebar counts stay fresh
- Make clickable feature rows keyboard-operable (role, tabIndex, Enter/Space handler)
- Remove stale 'and period' copy from the remove section empty state

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/common/services/useProjectFlag.ts (1)

142-150: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Consider scoping LifecycleCounts tag per environment.

providesTags/invalidatesTags use a single global 'LifecycleCounts' tag rather than one keyed by environment id. This is consistent between the query and the mutations, so it's not a bug, but any flag mutation in one project/environment will invalidate cached counts for every environment currently held in the cache, causing extra refetches for unrelated environments in multi-tab or multi-environment scenarios.

♻️ Optional: scope the tag by environment id
       getLifecycleStatusCounts: builder.query<
         Res['lifecycleStatusCounts'],
         Req['getLifecycleStatusCounts']
       >({
-        providesTags: ['LifecycleCounts'],
+        providesTags: (_res, _err, req) => [
+          { id: req.environment, type: 'LifecycleCounts' },
+        ],
         query: ({ environment }) => ({
           url: `environments/${environment}/feature-lifecycle-counts/`,
         }),
       }),

Note: this would also require updating the invalidatesTags arrays on createProjectFlag, updateProjectFlag, and removeProjectFlag to target the relevant environment id (if available in their args/response) instead of the bare tag type.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 27595980-170d-45e1-b285-0e26d5542aae

📥 Commits

Reviewing files that changed from the base of the PR and between 94fcab4 and 9b69c08.

📒 Files selected for processing (3)
  • frontend/common/services/useProjectFlag.ts
  • frontend/web/components/feature-summary/ProjectFeatureRow.tsx
  • frontend/web/components/pages/feature-lifecycle/components/RemoveSection.tsx

@kyle-ssg kyle-ssg merged commit 26ddf19 into main Jul 8, 2026
29 checks passed
@kyle-ssg kyle-ssg deleted the feat/lifecycle-stats-api branch July 8, 2026 13:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature or request front-end Issue related to the React Front End Dashboard

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants