Skip to content

release blocker: native-region proof contracts lag packed-loop and byte-read lowering #9150

Closed

Description

@proggeramlug

Release blocker

Full CI run 33298955917 failed compiler-output-regression in the native-region-proof suite at release SHA 97bae62ad9ee781830e609eda17429c16ccb1285.

The exact three failing workloads are:

  • image_convolution
  • packed_f64_loop_versioning
  • packed_f64_loop_versioning_negative

Diagnosis

The immediately preceding release revision 330638064a passes all three on perrymaster.skelpo.net. The later mainline optimization merge changes the structural contracts:

  1. PR codegen: byte-array reads reach the numeric proofs (bench_int_arithmetic 475 → 395 ms) #9146 correctly restores byte-array += to native numeric addition while preserving OOB undefined. The image blur now contains only the 75 documented js_number_coerce calls for kernel coefficients; the PR explicitly declined the unsound flat-const coefficient proof. Native evidence consequently records unknown_bounds materialization for the byte-or-undefined boundary.
  2. PR perf(codegen): inline array store/push lanes for module-global receivers; drop the packed loop's per-store guard call #9041 removes the per-store guard/side-exit for statically genuine packed-f64 store values. The old proof still requires the deleted packed_f64_loop_store.fast/fallback pair.
  3. PR perf(codegen): packed-clone endgame — receiver caching, poll striding, integer count accumulators, check-free genuine stores #9111 caches the packed receiver handle, adding one intentional ptrtoint in the aggregate fast-clone region.
  4. PR perf(codegen): packed-loop read admissions — if-conditions, clone accumulator proofs, hazard relaxation #9084 admits locally built read loops behind the runtime packed-f64 entry guard. frozenLoop, sealedLoop, and nonExtensibleLoop are safe read-only admissions; the old negative proof rejects any guard anywhere in the fixture. The genuinely unsupported holey/sparse/accessor/non-number/any/unknown-index/alias-mutating functions still emit no packed-f64 guard.

Required fix

  • merge current main so codegen: byte-array reads reach the numeric proofs (bench_int_arithmetic 475 → 395 ms) #9146 is present;
  • allow only js_number_coerce in the image blur and unknown_bounds native materialization while retaining all byte-load/store and bounds/alias evidence checks;
  • replace the obsolete packed store side-exit assertion with a check-free raw-f64 fast-store assertion;
  • permit the single receiver-cache ptrtoint;
  • scope the negative guard exclusion to the genuinely unsupported functions and positively require guards for the three safe read-only functions.

Acceptance

  • the three workloads above pass individually on the dedicated Linux server;
  • the complete native-region-proof suite passes;
  • harness unit tests pass;
  • Full CI compiler-output-regression passes before release publication.

Activity

  1. proggeramlug commented on Aug 31, 2026

    @proggeramlug
    ContributorAuthor

    Stale — closing.

    Verified green on release candidate 01463b81610f089cc566011d16ea5e5b08ec70a8 (run 33346563641): all 8 cargo-test-perry shards pass and compiler-output-regression passes. No fix for this issue appears in main's history, so it was resolved incidentally by other merges rather than by a targeted change.

    The subject was confirmed live, not skipped — e.g. #9117's any_typed_real_arrays_keep_array_mutator_semantics appears 3× in shard 2's log (shard assignment moves between runs) and that shard passed.

    Reopen if it resurfaces on a later candidate.

  2. proggeramlug commented on Aug 31, 2026

    @proggeramlug
    ContributorAuthor

    Reopening — closed prematurely, same faulty inference as #9117 and #9121.

    Failing again on release candidate 83754818ea (full-tier run 33372993990, compiler-output-regression, step "Gate native-region proof compiler output"), on the exact three workloads this issue names:

    "failed_workloads": [
      "image_convolution",
      "packed_f64_loop_versioning",
      "packed_f64_loop_versioning_negative"
    ]

    Why the closure was wrong

    I closed this because compiler-output-regression was green on the previous candidate 01463b8161 and inferred the issue had been fixed incidentally.

    That inference does not hold. This issue's own text explains the mechanism: the proof contracts lag merged optimizer changes (#9146, #9041, #9111, #9084), so whether they match depends on which optimizer work is present in the tree. A green run on one candidate means the contracts happened to line up there, not that they were reconciled.

    For a contract-vs-implementation mismatch, one green run is not evidence of a fix. The required work in the original report — reconciling the proofs with the current lowering — was never done.

    Impact

    compiler-output-regression is in full-suite-gate's needs, so this blocks the v0.5.1519 release alongside #9117 and #9121.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions