Hi,
Yes, this is a known pattern, and the root cause you describe is correct: Lakeflow Connect ingestion tables are AUTO CDC (SCD Type 1) targets, so they are mutable streaming tables rather than append-only. A normal streaming read against them either fails or forces you into full refresh.
The fix is to stop streaming the Bronze table itself and stream its change data feed instead.
Since DBR 15.2, you can read a change data feed from a streaming table that is the target of an AUTO CDC query, provided the table is published to Unity Catalog. That gives you an append-only stream of insert, update_preimage, update_postimage and delete records, which is exactly what SCD2 needs. In Silver you then feed that CDF stream into AUTO CDC INTO with STORED AS SCD TYPE 2, keyed on your business key and sequenced by a reliable ordering column. Roughly:
CREATE OR REFRESH STREAMING TABLE silver_customer;
CREATE FLOW silver_cdc AS AUTO CDC INTO silver_customer
FROM stream(bronze_customer) WITH (readChangeFeed = true)
KEYS (customer_id)
SEQUENCE BY _commit_version
STORED AS SCD TYPE 2;
One thing to check before you build this. If your workspace is on DBR 19 LTS or above and the Bronze table is a Unity Catalog managed table with row tracking enabled, automatic change data feed works with no table configuration at all. Otherwise you are on legacy CDF, which needs delta.enableChangeDataFeed set to true on the table, and you should confirm whether your ingestion pipeline lets you set that table property. Note that CDF is not a permanent history either way. Records are only retained for the table's retention window, so if a downstream stream sits idle too long you can lose the ability to resume.
Two other things worth verifying in your current setup, because they cause the same symptom independently.
First, make sure Silver is actually a streaming table with an AUTO CDC flow and not a materialized view. Materialized views recompute when their sources change, so if Silver is an MV you will get a full rebuild regardless of what Bronze does. Same question applies to Gold. Some MV query shapes refresh incrementally and some do not, and the pipeline event log tells you which happened on each run. That is the first place I would look to confirm where the full recompute is really originating.
Second, avoid reaching for skipChangeCommits here. It is the usual suggestion for streaming from a mutable source, but it silently drops updates and deletes, which would quietly corrupt an SCD2 history. It is the right tool only when you genuinely do not care about changes to existing rows.
Finally, depending on which connector you are using, it is worth checking whether the ingestion pipeline itself can write the destination as SCD Type 2. Support varies by connector, but if yours has it, Bronze keeps the history and the problem largely disappears at the source.