Skip to content

fix(storage): reconcile inherited append phase bytes before seal #1156

Description

@DecisionNerd

Problem

An ordinary public import can commit and reopen, then a subsequent append fails before sealing with phase read bytes and calls disagree. Existing #951 evidence records nonzero inherited authentication/parent-catalog calls paired with zero seal/shape phase bytes. Source inspection on current main d81acdaf12ca261af012143422672661b48a2283 confirms initialization populates cumulative raw byte/call fields but leaves the corresponding phase-byte fields zero; later seal and shape handling does not make pre-seal progress valid.

This is a bounded repair of #951's existing phase-attribution acceptance criteria. #951 remains the close gate for full deterministic admission, S20, conditional S22 and adjacent-rung qualification. This issue introduces no new benchmark or release gate.

Required outcome

Preserve actual observed parent authentication and catalog byte/call numerators, assign each read to its phase exactly once, and keep pre-seal, seal, shape and resumed-checkpoint attribution consistent. Keep qualification fail-closed; do not reset counters, invent byte estimates, suppress append, relax validation, or scan graph-sized data to repair accounting.

Acceptance criteria

  • A direct Rust facade regression reproduces ordinary import → commit → drop/reopen → append with an initial edge, without resetting process counters; validates progress before seal, seals and publishes, then reopens with exact node/edge counts.
  • A resumed/interrupted append regression proves checkpoint restoration and newly observed recovery reads reconcile correctly, without omitting or double-counting inherited parent observations.
  • Assertions cover raw bytes/calls at relevant boundaries and conserve the actual inherited contributions through subsequent phases. Missing/inconsistent evidence still fails qualification.
  • Existing storage-attribution tests and the affected public construction regressions pass. Run the existing equivalent 1x/2x/4x lifecycle and tiny restart tests as the deterministic integration check; preserve a complete failure census before expanding scope.
  • No host ladder, S24/S26 qualification, format migration, or broad attribution refactor is part of this repair. Parent test(scale): attribute physical bytes per node and edge before SCALE26 #951 remains open until all of its own outcomes are proven.

Relationship

Native child of and blocker for #951. The known failure is already documented in #951; this child isolates the verified implementation blocker so its focused PR can close accurately while host qualification remains outstanding.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions