Skip to content

OU-1465: Integrate new proposal detail view#88

Open
jgbernalp wants to merge 3 commits into
openshift:mainfrom
jgbernalp:integrate-new-proposal-detail-view
Open

OU-1465: Integrate new proposal detail view#88
jgbernalp wants to merge 3 commits into
openshift:mainfrom
jgbernalp:integrate-new-proposal-detail-view

Conversation

@jgbernalp

Copy link
Copy Markdown
Contributor

This PR:

  • Fixes lint issues
  • Refactors the proposal detail view to match the mockup, extracts its components into reusable blocks and hooks. Removes dead code after refactor
  • Updates the spec
proposal-execute.mov
proposal-failed.mov

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 7, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 7, 2026

Copy link
Copy Markdown

@jgbernalp: This pull request references OU-1465 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "5.0.0" version, but no target version was set.

Details

In response to this:

This PR:

  • Fixes lint issues
  • Refactors the proposal detail view to match the mockup, extracts its components into reusable blocks and hooks. Removes dead code after refactor
  • Updates the spec
proposal-execute.mov
proposal-failed.mov

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci Bot requested review from harche and xrajesh July 7, 2026 14:00
@openshift-ci

openshift-ci Bot commented Jul 7, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign raptorsun for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jgbernalp, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 31 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 89e942c0-9410-4c49-8bf7-29006b4e4807

📥 Commits

Reviewing files that changed from the base of the PR and between 2f02e5f and d401125.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
📒 Files selected for processing (39)
  • .ai/spec/how/k8s-data-layer.md
  • .ai/spec/how/project-structure.md
  • .ai/spec/what/run-lifecycle.md
  • locales/en/plugin__lightspeed-agentic-console-plugin.json
  • package.json
  • src/__mocks__/dynamic-plugin-sdk.ts
  • src/components/ConfirmationModal.tsx
  • src/components/StatusGuard.tsx
  • src/components/configuration/AgentForm.tsx
  • src/components/configuration/ApprovalPolicyTab.tsx
  • src/components/proposals/DynamicComponent.tsx
  • src/components/proposals/EscalateModal.tsx
  • src/components/proposals/MarkdownText.tsx
  • src/components/proposals/PhaseIcon.tsx
  • src/components/proposals/ProposalDetailPage.tsx
  • src/components/proposals/ProposalListPage.tsx
  • src/components/proposals/SandboxLogViewer.tsx
  • src/components/proposals/detail/AnalysisSummary.tsx
  • src/components/proposals/detail/ExecutionSummary.tsx
  • src/components/proposals/detail/ProposalPhaseLabel.tsx
  • src/components/proposals/detail/ProposalTimeline.tsx
  • src/components/proposals/detail/RemediationOptionCard.tsx
  • src/components/proposals/detail/SandboxLogViewer.tsx
  • src/components/proposals/detail/StageInProgress.tsx
  • src/components/proposals/detail/VerificationSummary.tsx
  • src/components/proposals/detail/detail.css
  • src/components/proposals/proposal-detail.css
  • src/components/proposals/sandbox-log-viewer.css
  • src/constants.ts
  • src/hooks/useExecutionLogActions.ts
  • src/hooks/useProposal.test.ts
  • src/hooks/useProposal.ts
  • src/hooks/useSandboxLogStream.ts
  • src/models/proposal-views.ts
  • src/models/proposal.ts
  • src/test-helpers.ts
  • src/utils/approval.ts
  • src/utils/proposal-utils.ts
  • start-console.sh
📝 Walkthrough

Walkthrough

Reworks the proposal detail page from a tabbed layout to a single-page, phase-driven view backed by a new useProposal hook and proposal-views.ts view-model types. Adds StatusGuard, ConfirmationModal, detail subcomponents (analysis/execution/verification summaries, timeline, remediation cards, sandbox log viewer), and log-streaming hooks. Tightens proposal.ts type unions, adds K8s wrapper types, updates locales, docs, and dependencies.

Changes

Proposal Detail Rework

Layer / File(s) Summary
K8s and view-model types
src/models/proposal.ts, src/models/proposal-views.ts, src/constants.ts, src/test-helpers.ts
Narrows condition/risk/confidence/reversibility unions, adds MCP config types and K8s intersection wrapper types (ProposalK8s, etc.), and introduces proposal-views.ts view-model interfaces plus new labeling/namespace constants.
useProposal hook and mapping logic
src/hooks/useProposal.ts, src/hooks/useProposal.test.ts
Adds useProposal hook watching Proposal/Analysis/Execution/Verification/Approval resources, mapping helpers (mapRootCause, mapOption, mapExecution, mapVerification, mapTimeline, filterLatest, mapToProposalView), approval mutation callbacks, and unit tests.
StatusGuard, ConfirmationModal, HttpError mock
src/components/StatusGuard.tsx, src/components/ConfirmationModal.tsx, src/__mocks__/dynamic-plugin-sdk.ts
Adds StatusGuard for loading/error/404/403 gating, ConfirmationModal for confirming async actions, and an HttpError mock class with a code field.
Sandbox log streaming hooks
src/hooks/useSandboxLogStream.ts, src/hooks/useExecutionLogActions.ts, src/utils/proposal-utils.ts
Adds reconnecting log-stream hook, execution-action extraction hook from audit log lines, and pod log URL/outcome/reversibility color utilities.
Detail-page subcomponents
src/components/proposals/detail/*
Adds AnalysisSummary, ExecutionSummary, VerificationSummary, RemediationOptionCard, ProposalPhaseLabel, ProposalTimeline, StageInProgress, SandboxLogViewer, and detail.css.
ProposalDetailPage rewrite and ProposalListPage retyping
src/components/proposals/ProposalDetailPage.tsx, src/components/proposals/ProposalListPage.tsx
Rewrites the detail page into a single-page, phase-driven layout using StatusGuard/useProposal/ConfirmationModal/detail subcomponents (renamed export ProposalDetailsPage); retypes list page to ProposalK8s.
Terminal-phase util alignment
src/utils/approval.ts
Imports TERMINAL_PHASES from proposal-views instead of a local Set, switching .has() to .includes().
Docs, translations, config, minor fixes
.ai/spec/*, locales/en/*.json, package.json, start-console.sh, src/components/configuration/*
Updates architecture docs, rewrites locale strings for the new UI, adds PatternFly log-viewer/component-groups dependencies, hardcodes PLUGIN_NAME, and adds ESLint set-state-in-effect suppressions.

Also removed: EscalateModal.tsx, PhaseIcon.tsx, MarkdownText.tsx, SandboxLogViewer.tsx (old), proposal-detail.css, sandbox-log-viewer.css, and re-exports in DynamicComponent.tsx.

Sequence Diagram(s)

sequenceDiagram
  participant ProposalDetailsPage
  participant StatusGuard
  participant useProposal
  participant K8sAPI
  participant RemediationOptionCard

  ProposalDetailsPage->>useProposal: useProposal(name, namespace)
  useProposal->>K8sAPI: watch Proposal/Analysis/Execution/Verification/Approval
  K8sAPI-->>useProposal: resource updates
  useProposal-->>ProposalDetailsPage: view, loaded, error, approveExecution
  ProposalDetailsPage->>StatusGuard: render(data=view, loaded, loadError)
  StatusGuard-->>ProposalDetailsPage: children or error/loading state
  ProposalDetailsPage->>RemediationOptionCard: render option, onExecute
  RemediationOptionCard->>ProposalDetailsPage: onExecute(index)
  ProposalDetailsPage->>useProposal: approveExecution(index)
  useProposal->>K8sAPI: k8sPatch approval resource
  K8sAPI-->>useProposal: patch result
  useProposal-->>ProposalDetailsPage: mutationInProgress/mutationError
Loading

Compact metadata

  • Files changed: 40+
  • Estimated review effort: High (large rewrite spanning hooks, types, and UI)

Suggested labels: enhancement, refactor, needs-review

Suggested reviewers: proposal-detail-page maintainers, hooks/data-layer owners

🐰 Tabs are gone, phases now reign,
One page, one flow, less UI pain,
Hooks watch the CRs spin,
StatusGuard lets the right data in,
A rabbit hops through the refactored terrain.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: integrating the new proposal detail view.
Description check ✅ Passed The description matches the changeset by mentioning lint fixes, the proposal detail refactor, reusable hooks/components, and spec updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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: 2

🧹 Nitpick comments (6)
src/hooks/useProposal.test.ts (1)

194-256: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Outcome branches of mapExecution are untested.

Both tests use condition type: 'Executed', so completedCond (which looks for type === 'Completed') never matches, and every test here falls into the 'Unknown' fallback. The reason === 'Succeeded' and reason === 'Failed' branches in mapExecution's outcome logic have no coverage.

✅ Suggested fix to actually exercise the Succeeded branch
         conditions: [
           {
-            type: 'Executed',
+            type: 'Completed',
             status: 'True',
-            reason: 'Success',
+            reason: 'Succeeded',
             message: 'Actions completed',
             lastTransitionTime: '2025-01-01T00:00:00Z',
           },
         ],
         actionsTaken: [{ type: 'patch', description: 'Patched deployment', outcome: 'Succeeded' }],
       },
     };
     const result = mapExecution(options, execution);
     expect(result).toBeDefined();
     expect(result!.originalRootCause).toBe('Memory limit too low');
-    expect(result!.outcome).toBe('Unknown');
+    expect(result!.outcome).toBe('Succeeded');

Also consider adding a case with reason: 'Failed' to cover the Failed branch.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/useProposal.test.ts` around lines 194 - 256, The `mapExecution`
tests are only exercising the `'Unknown'` fallback because the sample status
condition uses `type: 'Executed'` instead of the `Completed` condition that
`mapExecution` checks. Update the `mapExecution` test cases in
`useProposal.test.ts` so one fixture hits the `reason === 'Succeeded'` branch
and add another for `reason === 'Failed'`, using the existing `mapExecution`
helper and `ExecutionResultK8s` fixtures to verify the outcome logic directly.
src/hooks/useExecutionLogActions.ts (1)

20-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Unused abortRef.

abortRef.current is assigned but never read; cleanup already uses the local ac directly. Consider removing the ref.

Also applies to: 70-70

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/useExecutionLogActions.ts` at line 20, The useExecutionLogActions
hook has an unused abortRef that is assigned but never read, since the cleanup
already uses the local AbortController instance directly. Remove the abortRef
declaration and any related assignments/usages in useExecutionLogActions so the
hook relies only on the local ac flow and keeps the abort logic consistent.
src/components/proposals/detail/RemediationOptionCard.tsx (1)

124-129: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Dynamic translation key bypasses static i18n extraction.

When reversibility !== 'Partial', the raw option.reversibility value (e.g. 'Full', 'None') is used directly as the translation key. Automated i18n extraction tools typically can't statically discover dynamic keys, risking missing entries in the locale files for those values.

♻️ Proposed fix: use static literal keys
-                {t(
-                  option.reversibility === 'Partial'
-                    ? 'Partially reversible'
-                    : option.reversibility,
-                )}
+                {option.reversibility === 'Partial'
+                  ? t('Partially reversible')
+                  : option.reversibility === 'Full'
+                    ? t('Fully reversible')
+                    : t('Irreversible')}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/proposals/detail/RemediationOptionCard.tsx` around lines 124 -
129, The reversibility label in RemediationOptionCard uses a dynamic translation
key via option.reversibility, which can bypass static i18n extraction. Update
the conditional around t(...) so it always uses explicit literal keys for each
supported value (for example in the RemediationOptionCard render path), rather
than passing the raw option.reversibility string directly. Keep the existing
“Partial” branch, and map each remaining reversibility case to a fixed
translation key that extraction tools can detect.
src/components/proposals/detail/AnalysisSummary.tsx (1)

89-104: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract confidence-color logic to match established utility pattern.

Confidence color is computed inline here with a nested ternary, while RemediationOptionCard uses shared getRiskColor/getReversibilityColor utilities from models/proposal/utils/proposal-utils for the same kind of concern. Consider adding a getConfidenceColor helper alongside those for consistency and to avoid re-implementing color-mapping logic per component.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/proposals/detail/AnalysisSummary.tsx` around lines 89 - 104,
The confidence color mapping in AnalysisSummary is implemented inline with
nested ternaries; extract it into a shared getConfidenceColor helper to match
the existing utility pattern used by RemediationOptionCard with getRiskColor and
getReversibilityColor. Add the helper alongside the other proposal color
utilities in models/proposal or utils/proposal-utils, then update
AnalysisSummary to call it when rendering rootCause.confidence so the color
logic is centralized and reusable.
src/components/proposals/detail/VerificationSummary.tsx (1)

43-53: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Checkmark icon used for "in progress" state is misleading.

The neutral/"in progress" branch reuses CheckCircleIcon (just recolored), which visually reads as a pass even though verification hasn't completed. Consider a distinct icon (e.g., pending/clock/in-progress icon) to avoid confusing a not-yet-verified state with a passed one.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/proposals/detail/VerificationSummary.tsx` around lines 43 -
53, The neutral “in progress” branch in VerificationSummary is reusing
CheckCircleIcon, which makes an unfinished verification look like a pass. Update
the icon used in the allPassed ? ... : ... conditional inside
VerificationSummary to a distinct in-progress/pending icon, and keep the
aria-label and color aligned with the pending state so the visual meaning is
clear.
src/components/proposals/detail/SandboxLogViewer.tsx (1)

36-42: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Positional args to useSandboxLogStream are fragile.

Five positional params, three of which are booleans/strings of the same type — easy to transpose (isExpanded/streaming/auditOnly) during future edits without a type error.

♻️ Suggested options-object signature
-  const { lines, loading, error } = useSandboxLogStream(
-    sandbox,
-    isExpanded,
-    streaming,
-    sinceTime,
-    auditOnly,
-  );
+  const { lines, loading, error } = useSandboxLogStream(sandbox, {
+    isExpanded,
+    streaming,
+    sinceTime,
+    auditOnly,
+  });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/proposals/detail/SandboxLogViewer.tsx` around lines 36 - 42,
The current useSandboxLogStream call in SandboxLogViewer passes five positional
arguments, making the boolean/string parameters easy to mix up during future
edits. Update the hook call site and the useSandboxLogStream signature to use a
single options object instead of positional params, and pass the existing values
through named fields so the intent is explicit and order-independent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@package.json`:
- Around line 29-33: The dependency range for `@patternfly/react-log-viewer`
points to a version that is not published, which will break installs. Update the
package.json entry for `@patternfly/react-log-viewer` to a valid released version
consistent with the other PatternFly packages, and keep the change localized to
the dependency list where `@patternfly/react-component-groups` and the other
`@patternfly/`* packages are declared.

In `@src/components/proposals/ProposalDetailPage.tsx`:
- Around line 66-72: The `useEffect` in `ProposalDetailPage` only suppresses
`react-hooks/set-state-in-effect` for `setSelectedOption`, so
`setExpandedOption` still triggers the lint rule. Update the effect so the
suppression also covers `setExpandedOption` in the same `useEffect` block, using
the `setSelectedOption` and `setExpandedOption` calls as the reference points.

---

Nitpick comments:
In `@src/components/proposals/detail/AnalysisSummary.tsx`:
- Around line 89-104: The confidence color mapping in AnalysisSummary is
implemented inline with nested ternaries; extract it into a shared
getConfidenceColor helper to match the existing utility pattern used by
RemediationOptionCard with getRiskColor and getReversibilityColor. Add the
helper alongside the other proposal color utilities in models/proposal or
utils/proposal-utils, then update AnalysisSummary to call it when rendering
rootCause.confidence so the color logic is centralized and reusable.

In `@src/components/proposals/detail/RemediationOptionCard.tsx`:
- Around line 124-129: The reversibility label in RemediationOptionCard uses a
dynamic translation key via option.reversibility, which can bypass static i18n
extraction. Update the conditional around t(...) so it always uses explicit
literal keys for each supported value (for example in the RemediationOptionCard
render path), rather than passing the raw option.reversibility string directly.
Keep the existing “Partial” branch, and map each remaining reversibility case to
a fixed translation key that extraction tools can detect.

In `@src/components/proposals/detail/SandboxLogViewer.tsx`:
- Around line 36-42: The current useSandboxLogStream call in SandboxLogViewer
passes five positional arguments, making the boolean/string parameters easy to
mix up during future edits. Update the hook call site and the
useSandboxLogStream signature to use a single options object instead of
positional params, and pass the existing values through named fields so the
intent is explicit and order-independent.

In `@src/components/proposals/detail/VerificationSummary.tsx`:
- Around line 43-53: The neutral “in progress” branch in VerificationSummary is
reusing CheckCircleIcon, which makes an unfinished verification look like a
pass. Update the icon used in the allPassed ? ... : ... conditional inside
VerificationSummary to a distinct in-progress/pending icon, and keep the
aria-label and color aligned with the pending state so the visual meaning is
clear.

In `@src/hooks/useExecutionLogActions.ts`:
- Line 20: The useExecutionLogActions hook has an unused abortRef that is
assigned but never read, since the cleanup already uses the local
AbortController instance directly. Remove the abortRef declaration and any
related assignments/usages in useExecutionLogActions so the hook relies only on
the local ac flow and keeps the abort logic consistent.

In `@src/hooks/useProposal.test.ts`:
- Around line 194-256: The `mapExecution` tests are only exercising the
`'Unknown'` fallback because the sample status condition uses `type: 'Executed'`
instead of the `Completed` condition that `mapExecution` checks. Update the
`mapExecution` test cases in `useProposal.test.ts` so one fixture hits the
`reason === 'Succeeded'` branch and add another for `reason === 'Failed'`, using
the existing `mapExecution` helper and `ExecutionResultK8s` fixtures to verify
the outcome logic directly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8ce39a0f-5955-47ce-b8cb-c3e2ee2cabcf

📥 Commits

Reviewing files that changed from the base of the PR and between 835eade and 2f02e5f.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
📒 Files selected for processing (39)
  • .ai/spec/how/k8s-data-layer.md
  • .ai/spec/how/project-structure.md
  • .ai/spec/what/run-lifecycle.md
  • locales/en/plugin__lightspeed-agentic-console-plugin.json
  • package.json
  • src/__mocks__/dynamic-plugin-sdk.ts
  • src/components/ConfirmationModal.tsx
  • src/components/StatusGuard.tsx
  • src/components/configuration/AgentForm.tsx
  • src/components/configuration/ApprovalPolicyTab.tsx
  • src/components/proposals/DynamicComponent.tsx
  • src/components/proposals/EscalateModal.tsx
  • src/components/proposals/MarkdownText.tsx
  • src/components/proposals/PhaseIcon.tsx
  • src/components/proposals/ProposalDetailPage.tsx
  • src/components/proposals/ProposalListPage.tsx
  • src/components/proposals/SandboxLogViewer.tsx
  • src/components/proposals/detail/AnalysisSummary.tsx
  • src/components/proposals/detail/ExecutionSummary.tsx
  • src/components/proposals/detail/ProposalPhaseLabel.tsx
  • src/components/proposals/detail/ProposalTimeline.tsx
  • src/components/proposals/detail/RemediationOptionCard.tsx
  • src/components/proposals/detail/SandboxLogViewer.tsx
  • src/components/proposals/detail/StageInProgress.tsx
  • src/components/proposals/detail/VerificationSummary.tsx
  • src/components/proposals/detail/detail.css
  • src/components/proposals/proposal-detail.css
  • src/components/proposals/sandbox-log-viewer.css
  • src/constants.ts
  • src/hooks/useExecutionLogActions.ts
  • src/hooks/useProposal.test.ts
  • src/hooks/useProposal.ts
  • src/hooks/useSandboxLogStream.ts
  • src/models/proposal-views.ts
  • src/models/proposal.ts
  • src/test-helpers.ts
  • src/utils/approval.ts
  • src/utils/proposal-utils.ts
  • start-console.sh
💤 Files with no reviewable changes (7)
  • src/components/proposals/MarkdownText.tsx
  • src/components/proposals/sandbox-log-viewer.css
  • src/components/proposals/SandboxLogViewer.tsx
  • src/components/proposals/EscalateModal.tsx
  • src/components/proposals/proposal-detail.css
  • src/components/proposals/DynamicComponent.tsx
  • src/components/proposals/PhaseIcon.tsx

Comment thread package.json
Comment thread src/components/proposals/ProposalDetailPage.tsx
Signed-off-by: Gabriel Bernal <gbernal@redhat.com>
jgbernalp added 2 commits July 7, 2026 16:28
Signed-off-by: Gabriel Bernal <gbernal@redhat.com>
Signed-off-by: Gabriel Bernal <gbernal@redhat.com>
@jgbernalp jgbernalp force-pushed the integrate-new-proposal-detail-view branch from 2f02e5f to d401125 Compare July 7, 2026 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants