Skip to content

Conversation

@eblairmckee
Copy link
Contributor

@eblairmckee eblairmckee commented Nov 23, 2025

This PR addresses a vast majority of bug bash reports, specifically the "major" ones.

Please see latest comment for most recent changes and how we're better guarding against known regressions (and potential future ones due to this entirely new UX that's dependent on the backend)

key changes

replaces hard coded benthos json schemas with new backend query

This did introduce some breaking changes, which affected how we parse the schema, however, it results in eliminated hundreds of lines of code where we had to coerce the schema to meet our expectations discovered during bug bashing. this is a much more simplified approach, and we can use the proto types instead of inferring types from the schema.

However, if the backend schema changes, and parser is unable to parse the schema it won't show any RPCN components (it will still show "custom" and "additional components", though, ensuring connect is always usable)

component schema changes (ComponentSpec)

{
  name: string;
  type: string;
  status: ComponentStatus;  // previously a string
  summary: string;
  description: string;
  categories: string[];
  version: string;  // ✅ NEW at component level
  config?: FieldSpec;
  examples: string[];  // ✅ NEW - full YAML examples
  footnotes: string;  // ✅ NEW
  plugin: boolean,  // ❌ REMOVED
}

field schema changes (FieldSpec)

{
  name: string;
  type: string;
  kind: string;
  description: string;
  advanced: boolean;  // 🔄 RENAMED from is_advanced
  deprecated: boolean;  // ✅ NEW
  optional: boolean;  // ✅ NEW
  defaultValue: string;  // 🔄 RENAMED from default
  is_secret: boolean,  // ❌ REMOVED
  scrubber: string,  // ❌ REMOVED
  linter: string,  // ❌ REMOVED
  version: string,  // ❌ REMOVED (moved to component)
  annotated_options: string[],  // ❌ REMOVED
  options: string[],  // ❌ REMOVED
  no_dynamic: boolean,  // ❌ REMOVED
  scalars_to_literal: boolean,  // ❌ REMOVED
  examples: string[];
  children: FieldSpec[];
}

less opinionated defaults

this was a pretty contentious topic, and throughout the early iterations kept flip-flopping on whether we should provide default values for certain fields on redpanda components. those are almost all gone (brokers still gets a default) and we're relying solely on the schema for what fields to surface based on if they are not optional, and not advanced.

Screenshot 2025-11-23 at 4 38 03 PM

follow up

We should look at what endpoint the docs site uses, because currently it appears to use the old schema, which will be very confusing to users if they try to use the new UI (see schema changes above). As well as what's considered "common" vs "advanced" (very different in new schema).

better linting

We're now linting (debounce) on yaml editor content changes, and validating against the new backend API (same as the one where we pull component schemas from).

Once I fix the monaco intellisense UI, we'll be able to get autocompletion based on the connect components definitions and properties.

lint ui

Improved styling, however, will be completely revisiting this in the next iteration (form-based UI) so minimal changes for now.

new Connect UI is decoupled from legacy

ripped out all new connect UI from the old and it now lives in its own directory. new UI is conditionally rendered when create/edit/view pages are mounted if enableRpcnTiles feature flag is true.

better wizard step validation

"Next" button is disabled until current wizard step is valid/populated. Given all steps are skippable, this makes it more clear, as previously Next button was always enabled regardless of form state.

Also fixed the "create" buttons to be more responsive to query loading states to eliminate this bug:
Screenshot 2025-11-23 at 4 38 06 PM

better secrets detection

Screenshot 2025-11-23 at 4 34 00 PM

when user references a secret variable that doesn't exist, we suggest creating one, and automatically convert invalid formatting into correct format (screaming snake case) and replace the invalid secret variable with the correct one after user creates the secret.

better loading state when adding secrets. previously when you clicked "create" both 'missing secrets' and 'create new secret' submit buttons would load, which was confusing. now only the relevant one loads, and they are nested within their own individual Form components.

better error handling when updating yaml

previously when adding a new input/output/processor if existing yaml was invalid, it would convert it to json 😬 now we just surface a toast that you need to fix the yaml.

Screenshot 2025-11-23 at 4 37 15 PM

swapped out tiles in "top 12" based on alex's feedback

Screenshot 2025-11-23 at 4 46 27 PM Screenshot 2025-11-23 at 4 47 15 PM Screenshot 2025-11-23 at 4 47 20 PM

Comment on lines +46 to +75
if (readonly) {
return (
<Card size="full">
<CardContent>
<div className="flex items-center gap-4">
<Label>Pipeline Name</Label>
<Text>{name}</Text>
</div>

<Accordion collapsible type="single">
<AccordionItem value="advanced" variant="outlined">
<AccordionTrigger>Advanced Settings</AccordionTrigger>
<AccordionContent className="space-y-4">
<div className="space-y-2">
<Label>Description</Label>
<Text>{description || '-'}</Text>
</div>

<div className="space-y-2">
<Label>Compute Units: {computeUnits}</Label>
<Text variant="muted">One compute unit = 0.1 CPU and 400 MB memory</Text>
</div>
</AccordionContent>
</AccordionItem>
</Accordion>
</CardContent>
</Card>
);
}

Copy link
Contributor Author

@eblairmckee eblairmckee Nov 24, 2025

Choose a reason for hiding this comment

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

View mode

Screenshot 2025-11-23 at 4 08 34 PM

}

return (
<Card size="full">
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Edit mode

Screenshot 2025-11-23 at 4 10 19 PM

Copy link
Contributor

Choose a reason for hiding this comment

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

CC @birdayz should we rinse & repeat for AI features too

Copy link
Contributor

Choose a reason for hiding this comment

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

nice! let's do that

Copy link
Contributor

@birdayz birdayz Nov 25, 2025

Choose a reason for hiding this comment

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

Well, can we also have an input in addition?

For this use case a direct numeric input would be more practical. Users typically have a specific number in mind rather than needing to explore a range. Having to drag the slider to find an exact value adds unnecessary friction compared to just typing the number directly.

Could we add a text input field alongside the slider, or make the slider value editable?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oooh, good point. I'll add a number input next to the slider.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Screenshot 2025-11-26 at 2 00 54 PM :chef-kiss:

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR modernizes the Connect pipeline UI by migrating from hardcoded Benthos JSON schemas to dynamic backend queries, improving UX with better validation, secrets handling, and linting while decoupling the new UI from legacy code.

Key Changes:

  • Replaced hardcoded Benthos schemas with ListComponentsRequestSchema backend API, eliminating schema coercion code
  • Enhanced secrets detection with automatic normalization to screaming snake case and smart replacement in YAML editor
  • Improved wizard validation with per-step validity tracking and disabled "Next" buttons for incomplete forms

Reviewed changes

Copilot reviewed 39 out of 39 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
frontend/src/react-query/api/connect.tsx New queries for component lists, config schema, and pipeline linting via backend API
frontend/src/react-query/api/pipeline.tsx Added cache invalidation for getPipeline queries on start/stop mutations
frontend/src/hooks/use-debounced-value.ts New hook for debouncing values with configurable delay
frontend/src/components/ui/yaml/yaml-editor.tsx Dynamic schema injection from props with Monaco YAML autocomplete
frontend/src/components/ui/yaml/yaml-editor-card.tsx Pass-through schema prop to YAML editor component
frontend/src/components/ui/secret/quick-add-secrets.tsx Secret name normalization, duplicate detection, and editor content auto-update
frontend/src/components/ui/lint-hint/lint-hint-list.tsx Memo optimization, loading state support, and improved styling with Pre component
frontend/src/components/redpanda-ui/components/typography.tsx Added dense variant to Pre component for compact code displays
frontend/src/components/redpanda-ui/components/spinner.tsx Size variants (xs/sm/md/lg/xl) added with CVA
frontend/src/components/redpanda-ui/components/button.tsx New destructiveOutline variant and icon prop support
frontend/src/components/redpanda-ui/components/accordion.tsx Variants system (default/contained/outlined) for different styling contexts
frontend/src/components/pages/rp-connect/utils/yaml.ts Error handling improvements for merge/YAML generation failures
frontend/src/components/pages/rp-connect/utils/wizard.ts Components parameter added to template regeneration
frontend/src/components/pages/rp-connect/utils/schema.ts Complete rewrite to use proto types, new field visibility logic, debug logging
frontend/src/components/pages/rp-connect/utils/categories.ts Type signature updated for ConnectComponentSpec
frontend/src/components/pages/rp-connect/utils/__fixtures__/component-schemas.ts Mock component fixtures for testing with new schema structure
frontend/src/components/pages/rp-connect/types/schema.ts Schema types aligned with proto definitions, removed legacy types
frontend/src/components/pages/rp-connect/types/constants.ts Added topics to critical fields, removed managed components filter
frontend/src/components/pages/rp-connect/types/wizard.ts Schema adjustments for optional connection data
frontend/src/components/pages/rp-connect/pipelines-*.tsx Feature flag routing to new PipelinePage component
frontend/src/components/pages/rp-connect/pipeline/*.tsx New unified pipeline page with create/edit/view modes, toolbar, and form validation
frontend/src/components/pages/rp-connect/onboarding/*.tsx Wizard improvements with validity tracking, components prop threading, and sidebar refactoring
frontend/.claude/skills/frontend-developer/SKILL.md New skill documentation for frontend development patterns

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

cardinality: 'infinite',
}),
});
await queryClient.invalidateQueries({
Copy link
Contributor

Choose a reason for hiding this comment

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

I think it was deleted before because some people preferred to have the invalidation happen in the component layer, but let's stick to the pattern we established before and keep it tied to the hook.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

+1

Comment on lines +284 to +286
<Alert variant="destructive">
<AlertTriangle className="h-4 w-4" />
<AlertDescription>
Copy link
Contributor

Choose a reason for hiding this comment

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

👏

Comment on lines +222 to +226
if (onError) {
onError([errorMessage]);
} else {
toast.error(errorMessage);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we show a toast error even if onError callback exists?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

wanted to make it more custom, given this is a reusable component that we use in multiple features. more like a design system component API. in some cases I assume we may not want to show a toast. eg: if it's in a modal, and we don't want to dismiss modal, we may want to surface an alert.

</Text>
<Text className="rounded border bg-white px-2 py-1 font-mono text-gray-800 text-sm leading-relaxed">
</Pre>
<Pre variant="dense">
Copy link
Contributor

Choose a reason for hiding this comment

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

👏 Maybe we should also use DynamicCodeBlock?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

this is a very temporary fix, as in v2 of this I'm actually going to have a logger and completely different lint interface

Comment on lines 221 to 227
toast({
status: 'error',
duration: null,
isClosable: true,
title: 'Failed to create pipeline',
description: formatPipelineError(err),
});
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's try to create a ConnectError with ConnectError.from(error), if possible, and follow the format function. the description could be kept intact with formatPipelineError

Copy link
Contributor Author

Choose a reason for hiding this comment

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

this is also coming in v2, where I completely rewrite error and lint handling/UI. this is just a temp fix.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

also this is legacy code, let's not focus on this page, given it's basically getting reverted (with minor improvements) to old UI)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ended up using ConnectError.from but still using legacy formatPipelineError because it formats lint errors, and int he legacy UI we show those in toasts

* by the Apache License, Version 2.0
*/

import { useLocation, useParams } from 'react-router-dom';
Copy link
Contributor

Choose a reason for hiding this comment

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

If we were to update our router, do you think there is any way to abstract this to make it less painful? Just wondering. Nothing actionable

Comment on lines 130 to 135
toast({
status: 'success',
title: 'Pipeline started',
duration: 4000,
isClosable: false,
});
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need to do this? I think the state transition should happen automatically, so the user would see the pipeline already starting

DialogHeader,
DialogTitle,
} from 'components/redpanda-ui/components/dialog';
import { Group } from 'components/redpanda-ui/components/group';
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this component is deprecated now, can we use ButtonGroup?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

can do that later when we migrate all of them

Comment on lines +273 to +296
# Check if component exists
ls src/components/redpanda-ui/components/
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe say if file exists and then ls src/components/redpanda-ui/ because we may also have hooks or other directories.

{(component.status === ComponentStatus.BETA ||
component.status === ComponentStatus.EXPERIMENTAL ||
component.status === ComponentStatus.DEPRECATED) &&
component.name !== 'redpanda' && (
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this to prevent the beta status badge on redpanda component?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes. there's an open item I have to resolve this once David Yu is back, we're stil deciding what components are beta/experimental and if we even want to show them in this UX


const handleCancel = useCallback(() => {
onCancel?.();
navigate(-1);
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we have access to goBack in this version of react-router-dom?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

apparently not

Comment on lines 180 to 198
{/* Delete confirmation dialog */}
<Dialog onOpenChange={setIsDeleteDialogOpen} open={isDeleteDialogOpen}>
<DialogContent size="md" variant="destructive">
<DialogHeader>
<DialogTitle>Delete Pipeline</DialogTitle>
<DialogDescription>
Are you sure you want to delete <strong>{pipelineName}</strong>? This action cannot be undone.
</DialogDescription>
</DialogHeader>
<DialogFooter>
<Button onClick={() => setIsDeleteDialogOpen(false)} variant="outline">
Cancel
</Button>
<Button disabled={deleteMutation.isPending} onClick={handleDeleteConfirm} variant="destructive">
{deleteMutation.isPending ? 'Deleting...' : 'Delete'}
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
Copy link
Contributor

Choose a reason for hiding this comment

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

Use frontend/src/components/ui/delete-resource-alert-dialog.tsx

Copy link
Contributor Author

Choose a reason for hiding this comment

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

that's a weird pattern to include the trigger in something called a dialog.... left it as is for now, but we should rethink the naming. I also added a triggerVariant because I need to render it as a button and not a dropdown menu item

@eblairmckee
Copy link
Contributor Author

Changes since original pull request

Key Changes

1. Less Opinionated Defaults + Better Guarding

Field visibility and values controlled by backend schema with intelligent guardrails (previously we had a lot of frontend overrides which would cause diversions from docs representation and lint):

  • Backend-first: All field values from backend schema, shown when not optional/advanced
  • Wizard-aware: Fields populate from wizard data (topics, credentials) when available
  • SASL conditional: Only shown when user credentials configured
  • Default transparency: Backend defaults shown in comments when backend provides them
  • Error guarding: Try/catch around schema parsing, config generation, YAML conversion

Example output:

transaction_isolation_level: read_uncommitted # Required (default: "read_uncommitted")
consumer_group: "" # Required if topic partition is not specified
auto_replay_nacks: false # Required

2. Comprehensive Error Handling

Added try/catch with toast notifications throughout schema → config → YAML pipeline. Custom option always available so users can skip wizard on any error.

Schema Parsing (parseSchema() in schema.ts:82-101)

  • Built-in error handling catches backend schema changes that could crash parser
  • Shows toast: "Failed to parse component schema"
  • Graceful degradation: returns empty array instead of crashing
  • All callers automatically protected: connect-tiles.tsx, onboarding-wizard.tsx, pipeline/index.tsx
  • Users always see "Custom" option to skip wizard

Schema to Config (schemaToConfig())

  • Guards against malformed component specs
  • Returns undefined on error instead of crashing
  • Downstream code handles undefined gracefully

YAML Generation (yaml.ts)

  • Catches parse errors when merging configs
  • Shows toast: "Failed to parse existing YAML" or "Failed to merge component"
  • Keeps existing YAML in editor instead of converting to JSON
  • Users can fix YAML manually and retry

Pattern: All errors use consistent toast format:

toast.error(
  formatToastErrorMessageGRPC({
    error: ConnectError.from(error),
    action: "Parse component schema",
    entity: "Component list",
  })
);

Impact: Now that's we're relying solely on the backend, breaking backend changes won't crash UI. Users get actionable feedback and can recover. "Custom" is ALWAYS available for users to build their own configs from scratch, regardless of backend state.

3. New Connect UI: Decoupled + Feature Flagged

Ripped out all new Connect UI from legacy code. Now lives in src/components/pages/rp-connect/pipeline and conditionally rendered from legacy UI if feature flag is true AND it's embedded (all cloud clusters).

Rendering:

if (isEmbedded() && enableRpcnTiles) {
  // Show new UI
} else {
  // Show legacy UI or intro screen
}

Rollback: Toggle enableRpcnTiles OFF → instant revert to legacy UI. No deployment needed.

Decoupling: Zero shared dependencies with MobX/Chakra legacy code.

4. Fixed Redirect Regression (legacy UI)

Problem: overview.tsx:115-121 had redirect logic that sent some users directly to the wizard EVEN IF they had pipelines already configured, OR kafka connect pipelines (1 incident caused by this, another pseudo incident see #ux-team channel for details).

Root Cause: MobX state timing issue caused:

  • Kafka Connect users redirected to wizard because we neglected to be backwards compatible, even though we kindof sunset this feature improperly
  • Users with existing pipelines never able to see pipeline list - stuck in wizard (edge case if slow network or mobx was out of sync)
  • Root cause: Redirect firing before data loaded properly

Fix: Removed redirect logic entirely. Users always land on Connect overview page with proper tabs.

File: src/components/pages/connect/overview.tsx:115-121

5. Reactive UI States

All async operations show loading/error/success states via toasts:

Loading States:

  • Pipeline: create, update, delete, start, stop
  • Secrets: create, update
  • User/ACL: configure permissions
  • Component selection: switching connectors

Error Surfacing:

  • Schema parsing failures
  • YAML validation errors
  • API failures (network, 500s)
  • Permission errors

Success Confirmations:

  • "Pipeline created"
  • "Pipeline updated"
  • "Secret created"
  • "Permissions configured"

Pattern: Toast on every user action. No silent failures.

6. Test Coverage

What's Covered:

  • ✅ Schema parsing with various backend responses
  • ✅ Default value generation (backend defaults, wizard overrides, connection defaults)
  • ✅ Field visibility rules (optional, advanced, wizard-relevant)
  • ✅ SASL conditional visibility (shows only when credentials configured)
  • ✅ Comment format for all field types (shows backend defaults when present)
  • ✅ YAML merging and spacing preservation
  • ✅ Error handling: schema parsing, config conversion, YAML generation

What's NOT Tested (future work once Jan merged the container PR for e2e tests):

  • Expected configs for top 12 components (keeps backend and frontend aligned on expectations)
  • Full wizard flow end-to-end
  • Error boundary behavior when shit hits the fan
  • Pipeline CRUD operations for new UI

Intended "Breaking" Changes

  • SASL blocks only appear when wizard user data exists
  • More fields visible if backend marks them as required with defaults
  • Comment format changed (shows backend defaults when present)

Rollback Strategy

Toggle enableRpcnTiles feature flag OFF → instant revert. No deployment needed.

Copy link
Contributor

Choose a reason for hiding this comment

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

If that's ok I will commit this separately to our repo so we can start using it sooner

Copy link
Contributor Author

Choose a reason for hiding this comment

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

tbh, in an ideal world, I'd love to have a repo just for claude: skills, commands, etc. that we can pull/update into consuming repos similar to the ui-registry (or we can explore pulling into ui-registry given these are all frontend focused). let's discuss when you're back

});
};

export const useLintPipelineConfigQuery = (
Copy link
Contributor

Choose a reason for hiding this comment

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

Please check if this hook is also in the pipeline.tsx file, maybe we can remove 1 or the other.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It's not, we use a different lint endpoint with the new grpc endpoint

Copy link
Contributor

Choose a reason for hiding this comment

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

Have we already moved it to the UI registry as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

no. i do an upstream dump every few weeks

@eblairmckee
Copy link
Contributor Author

🚨 Breaking Change: ConnectTiles Federated Module

connect-tiles.tsx - Removed internal useListComponentsQuery(). Now dependent on backend to render any connect component tiles:

  • components?: ComponentList - Raw component list from backend
  • isLoading?: boolean - Loading state

Why: Enables federated module usage without backend API context dependency. Parent components now control data fetching.
Impact: Cloud now needs to fetch connect component schema and pass to ConnectTiles. However, if endpoint is unavailable or components are not passed in due to console/cloud version mismatch, it will still always load the "Custom" tile and additionalComponents (API methods) (this has always existed, but worth calling out).


Other Improvements

  • Enhanced loading UX:
    • Connect Overview (RPCN entry point connect-clusters): first conditional in render checks to see if enableRpcnTiles feature flag is true, then either loads the entirely new UI or the legacy. Within new UI: better progressive loading states depending on multiple query calls, to expose available features as they become ready. New UI has NO dependency whatsoever on legacy code (no mobx, just launch darkly feature flag). This does introduce a lot of duplication, but all duplicated code is using modern libraries and practices and when we remove legacy code, it will be functionally backwards compatible.
    • CreatePipelineSidebar: Loading skeleton while fetching components

Better Error Handling

  • Improved error handling - Functions and hooks impacted by relying on backend component list schema now surface toast notifications when component spec not found rather than silently failing.

  • NEW Pipeline list page - Tabbed interface with Redpanda Connect + Kafka Connect, graceful degradation, non-blocking checks. Unblocks kafka-connect enabled clusters from using the new UI


Migration for Federated Consumers

// Before: ConnectTiles managed its own query
<ConnectTiles componentTypeFilter={['input']} />

// After: Parent manages query, passes data down
const { data, isLoading } = useListComponentsQuery();
<ConnectTiles components={data?.components} isLoading={isLoading} componentTypeFilter={['input']} />

version: '',
examples: [],
footnotes: '',
$typeName: 'redpanda.api.dataplane.v1.ComponentSpec',
Copy link
Contributor

Choose a reason for hiding this comment

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

I agree with Ben, please use create from protobuf, it helps to make correct default values in a deep object, or, is there a big reason to don't use?

@eblairmckee
Copy link
Contributor Author

Summary of RPCN API calls:

Old

Both with enableRpcnTiles feature flag enabled and disabled

List Connect component schemas

rpk connect list --format json-full-scrubbed | jq --sort-keys "del(.date)"
Last updated Oct 8, 2025

Lint pipeline

On create

PipelineCreateSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'
Unchanged in 8 months

On Edit

PipelineUpdateSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'
Unchanged in 8 months

New

✨[NEW!] List Connect component schemas

ListComponentsRequestSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'

Lint pipeline

On create

PipelineCreateSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'

On Edit

PipelineUpdateSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'

✨[NEW!] On editor value change

(while user is typing in either edit or create mode)
LintPipelineConfigRequestSchema from 'protogen/redpanda/api/dataplane/v1/pipeline_pb'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants