Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: VirtoCommerce/vc-module-pagebuilder
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dev
Choose a base ref
...
head repository: VirtoCommerce/vc-module-pagebuilder
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: support/3.830
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 7 commits
  • 25 files changed
  • 3 contributors

Commits on Mar 11, 2026

  1. Configuration menu
    Copy the full SHA
    312a3ac View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2026

  1. Configuration menu
    Copy the full SHA
    5bc6739 View commit details
    Browse the repository at this point in the history

Commits on Mar 13, 2026

  1. up content version

    basilkot committed Mar 13, 2026
    Configuration menu
    Copy the full SHA
    bc93fc4 View commit details
    Browse the repository at this point in the history
  2. update workflow

    basilkot committed Mar 13, 2026
    Configuration menu
    Copy the full SHA
    62f5416 View commit details
    Browse the repository at this point in the history
  3. ci: Auto IncrementPatch

    vc-ci committed Mar 13, 2026
    Configuration menu
    Copy the full SHA
    2e72881 View commit details
    Browse the repository at this point in the history

Commits on Jul 27, 2026

  1. fix(VP-9220): stop Page Builder pages going blank and losing content

    Backport of the content-integrity fixes from dev (#148, #151 and the VP-9220
    guard) onto the 3.830 support line, scoped to what the data loss needs. The
    dev-only companions those PRs sit next to — the asset-reference index, the
    page-changed re-index event, SyncGroupSettingsToContent, the CopyPageContent
    endpoint, UpdateGroup draft-seeding — are deliberately not brought along.
    
    Reported by a customer on Azure SQL: pages opened blank in the designer at
    random and days of work were lost. Four defects combined into that.
    
    Writes were not atomic. SaveBinaryAsync blanked the content column in one
    autocommitted statement and then appended the payload 8 KB at a time in more
    autocommitted statements. Anything that interrupted the sequence — a dropped
    connection, a request the client aborted, one of the transient faults Azure SQL
    documents as expected — left the page empty for good. The write now runs in a
    transaction when the caller has not started one, so an interruption rolls back
    and the previous content survives. The body is also drained before the
    transaction opens, so a stalled upload fails before the column is touched.
    
    Reads could not tell "never written" from "written and empty". A draft row whose
    content column is NULL now reports as having no content, so the reader falls
    through to the published page instead of serving a blank 200 over it.
    
    Selection picked the newest row rather than the current one. SavePageContent
    creates the draft row and writes its content in a separate step, so in between —
    and permanently, after a write that failed — the draft was the newest row with no
    content, and it shadowed the published page that still held the work. Selection
    is now by status: draft when requested, then published.
    
    Saves that carried no document were written verbatim. An empty or unparsable body
    became "deliberately empty" content, which the fall-through cannot rescue because
    it is indistinguishable from content the author cleared on purpose; the next
    publish then promoted it and deleted the page that still had the content. Such a
    body is now refused before the group is touched, so no draft row is stranded
    either. Clearing every block stays a legitimate save.
    
    Every content read and write also leaked a DI scope, a DbContext and an open
    pooled connection. On Azure SQL that walks into the per-database session limit,
    whose errors are exactly the transient faults that used to blank a page — the
    leak fed the corruption. The repository now owns that scope and disposes it.
    
    #148 comes along because the base repository hardcoded T-SQL for every provider:
    PostgreSQL failed outright and MySQL accepted the blanking statement and then
    failed the append, wiping content on every save.
    
    Verified: build clean (TreatWarningsAsErrors), 20 tests green. Both invariants
    proven red first — removing the guard fails 7 tests, restoring the newest-row
    selection fails 4.
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
    basilkot and claude committed Jul 27, 2026
    Configuration menu
    Copy the full SHA
    b24db26 View commit details
    Browse the repository at this point in the history
  2. ci: Auto IncrementPatch

    vc-ci committed Jul 27, 2026
    Configuration menu
    Copy the full SHA
    febe72f View commit details
    Browse the repository at this point in the history
Loading