Skip to content

#1758 R1.6d: rule-7 staging for nonfinite buffer reader callers outside d #1919

Closed

Description

@InauguralPhysicist

R1.6d's rule 7 requires deciding every buffer_read_num caller before migration, and stopping a cross-round site if the replacement changes behavior that no d table/MAP row pre-registers.

The final buffer_read_f64 reader refuses stored infinity (and lenient NaN), while the bridge normalizes infinity to +/-1e308 and lenient NaN to zero. Raw nonfinite buffer payloads are reachable today through buffer SGD, before R2.2. On the exact 4e77a9d release baseline, both strict modes run this with rc=0:

p is buf_from_list of ([1e308])
g is buf_from_list of ([1e308])
sgd_update of [p, g, 1e308]
print of p[0]
print of (p == p)

stdout is -1e+308, then true. The current d buf_get migration refuses that payload with value, confirming that it is not safe to treat the data-reader rename as behavior-preserving outside d.

Unresolved sites: vm.c's 8 indexing/iteration/leaf calls; eigenscript.c's 2 buffer-equality calls; eigs_embed.c's getter; ext_gfx.c's audio_convert_samples call. Byte consumers ext_net.c/net_send and eigenscript.h/buffer_read_byte additionally belong to frozen f/e rows, respectively. The wrapper reaches both gfx_fb and ppu_render_frame.

The implementation is stopped on those sites and the bridge definition is unchanged. Independent d tensor/buffer/model work can proceed. No frozen expectation was changed.

Done when:

  • An orchestrator ruling assigns the out-of-d data-reader calls to a round.
  • That round has pre-registered witnesses for stored infinity and lenient NaN for indexing, iteration, equality, embed access, and affected audio consumers.
  • VM speculative/leaf paths preserve generic error context and agree across execution tiers.
  • e/f byte consumers retain their frozen .pre until their declared round, or receive an explicit ruled staging amendment.
  • The assigned commit migrates all its listed callers and reports its before/after counts.

Activity

  1. github-actions commented on Oct 22, 2026

    @github-actions

    Thanks for filing. Labelled needs-triage because it has no area: label yet. The scheme is area:<subsystem> (runtime-vm, jit, concurrency, observer, memory, trace-tape, packages, http, gfx, embed, docs, ci, gates, lint-tooling, consumer, aot, stdlib) plus a kind (kind:*, or the stock bug/enhancement) — add the ones that fit if you know them, and a maintainer will confirm and drop needs-triage. See CONTRIBUTING.md, "Reporting Bugs".

  2. added
    kind:decisionNeeds a decision recorded, not (only) code
    and removed
    needs-triageFiled without an area: label; triage and label it
    on Oct 23, 2026
  3. InauguralPhysicist commented on Oct 23, 2026

    @InauguralPhysicist
    CollaboratorAuthor

    Status: ruled by R1.6d-D1 (#1758 comment 6350698634), which deferred each site to the round that owns it:

    This stays open until R1.6z lands.

  4. InauguralPhysicist commented on Oct 25, 2026

    @InauguralPhysicist
    CollaboratorAuthor

    Done by R1.6z, landed on phase2-numbers as db349464 (#1776 comment 6392374654; full lane GREEN 26/26). Each box:

    • The ruling: R1.6d-D1 assigned the out-of-d reads: vm.c's 8 to R1.6z, the gfx and net consumers to R1.6e/f.
    • The witnesses: stored infinity and lenient NaN were pre-registered BEFORE migrating, for indexing, iteration, local-index and the JIT leaf (the N13.vm-buffer-*-data rows), for equality (N11.buffer-equal-ieee) and for embed access (gate.N11.embed-buffer-get-raw). The audio consumers were done in R1.6e.
    • The VM tiers: every pre-registered row agrees on kind, message and line across off, default, OSR and trace (the blind critic independently checked 90 of 90).
    • The e/f byte consumers kept their frozen .pre until R1.6e/f.
    • The migration retired every listed caller, with before and after counts in the round's report.
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

    area:runtime-vmSubsystem: runtime-vmkind:decisionNeeds a decision recorded, not (only) code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions