Skip to content

Copies made before level-2 certification leave no copy bound, so an upgraded node can certify across them #1218

Closed as not planned

Description

@kriszyp

Problem

Copy bounds ([copyBound, peer, ...]), which core admission uses to void a route start below what an audit-less base copy wrote, are recorded only while the local engine certifies at level 2: supportsCheckpointFloors() gates the COPY_START reservation and the per-row accounting. A RocksDB node without syncWal (rocksdb-js before 2.13.0), or any node running a build without harper-pro#1092, still applies audit-less snapshots and leaves no bound.

After the same data directory starts certifying at level 2 (engine or build upgrade), a route can resume floor-only and record a certifiedFrom below a row such a copy wrote. The replayed entry for that row ties the stored snapshot and is skipped without restoring its audit entry. A checkpoint can then claim a complete replay across the missing entry.

Silent, and reached by the ordinary upgrade path.

Possible direction

Fence history from before level-2 certification began. For example, at the first level-2 activation of a database generation, record a conservative bound at the activation time for every known origin (one copy-bound row). That makes every start before it void, so routes certify only from after it. Alternatively, record copy bounds on RocksDB regardless of level from now on. That alone does not cover copies made by older builds.

Raised by the cross-model review on harper-pro#1092 and deferred there: it is a rollout gap of level 2 itself, not of that PR's fixes.

Review-Deferral: d4d66cee8b714757 severity=minor category=data-integrity

Activity

  1. added theissue type on Nov 2, 2026
  2. added this to the v5.4 milestone on Nov 2, 2026
  3. self-assigned this
    on Nov 2, 2026
  4. kriszyp commented on Nov 3, 2026

    @kriszyp
    MemberAuthor

    Not exposed outside 5.4 pre-release builds: 5.3 has no origin floors, so a receiver upgraded from 5.3 certifies only from floors received after the upgrade, which sit above every row a 5.3 copy wrote. Only alpha.1 and alpha.2 had level-1 floors without copy bounds, and alpha data is out of scope. Details on #1227.

    — Claude Opus 5.5

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Fields

Priority

P1

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions