Skip to content

[Product gap] Eliminate production scaffold-only connector implementations #153

Description

@seonghobae

Gap

Protected develop@622e5e6c3d534f230c390f10e3832efadfc01825 still ships discoverable connector classes whose production methods deliberately refuse or no-op:

  • AbstractScaffoldTargetConnector.write(...) always throws UnsupportedOperationException;
  • DatabricksTargetConnector, SnowflakeTargetConnector, and QlikSenseTargetConnector inherit that refusal while appearing in connector discovery/configuration surfaces;
  • AbstractScaffoldCdcSource.start(...) always throws UnsupportedOperationException and stop() is a no-op;
  • MySQL and SQL Server CDC source descriptors inherit that scaffold behavior.

The existing catalog is honest about SCAFFOLD, which is safer than pretending the integrations work, but it still leaves buyer-visible production stubs in the shipped codebase. The product policy requires demo/stub-only production paths to be completed or removed from the production surface.

Product decision

For every scaffold connector, choose one of only two terminal outcomes:

  1. productionize — implement a real, tested connector with operational support; or
  2. remove from production discovery/code — retain design documentation/examples outside the production connector registry until implementation exists.

SCAFFOLD is an acceptable temporary migration state, not a permanent commercial endpoint.

Live execution state — 2026-08-09

Status taxonomy: all entries below are active_pr or planned; none is implemented_on_develop until protected integration.

Connector Current bounded decision Live work Current blocking boundary
Qlik Sense remove misleading row-sink registry/catalog/config binding; keep reference/design material only PR #156, exact head 585b7f9439a9a5a3cf959bb10008d620424b4578 Current aggregate CI/dependency/SBOM/SAST/security is green on synthetic merge ec512c7f7e1a579eb20deabe877a8171038afc4d, but literal-source hard evidence, non-vacuous owned-production coverage (#162/#164), and qualifying independent approval remain absent.
MySQL CDC remove nonfunctional Spring production discovery; retain explicit reference scaffold PR #158, exact head 3b501f823fa0d3d93a5a95c714efdd79242a8a58 Its current Security Scan fails on inherited protected-base Jackson advisories, not the MySQL diff. Shared remediation is PR #160; after that integrates, #158 must be revalidated against the new protected base.
SQL Server CDC remove nonfunctional Spring production discovery; retain explicit reference scaffold PR #163, exact head 754cce280d71b1745c8514a661e304fd208ccfee Current exact-head workflows are queued and therefore not passing; no formal approval exists.
Databricks unresolved terminal outcome planned Do not open a competing implementation/removal slice until the already-active connector retirements stabilize/integrate and the production catalog is freshly re-read.
Snowflake unresolved terminal outcome planned Same sequencing rule as Databricks.

Shared security PR #160 (2905c416679dfccf6ad48e7a7f056b22d476a553) has current aggregate-green CI, Dependency Review, SBOM, SAST, and Security Scan, and its Trivy merged-tree scan reports zero CRITICAL/HIGH/MEDIUM findings after moving Jackson to 2.21.5. It is still Draft because current protected workflows execute synthetic PR merge revisions, the inherited JaCoCo durable-job gate can pass with zero analyzed production classes, and no qualifying independent approval exists. No #160 evidence transfers to a connector PR after a base/head change.

This live table is sequencing evidence, not shipped product truth. Any head/base movement invalidates the corresponding exact-head facts above and requires a fresh issue/PR reconciliation.

Target connectors

Databricks

Before implementation, reverify current primary Databricks SQL/Statement Execution/JDBC documentation and select one supported production API. Implement bounded batch semantics, TLS/auth configuration, target identifier validation, transaction/idempotency behavior, retry classification, cancellation/timeouts, observability, and realistic integration tests against a controlled Databricks test environment. Never log PAT/OAuth credentials.

Snowflake

Reverify current Snowflake JDBC/SQL API guidance. Implement explicit warehouse/database/schema/table configuration, identifier safety, bounded batch ingestion, transaction/autocommit semantics, retry classification, query cancellation/timeouts, telemetry, and realistic integration tests. Do not treat successful config validation as write support.

Qlik Sense

The current bounded product decision is removal from the production row-sink surface, not invention of a fake warehouse write path. PR #156 removes Qlik from registry/catalog and Spring configuration binding while retaining only non-registered reference/design material. A future Qlik integration must model Qlik's actual supported reload/data-file/application orchestration boundary and obtain realistic provider evidence before production discovery returns.

CDC sources

MySQL / SQL Server

The current bounded decision for both sources is fail-closed removal from automatic Spring production discovery while retaining explicit reference scaffolds. PR #158 owns MySQL; PR #163 owns SQL Server.

A future productionization must use maintained Debezium source connectors through the existing source SPI or a refactored multi-engine factory. Each source requires:

  • connector dependency/version pin;
  • complete config validation with secret-safe errors;
  • offset/schema-history semantics;
  • start/stop/restart lifecycle;
  • database-specific snapshot/log/binlog/CDC prerequisites;
  • realistic container/integration fixture or supported external test environment;
  • no skipped source-specific tests counted as support evidence;
  • compatibility and recovery documentation.

TDD / quality gates

For each connector independently:

  • RED test proves current scaffold refusal/discovery at the intended runtime boundary;
  • production implementation or registry removal follows as the narrowest accepted remedy;
  • production statement/branch coverage remains exact and non-vacuous for owned code;
  • public API/Javadoc is complete;
  • unit + integration + failure + timeout + retry + concurrency/idempotency tests as applicable;
  • credentials are supplied only through environment/secret contracts and never committed;
  • test environment uses realistic provider/database semantics, not a fake always-success client;
  • catalog status becomes production-capable only after all implementation and operational gates pass;
  • docs/PRD/TRD/Architecture/UML/API/Threat/Operability/Traceability/CHANGELOG updated truthfully;
  • exact-source CI, dependency, SBOM, SAST/security, review and release evidence pass under the integrated protected controls;
  • queued, pending, absent, stale-head, predecessor-head, status-only, synthetic-merge-only, or vacuous-coverage evidence is not passing.

Sequencing

Do not attempt all providers in one giant PR. Implement/remove one bounded connector at a time. Existing active connector PRs may proceed independently where their paths and writer leases do not conflict, but do not start Databricks/Snowflake merely to increase parallelism while the current production-surface retirements are unresolved. After each integration, refetch protected develop, the connector registry/catalog/configuration surfaces, exact remaining scaffold classes, checks/reviews, and this issue before selecting the next connector.

Completion definition

This issue closes only when no production registry/discovery/configuration path contains a connector whose only runtime behavior is scaffold validation + refusal/no-op. Experimental designs may remain in documentation or clearly isolated non-production reference code, but not as permanent shipped production stubs. Closure also requires canonical connector support documentation to agree with protected code and machine-checkable tests to prevent retired scaffold discovery from returning.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: authAuthentication, authorization, identity, or tenant isolationarea: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: dependenciesDependency or lockfile maintenancearea: securitySecurity boundary, hardening, or vulnerability preventionmaintenancepriority: mediumNormal-priority or P2 workscope: product-gapCustomer-visible product gapstatus: blockedBlocked by conflict, dependency, or required prerequisitetype: featureNew or expanded product capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions