Skip to content

Update Release-3.7 with latest #2370

Merged
c-julin merged 50 commits intorelease-3.7from
master
Apr 8, 2026
Merged

Update Release-3.7 with latest #2370
c-julin merged 50 commits intorelease-3.7from
master

Conversation

@c-julin
Copy link
Copy Markdown
Contributor

@c-julin c-julin commented Apr 8, 2026

No description provided.

jvorcak and others added 30 commits March 28, 2026 18:03
…me-rerendering

Fixes estimated time rendering
Most Kafka (kerr.*) and Schema Registry errors were mapped to
CodeInternal (HTTP 500) regardless of the actual error semantics.
This caused API clients to receive misleading status codes — for
example, creating a duplicate topic returned 500 instead of 409.

Kafka error mapping (kafka.go):
- TopicAlreadyExists → CodeAlreadyExists (409)
- UnknownTopicOrPartition, UnknownTopicID → CodeNotFound (404)
- InvalidTopicException, InvalidPartitions, InvalidReplicationFactor,
  InvalidReplicaAssignment, InvalidConfig, InvalidRequest,
  PolicyViolation → CodeInvalidArgument (400)
- RequestTimedOut → CodeDeadlineExceeded (408)
- BrokerNotAvailable, LeaderNotAvailable, NotController,
  PreferredLeaderNotAvailable → CodeUnavailable (503)
- UnsupportedVersion, SecurityDisabled → CodeUnimplemented (501)

Schema Registry error mapping (schema_registry.go):
- ErrSubjectSoftDeleted, ErrSchemaVersionSoftDeleted,
  ErrSubjectLevelModeNotConfigured → CodeNotFound
- ErrReferenceExists, ErrOperationNotPermitted → CodeFailedPrecondition
- ErrSchemaTooLarge, ErrInvalidRuleset, ErrInvalidMode →
  CodeInvalidArgument
- ErrUnknownLeader → CodeUnavailable

Updates 4 existing integration tests that asserted CodeInternal for
InvalidConfig errors (now correctly CodeInvalidArgument). Adds
integration tests for duplicate topic creation (CodeAlreadyExists)
via both Connect RPC and HTTP.

Ref: https://redpandadata.atlassian.net/browse/UX-990
Short-circuit auth errors before the general path using
isKafkaAuthorizationError() directly. Delegate topic partition
error handling to the central mapper to fix InvalidTopicException
returning 404 instead of 400.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…TOPIC_EXCEPTION

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…Info detail

- Add curated user-friendly messages for ~70 Kafka error codes
- Add secondary ErrorInfo detail with domain "redpanda.com/dataplane/kafka"
  carrying the raw Kafka error name, code, description, and retriability
- Expand gRPC code mappings from ~19 to 60+ Kafka error codes, adding
  FailedPrecondition, ResourceExhausted, Unauthenticated, and Aborted categories
- Update message resolution to 4-tier fallback: custom msg > friendly map >
  kerr Description > unknown fallback
- Add comprehensive tests for all new mappings and ErrorInfo details

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Purely a component change, the logic should remain
the same.
To the new UI registry components
Rewrite modals.tsx from imperative openModal()
pattern to declarative controlled Dialog
components. Replace Modal/Alert/Box/Button
from @redpanda-data/ui with registry equivalents.
Replace legacy @redpanda-data/ui components
with registry equivalents and sonner toasts.
DataTable kept as-is for separate migration.
Replace all @redpanda-data/ui components with
registry equivalents. Migrate toasts to sonner,
Tabs to compound pattern, CodeBlock to
DynamicCodeBlock, LegacyButton to Button+Tooltip.

This also includes the update of the
DynamicCodeBlock component which fixes the lack
of syntax highlighting.
Replace legacy DataTable with useReactTable,
composed Table/TableHeader/TableBody, and
DataTablePagination. Zero @redpanda-data/ui
imports remain in schemas directory.
Fix other places where useApiStoreHook might be missing
Add workflow to set Enterprise CI status to success on pushes that
only affect non-code files (e.g. changelog, docs), avoiding blocked PRs.
docs: update CHANGELOG.md for v3.7.0
…topic-detail

Fixes consumer loading in topic detail
…pport-features-disabled-state

Fixes ACL disabled states + adds useSupportedFeaturesStore through the app
- Introduce Group principal type alongside User in ACL and role UIs,
  gated on the 'gbac' enterprise feature flag
- Encode the full principal (Type:name) in ACL detail/update URLs;
  bare names default to User for backward compatibility
- Show a Group badge next to group principal names in the ACL list
- Display User and Group role members in separate sub-sections on the
  role detail page, with the ability to add Group principals when GBAC
  is enabled
- Expose the gbac feature flag from the license service backend
…detail page

- Unit tests for parsePrincipalFromParam covering User, Group, and bare name inputs
- Integration tests for AclDetailPage verifying that principal types are preserved
  through URL params and that the edit button navigates with the correct path and host
sago2k8 and others added 20 commits April 3, 2026 04:27
Replace non-reactive api.* reads in render paths with useApiStoreHook selectors
so that components re-render when store state changes. Affected components:
AclList, PermissionsListTab, UsersTab, UserActions, RolesTab, and AclsTab.

Update the backend-api mock in acl-list.roles tests to export useApiStoreHook,
required since the component now calls it during render.

Event-handler calls (deleteServiceAccount, refreshAcls, etc.) are left as-is.
Update useUpdateRoleMembershipMutation to immediately reflect add/remove
operations in the listRoleMembers cache before the API responds.

- onMutate: cancel in-flight queries, snapshot cache, apply change
- onError: restore snapshot on API failure
- onSuccess: invalidate queries as before to sync with the server

Tests written TDD-style: three cases covering optimistic add, optimistic
remove, and rollback on error.
…ation

- Replace Chakra ConfirmItemDeleteModal with registry Dialog in
  DeleteUserConfirmModal and DeleteRoleConfirmModal; add try/finally
  so the portal always closes even on error
- Move DeleteUserConfirmModal outside DropdownMenu in UserActions to
  resolve Radix FocusTrap vs Chakra FocusLock conflict (portal autocloses)
- Switch RolesTab from MobX rolesApi.roles to useListRolesQuery so the
  list re-renders reactively after create/delete
- Switch role-details.tsx delete from legacy rolesApi.deleteRole to
  useDeleteRoleMutation; navigate via TanStack Router instead of
  appGlobal.historyPush to ensure correct cache invalidation + routing
- Add useInvalidateUsersCache to AclsTab so user list refreshes after
  delete; await onConfirm in modal handlers so invalidation completes
  before closing
- Extract PermissionsListActions component with DeleteUserConfirmModal
  for user-delete actions in PermissionsListTab (consistency with UsersTab)
- Add data-testid to delete buttons and confirm modal button
- Fix RolePage E2E helper: wrong placeholder, wrong button test-id,
  wrong post-delete URL; add deleteRoleFromList and validateNotInList helpers
- Add integration tests: list renders from useListRolesQuery, delete calls
  mutation with correct args
- Add E2E spec roles-list.spec.ts: create appears in list, delete from
  list disappears, delete from details disappears

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… gray edit button

- Delete role-details.tsx (class component no longer wired to any route;
  the active details page is role-detail-page.tsx which has no Delete button)
- Remove 'role deleted from details' E2E scenario and its deleteRole() helper
  (the details page is ACL-config only; deletion is list-only)
- Change roles-list edit button from ghost (blue) to secondary-ghost (dark gray)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mModal

The modal rewrite removed the testId from the confirmation Input, breaking
the 'should delete a user' E2E test which targets this selector.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mpiler

The React Compiler cannot handle TryStatement with a finally clause.
Replace with a plain await — on success the dialog closes normally;
on error the mutation's onError handler shows a toast and the dialog
stays open so the user can retry.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Show 'Role name' label in CreateACL when principal type is RedpandaRole
- Update role-page test to use 'add-allow-all-operations-button' testId

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: pipeline name in view mode

* feat: copy changes and better dialog styles

* fix: diagram depth and width fixes

* fix: fixed overflow and truncation issues in new pipeline UX

* fix: collapses pipeline diagram nodes after 5 levels of nesting and surfaces a dot count

* fix: claude comments
…e cleanup timeout (#2363)

- In users.spec.ts: add waitForURL after fill so nuqs async navigate completes
  before asserting filtered counts
- In debug-bundle-page.ts: increase cleanup Promise.race timeout from 60s to 90s
  for slower CI environments

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: include search params in MF v2 navigation sync

The navigateTo effect and onRouteChange callback only compared/sent
the pathname, losing search params (tab state, filters) during
host ↔ remote navigation sync.

Fix:
- navigateTo effect: compare against pathname + searchStr so tab
  changes from the host are detected
- onRouteChange: send pathname + searchStr so Console tab navigation
  syncs back to Cloud UI's URL

This change is backwards compatible — if the host sends paths without
search params, behavior is identical to before.

Companion change in Cloud UI: redpanda-data/cloudv2#25381

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test: add searchStr handling tests for MF v2 navigation sync

Test that onRouteChange includes search params (e.g., ?tab=messages)
and that navigateTo accepts paths with search params for host-driven
navigation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pulls in a few enhancements / bug fixes
Run yes | bunx @fumadocs/cli add
  --dir https://redpanda-ui-registry.netlify.app/r
  combobox
* serverless: enable password change

* serverless: remove unused prop
* chore: upgrade Module Federation and Rsbuild to latest

Align with Cloud UI and ADP UI — all three apps now use MF 2.3.x
and Rsbuild 1.7.x latest.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: remove accidentally committed files

Remove docker-compose.yml and .mf/diagnostics that were untracked
local files accidentally included in the previous commit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: update lockfiles after MF/Rsbuild upgrade

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
frontend: migrate /schema-registry pages to new UI Registry components
* fix(frontend): resolve Snyk dependency vulnerabilities

Add path-to-regexp override 8.4.0 to fix:
- SNYK-JS-PATHTOREGEXP-15789763 (HIGH): ReDoS
- SNYK-JS-PATHTOREGEXP-15789765 (HIGH): ReDoS
Transitive via @modelcontextprotocol/sdk > express.

Bump yaml from ^2.8.1 to ^2.8.3 and add cosmiconfig-scoped
yaml@1.10.3 override to fix:
- SNYK-JS-YAML-15765520 (MEDIUM): Uncontrolled Recursion
Affects both direct dep and transitive via @emotion/babel-plugin.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(frontend): scope path-to-regexp override to avoid express@4 breakage

Address Claude review feedback: scope the path-to-regexp override to
only affect router (express@5) and not express@4's path-to-regexp@0.1.12
used by webpack-dev-server, which has an incompatible API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@c-julin c-julin merged commit 2aca56e into release-3.7 Apr 8, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants