Fix Builder source field sync#1990
Conversation
This comment has been minimized.
This comment has been minimized.
|
Here's a visual recap of what changed: Open the full interactive recap |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Builder reviewed your changes — looks good ✅
Review Details
This incremental review focused on the latest follow-up for case-distinct Builder field mappings. I verified that the previously reported collapse bug is now addressed: seedMockSourceFields() preserves the existing Builder sourceFieldKey by propertyId during regeneration, so a mapped data.Status field no longer gets recomputed back to data.status on resync. The new focused tests around exact-case metadata matching and preserved mapped field keys line up with that behavior.
Risk assessment: High. These paths still control Builder-backed source refreshes and field regeneration, but the newest patch is narrowly scoped and appears to fix the reported regression without expanding behavior elsewhere.
For this incremental pass, I did not find a new actionable issue beyond the still-open earlier continuation/shrink concern, and I resolved the stale comment about case-distinct mapped fields collapsing after both were mapped.
🧪 Browser testing: Skipped — PR only modifies backend/source-sync logic and tests, no UI impact.

What this fixes
Content was not reliably importing all configured Builder CMS fields, so values such as topics, tags, custom model fields, and fields whose names differ only by capitalization could disappear during refreshes. This PR makes both Builder readers request and materialize those fields while continuing to exclude large page bodies from ordinary source refreshes.
It also protects existing data when Builder unexpectedly returns an empty result: Content now keeps the previous rows and reports the source as stale instead of silently erasing the snapshot. If Builder model discovery fails, attach and role-change operations now stop before replacing valid field mappings with an empty set.
Verification
NO BLOCKERSManual QA note
Google login for
alice@builder.iocould not be verified in this isolated worktree because the Google auth route is not configured (404). No alternate account was used.