# Modules permitted to carry raw-handle debt, with their current ceiling. # # THE POINT OF THIS FILE IS THAT IT IS NOT A TOTAL. A single global number lets # debt move between modules unnoticed, and lets a brand-new file start dirty as # long as something else got cleaner. The rules here are per-module and all # three directions are closed: # # 1. A file NOT listed here must have ZERO bare reads. New code is therefore # clean by construction. `RuntimeHandle::across_{mut,const,nanbox}` pairs # an allocating call with its post-call reload; `with_{mut,const}_ptr` # scopes an argument passed to a non-allocating operation or a runtime # entry point that establishes its own root before allocation. Those are # the only ways in, which is what "non-optional" means for #7341's # discipline (engine plan layer 3). # 2. A listed file must not EXCEED its ceiling. # 3. A listed file that reaches ZERO must be DELETED from this list. An entry # that matches nothing FAILS the build -- the same rule as # gc_root_dominance_allowlist.json -- so the list can only shrink and # cleaning a module is permanent. # # Lower a ceiling whenever you convert a pair; never raise one. If a change # genuinely needs a new bare read in an unlisted file, the honest move is to # convert a pair elsewhere and say so in the PR, not to add a line here. # # RELOCATIONS (#10583). Rules 2 and 3 are per-path, and the 2000-line cap # regularly forces a listed module to be SPLIT. Moving debt-carrying code out # deletes the source's line (rule 3) and adds the destination's -- which # `--no-raise-vs` would otherwise reject as "was not listed at the merge base" # even though the total never moved. Declare it on the destination's own line: # # 4 crates/…/native_module/vtable_access.rs # moved-from: crates/…/native_module.rs # # The destination is then credited with what the source ACTUALLY surrendered # between the merge base and head, and nothing more: a relocation cannot launder # new sites, two destinations splitting one source share one credit, and once # the move has landed the annotation is inert documentation. It is the ONLY # comment an entry may carry -- a malformed one is a build failure, not a # silently-ignored comment. # # ONE shape may join the list instead of converting: a LOOP whose collection # window is a user-visible trap/getter call (Proxy traps, accessors, valueOf) # re-reads every live handle at the top of each iteration. That re-read IS the # #7341 discipline -- `across_*` pairs exactly one allocating call with one # re-read and cannot express "re-read across two interleaved trap calls, every # iteration". Listing such a module is legitimate ONLY when the same change # converts enough pairs elsewhere that the global baseline does not rise; name # the loop and the trap in the PR. Current instances of this shape: # - object/field_get_set/enumeration.rs -- proxy values/entries interleave # (ownKeys, then per-key gOPD + get; #7467). # - json/stringify_shape_template.rs -- the shape-template emit loop's # collection window is `toJSON`, a user-visible trap, and `cur_obj()` / # `cur_keys()` re-derive at every access across it (#7268). `across_*` # pairs one call with one re-read and cannot express a helper called at # many points inside the loop. # - gc/tests/runtime_roots/json_shape_template.rs -- its assertions ARE # pre/post address comparisons, which is what `across_*` exists to make # unnameable; converting them would delete the test's subject. # - gc/tests/runtime_roots/fs_options_object.rs -- same: its subject IS the # sentinel's pre/post address comparison (#7274). # # 595 of 705 runtime modules were already clean when this was seeded, so the # rule above covers 84% of the crate on day one. # # Format: 4 crates/perry-runtime/src/array/flat_clone.rs 5 crates/perry-runtime/src/array/header.rs 7 crates/perry-runtime/src/array/indexing.rs 2 crates/perry-runtime/src/array/iter_methods.rs 31 crates/perry-runtime/src/array/iterator.rs 12 crates/perry-runtime/src/array/push_pop.rs 12 crates/perry-runtime/src/array/sort.rs 12 crates/perry-runtime/src/async_hooks.rs 5 crates/perry-runtime/src/atomics.rs 7 crates/perry-runtime/src/builtins/console.rs 12 crates/perry-runtime/src/builtins/globals.rs 3 crates/perry-runtime/src/child_process/v8_serde.rs 5 crates/perry-runtime/src/dns.rs 6 crates/perry-runtime/src/embedded.rs 7 crates/perry-runtime/src/error.rs 16 crates/perry-runtime/src/event_target.rs 3 crates/perry-runtime/src/frame.rs 3 crates/perry-runtime/src/fs/dir_glob_watch/watch.rs 3 crates/perry-runtime/src/gc/tests/copying.rs 1 crates/perry-runtime/src/gc/tests/dead_owner_side_tables.rs 4 crates/perry-runtime/src/gc/tests/helper_stores.rs 47 crates/perry-runtime/src/gc/tests/runtime_roots/callback_scanners.rs 4 crates/perry-runtime/src/gc/tests/runtime_roots/fs_options_object.rs 3 crates/perry-runtime/src/gc/tests/runtime_roots/hook_dispatch_handles.rs 10 crates/perry-runtime/src/gc/tests/runtime_roots/transient_handles.rs 11 crates/perry-runtime/src/json/replacer.rs 26 crates/perry-runtime/src/json/reviver.rs 1 crates/perry-runtime/src/json/stringify_scalars.rs 2 crates/perry-runtime/src/json/stringify_shape_template.rs 21 crates/perry-runtime/src/json_tape.rs 26 crates/perry-runtime/src/map.rs 7 crates/perry-runtime/src/node_stream/async_iterator.rs 2 crates/perry-runtime/src/node_stream_dispatch.rs 8 crates/perry-runtime/src/node_stream_iter_helpers.rs 27 crates/perry-runtime/src/node_stream_pipeline.rs 7 crates/perry-runtime/src/node_stream_tests.rs 10 crates/perry-runtime/src/node_stream_tests_extra.rs 4 crates/perry-runtime/src/node_submodules/mod.rs 4 crates/perry-runtime/src/node_submodules/test.rs 33 crates/perry-runtime/src/object/alloc.rs 2 crates/perry-runtime/src/object/array_object_ops.rs 2 crates/perry-runtime/src/object/bigint_dispatch.rs 3 crates/perry-runtime/src/object/class_registry/construct.rs 2 crates/perry-runtime/src/object/delete_rest.rs 12 crates/perry-runtime/src/object/descriptors.rs 5 crates/perry-runtime/src/object/field_get_set/enumeration.rs 2 crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs 8 crates/perry-runtime/src/object/field_set_by_name/fast_paths.rs 11 crates/perry-runtime/src/object/field_set_by_name/tail.rs 9 crates/perry-runtime/src/object/global_this/populate.rs 5 crates/perry-runtime/src/object/global_this_webassembly.rs 2 crates/perry-runtime/src/object/meta_accessors.rs 1 crates/perry-runtime/src/object/mod.rs 3 crates/perry-runtime/src/object/namespace_create.rs 1 crates/perry-runtime/src/object/native_call_method/object_proto.rs 4 crates/perry-runtime/src/object/native_call_method/primitive_methods.rs 7 crates/perry-runtime/src/object/native_call_method/string_methods.rs 4 crates/perry-runtime/src/object/native_module.rs 19 crates/perry-runtime/src/object/native_module/async_hooks_exports.rs 26 crates/perry-runtime/src/object/native_module/callable_exports.rs 6 crates/perry-runtime/src/object/object_literal_ops.rs 2 crates/perry-runtime/src/object/object_ops/define_property.rs 2 crates/perry-runtime/src/object/object_ops/descriptor_helpers.rs 4 crates/perry-runtime/src/object/object_ops/from_entries.rs 5 crates/perry-runtime/src/object/object_ops/keys_array.rs 6 crates/perry-runtime/src/object/polymorphic_index.rs 3 crates/perry-runtime/src/object/reflect_support.rs 2 crates/perry-runtime/src/object/spill.rs 2 crates/perry-runtime/src/object/typed_array_define.rs 3 crates/perry-runtime/src/os.rs 14 crates/perry-runtime/src/os_network.rs 13 crates/perry-runtime/src/plugin.rs 12 crates/perry-runtime/src/process/env_misc.rs 9 crates/perry-runtime/src/promise/microtasks.rs 1 crates/perry-runtime/src/promise/native_async.rs 3 crates/perry-runtime/src/promise/rejection.rs 3 crates/perry-runtime/src/promise/then.rs 8 crates/perry-runtime/src/proxy.rs 6 crates/perry-runtime/src/proxy/put_value.rs 11 crates/perry-runtime/src/regex/match_all.rs 3 crates/perry-runtime/src/regex/replace_fn.rs 41 crates/perry-runtime/src/set.rs 2 crates/perry-runtime/src/string/append.rs 7 crates/perry-runtime/src/string/concat.rs 1 crates/perry-runtime/src/string/mod.rs 7 crates/perry-runtime/src/string/split.rs 2 crates/perry-runtime/src/symbol/iterator.rs 27 crates/perry-runtime/src/thread.rs 2 crates/perry-runtime/src/timer.rs 1 crates/perry-runtime/src/typed_feedback.rs 1 crates/perry-runtime/src/typedarray/construct.rs 2 crates/perry-runtime/src/typedarray/transform.rs 4 crates/perry-runtime/src/url/node_compat.rs 7 crates/perry-runtime/src/url/search_params.rs 12 crates/perry-runtime/src/util_debuglog.rs 19 crates/perry-runtime/src/util_parse_args.rs 45 crates/perry-runtime/src/util_promisify.rs 10 crates/perry-runtime/src/v8.rs 3 crates/perry-runtime/src/value/dyn_index.rs 6 crates/perry-runtime/src/value/dynamic_arith.rs 1 crates/perry-runtime/src/value/to_string.rs 19 crates/perry-runtime/src/wasi.rs 4 crates/perry-runtime/src/weakref.rs 19 crates/perry-runtime/src/webassembly.rs