Finally land the before-hardening campaign - #10
Merged
Conversation
Constructed mutant (applied and reverted in-audit): Bits::ptr_eq with the pointer comparison dropped, leaving lengths only — clone identity forged by any equal-length pair. Seven suites caught it within a second (causally strict-span endpoints, codec injectivity/freeze parity, the ptr_eq clone-source pin, party pair laws, clock solo laws, organic populations). These are the shrunk inputs proptest deposited under the mutant; committed so the wrong-rung shape fails deterministically.
Shrunk by the OwnVersion matrix proptest while it caught a constructed mutation-adequacy mutant (masked walk's b-owned-alone interval folded without sign reversal). The seed rides along so that catch replays deterministically; the suite is green on the clean tree.
…annot supply itself The exhaustive small-scope suite is universally quantified over its enumerated corpus, so a silent enumeration shrink leaves every check green on a smaller universe; the module's own non-triviality floor (len > 20) admits shrinks past half the corpus, and the only committed red anywhere in the tree was grow's EXHAUSTIVE_GROW_PAIRS coverage pin (114621 -> 58037 under a constructed diagonal-drop mutant), whose failure message instructs re-derivation from the enumerated scope -- the circular re-pin. corpus_counts_are_exact pins the id corpus to the in-test-derived closed form 2^(2^d) (the region-subset bijection) and the event corpus to its committed size plus denotation distinctness by an independent path-sum evaluation. Demonstrated red under the mutant, green on the clean tree.
… pin The two grow-branch coverage pins' failure messages instructed re-deriving the constant from the enumerated scope / deterministic pools -- the corpus's own output. With corpus_counts_are_exact holding the enumeration total by counts the enumerator cannot supply itself, the messages now require that pin green before any re-derivation, so a corpus shrink can no longer be blessed by re-pinning downstream.
…t corners Round #141 value-correctness audit (r141-suanpan track). Mutation-adequacy attack on the committed suite found exactly two surviving mutants, both in the sign fold's decision rule; each gets a constructed witness through the public API: - SIGN_DECIDED 3 -> 2 passed suanpan's whole suite (41/41) including the 1.9M-state exhaustive ledger sweep; before's laws/codec proptests caught it only by random search. sign_threshold_survives_extreme_cancellation pins the corner deterministically: digits [-(2^33-1), -(2^33-1), 2] denote -(2^32-1), and a threshold of 2 reads them positive. - floor.saturating_add(2) -> saturating_add(1) in sign_dominates_at passed the ENTIRE committed workspace suite (suanpan 41/41, before 604/604). domination_decision_index_is_tight_at_floor_plus_two pins it: digits [-(2^33-1), -(2^33-1), 3] hold 2^64 - 2^32 + 1, which u64::MAX (covered by floor = 1) overturns, so a decision at index floor + 1 is unsound. - decided_domination_covers_extreme_accumulator_operands witnesses the contract clause before's query sweeps lean on (sign_dominates_at over another accumulator's digit_count - 1 before sub_accum): the operand spelled at the lazy-zone edge exceeds any magnitude the differential proptests can draw by ~2x, and the certificate still holds at its tightest decided value (partial exactly 3 at index floor + 2). - flush_right_carry_tie_converts_exactly pins the recenter tie whose remainder is exactly zero and whose read-out complement carry crosses a zero low digit. The before proptest seeds are the shrunk catchers minted while the SIGN_DECIDED mutant was under test; the real code passes them, and they make the laws/codec catch of that genre deterministic instead of sampling-dependent. Every mutation was applied and restored as a reversible string swap; git diff verified empty against 2a701f8 before this commit. Adequacy re-demonstrated on this branch (base 2e0cf5a, which adds only bench instruments), each mutant a reversible string swap restored to an empty git diff, suite 45/45 green after every restore: - floor+2 -> floor+1: exactly domination_decision_index_is_tight_at_floor_plus_two fails (44/45 pass; the rest of the suite is still blind to it). - SIGN_DECIDED 3 -> 2: exactly sign_threshold_survives_extreme_cancellation fails (44/45 pass). - floor+2 -> floor+3 (the conservative drift): decided_domination_covers_extreme_accumulator_operands fails at its decision-edge assert, alongside domination_floor_near_usize_max_never_decides. - complement_carry -> 0 in the read-out's ripple loop: flush_right_carry_tie_converts_exactly fails.
…nsumer suites Round #141, suanpan-2-SP-2 remediation, second leg. The independent verification leg ran before's suite under the SIGN_DECIDED 3 -> 2 mutant and shrank every failure it drew; these are those seeds, spread across nine consumer suites (causally, codec, meter/tier2, serde_impls, algebraic laws, skyline emit/query/sweep, version). All pass on the shipped code (732/732 with them committed); under the mutant they turn the consumer-side catch deterministic (seed replay, not sampling) - re-demonstrated here: with the mutant applied, the codec bit-flip suite fails in 0.07s at PROPTEST_CASES=1, where pre-seed the same setting produced zero catches. The primary instrument for this corner remains suanpan's own sign_threshold_survives_extreme_cancellation; these seeds are the consumer-level backstop, committed per the always-commit-seeds rule.
The identity ladder's empty rungs (v OR 0, 0 OR v adopt-wholesale, 0 AND v, v AND 0, and the span forms, refs and view doors both) were deletable with the entire 732-test suite green: the general emission walk produces byte-identical values, so every value law stays green, and the identity_fast_paths pins drove only the clone-identity and byte-equal rungs. Measured under the deletion mutant: the adopt rung's join reads 120 scanned bits (the full operand walk) where the rung reads 0. This pin makes the whole empty-rung genre red under deletion, with a concurrent-pair walking control proving meter liveness.
…es included The operator matrix routes exclusively through the in-place cores, so the borrowed-pair cores' empty rungs (join_refs/meet_refs) are reachable only through two-element folds; four fold-door cells join the matrix, plus the two in-place arms (v |= 0, 0 &= v) the original cells missed. Demonstrated: killing only the refs rungs reads red at join_fold_noop; killing all ten rungs reads red at the first cell; restored tree green.
…tial for the over-full-slot hand-back arm The 6-input family [a, b, alias(a), c, d, e] retains alias-c on the stack at weight 1 and coalesces d-e into it; misrouting the retained group to the rejection channel diverges on hand-back contents and the final accumulator. The 4-input family the finding proposed is mutant-equivalent: the closing drain rejects the retained group anyway. Mutation-verified two ways (fails under the misroute, passes shipped).
… its arm The party-side deterministic witness for the over-full-slot hand-back arm gains its clock twin (per-caller differential discipline: the clock fold carries versions through the same retention decision). Both read red under the misrouted hand-back (rejected.push in place of the weight-retaining stack.push) and green restored; the party witness's doc now states why the narrower arity-4 shape cannot witness the arm.
…place/dominance_of clone rungs live Constructed in round #141 (mutfast track): Bits::ptr_eq -> always false passes the ENTIRE meter binary (157 tests incl. identity_fast_paths) — the canonical_eq ptr rung is shadowed by the unmetered memcmp rung, the comparison sweep dispatches on slice_ptr_eq, and the two causally.rs coincident rungs had no pin at all. These two tests pin the coincident rungs by scan parity with their collapsed forms (equality, since the fused walk's dominance early-exit can legitimately read fewer bits), beside distinct-buffer walking legs; both read red under the mutant (place 61-bit walk vs 66-bit collapse; dominance 61 vs 66).
…ard is test-surface only Every compiled stacker call site is cfg(test) (recurse::grow behind the test-only descend!), so the production dependency bought nothing for downstream graphs: rumors consumers, the fuzz workspace, and the wasm32 guest all built stacker+psm for code that never compiles for them. The depth-100k deep_tree_stack_safety proof passes with the dev-dep placement (the self-dev-dependency idiom supplies it to the cfg(test) lib build). recurse.rs's exception inventory now names all three test-surface descend! users (oracle bridge, grow reference probe, segment-liveness dive) and carries the dated keep decision; the crate AGENTS.md hard rule and no-unsafe clause are re-derived to match.
…sm the code lost deep_tree_stack_safety's comments named a deleted equality shortcut and a recursive combine walk; they now narrate what runs — canonical_eq's byte compare at the top of join/meet, distinct non-empty operands reaching the skyline sweep at full length. fuzzfit's MAX_WASM_STACK derivation claimed guest traversals recurse on tree depth; the constant is slack over an input-independent stack, and its comment now says so. byte_view's doc drops the call-site tally (its callers, not 'the two'). error::Overlap's rustdoc attributes it to its sole producer, Clock::sync — Party::join and Clock::join hand back the operand and cannot return it.
… toolchain floor re-measured The 2026-07-31 amendment records the landings (Span wire review merged, the causally-kernel round's span half, the step! retirement with the stacker remainder resolved this round, the variadic law suites, the Bytes round with its review closed); §14/§17.2 re-derive to the survivors and every item cross-reference follows the renumbering. The root AGENTS.md toolchain floor moves from the rotted 1.85 claim to the measured 1.92 (workspace source floor; locked dependencies move the working floor with Cargo.lock).
benchjudge validates denominator growth before the judgment floor (a shrinking sidecar pair on a sub-floor cell was a silent SKIP where the same pair on a judged cell was exit 2), and the SKIP row renders raw nanoseconds so a just-sub-floor median can no longer print as equal to the floor it is below; both pinned in --self-test, each pin verified to convict its mutant. doclint and testdoc hard-error (exit 2) on a nonexistent root: a renamed directory must fail the gate, never silently vacate its coverage.
…rror drives the op it names surfacecheck's exception-date check reads YYYY-MM-DD positions and ranges instead of counting dashes (the '20-26-07xx' witness now reads red, pinned in tests), and walk_use asserts a use target absent from the index appears in the paths table — malformed rustdoc JSON must never read as a smaller surface. fuzzfit's fit() doc states the actual floor guard (two above-floor samples, else the full set), and the VersionTick mirror arm calls Version::tick directly instead of the delegating Party::tick twin.
…ndent backend errors, and the queued-SupplyClosed recovery arm Two committed witnesses for the unified supply-failure terminal (proxy/work.rs execute + streams.rs): - deposited_supply_failure_masks_an_independent_backend_error: pins the DEFECT mechanism — a typed backend failure racing a dead stream supply is replaced by direction-granularity SupplyClosed, falsifying proxy/error.rs's claim that errors the supply did not cause surface from the failing operation itself. Owner picks: exempt backend-typed errors at the terminal match, or weaken the Error rustdoc. - queued_supply_closed_outranks_a_selected_consequence_at_stream_granularity: deterministic reach for the terminal's queued-report drain arm (previously unwitnessed): stream-granularity origin wins over the deposit's direction granularity, deposit attached as cause.
… framing, boundary-arity fan folds Adopted from the round-141 interaction audit (r141-interact 98d724b9 + 4bd559e2), relocated into the suites that own each seam: - codec::tests::version_and_clock_doors_reject_intra_byte_padding_functionally: the Version/Clock byte doors reject a set bit inside the final byte's padding as a functional Err (the only release-profile witness at the Clock door, where the party leg's length arm is vacuous). Red under a length-only require_zero_padding substitution at clock.rs. - borsh_impls::tests::coincident_span_keeps_borsh_container_framing: the Equal admission arm holds container framing exactly; red under an EOF-tolerant one-byte over-read in the arm (which every lone-value test survives). Plus the padding-genre sibling coincident_span_borsh_rejects_tampered_join_padding. - version::tests::boundary_arity_fan_folds_match_the_sequential_fold: counter-boundary arities (k=4 level fill, k=6 straddle) over fan-shaped concurrent operands salted with an adjacent clone run and an empty version equal the sequential fold on all three fold doors; red under a collapse-everything dedup mutant. - two committed fill-walk flag-site seeds (5bf15dbe from the audit track, 7ef9d658 its verifier mirror): the changed-flag differentials catch both flag polarities on seed replay alone (verified at PROPTEST_CASES=1 under the under-eager mutant). The audit's degenerate-span rung-vs-walk unit test was deliberately not adopted: the committed coincident_span_rungs_agree_across_buffer_identity proptest already samples that space (the finding was refuted).
…s the Error contract A typed backend error (Encode/Decode Backend) is the local store's own failure — the dead supply cannot have caused it — yet the terminal's outranking replaced it with a direction-granularity SupplyClosed, falsifying proxy::Error's promise that errors the supply did not cause surface from the failing operation itself. The terminal now matches backend-typed errors ahead of the supply-outranking arms; the adopted masking witness flips into the attribution pin (verified red with the exemption removed), and take_supply_failure's symptom inference is true as stated.
…nterval walks deep_tree_stack_safety drives the clock ops at 100k; nothing drove rank/distance/lag/Ranked, the Rank wire round-trip, span hulls, Span decode/place/dominance, Range bounded classification, or projection at any depth past 300. All are iterative walks; this pins that fact against regression the way the clock-op proof does.
…n is the load-immune one The catch-up leg carried the suite's only absolute wall-time ceiling (5s over a quantity that is almost entirely serialized dev-profile compute), so any loaded gate run could flake it — a threshold over a noisy quantity relocates the flakiness to the threshold. Promptness is a property of the session shape, already pinned load-immune as exact virtual hops by the ladder-bound siblings; the real-clock test now asserts only floors (the catch-up's irreducible round trip, the serialized session's wave time), which machine load can inflate but never falsify.
…d dependency's name goes The invariants were already stated positively; the discovering-incident sentences cited a dependency absent from the entire graph. Provenance lives in git history; the prose keeps what is load-bearing (the symptom genre the total sweep catches, its 2-of-25 sweep positions).
…e shared-buffer form r141 findings mutmeter-1-MM-1 and mutmeter-4-MM-4: no gate leg consumed the board's live verdicts (a 172-red board exited 0 under the audit's MUTANT-OC16), and a board built without the counter features silently rendered limb/scan/touch unjudged while still printing verdict colors. - examples/amp_board.rs: at the scales of record (default and acceptance), a red count disagreeing with BOARD_EXPECTED_REDS exits nonzero, so the amp-board-shard-pin gate leg (which runs both record scales) now consumes verdicts with zero added gate time. Demonstrated: under MUTANT-OC16 (cursor.rs read_bit tap 1->16) the scale-1 run reads 61 red and exits 1; restored, honest run reads 0 red and exits 0. - Cargo.toml: amp_board gains required-features = [limb-meter, scan-meter]; the unfeatured invocation (which hid 89 of 111 red verdicts in the audit's measurement) is now cargo's own loud error. Landing the verdict consumption surfaced 42 untriaged reds the verdict-blind gate had blessed since the 2026-07-30 Bytes-backed at-rest form (92ed220) and its Phase B adoptions (20bd3c1) — floor premises those commits obsoleted, readings honest: - clock_fork x 25 families: the heap floor still priced the forked child's version hand-over as a byte copy; it is a refcount bump on the shared stored buffer. Floor trued to NA with the dated declaration (floors.rs NA_HEAP_FORK_SHARES); heap_fork_child dissolves. - clock_own_version_to_version x 17 families: the scan floor demanded a stream walk the seed fast path (to_version's whole-interval arm, an O(1) buffer-sharing clone) legitimately never performs. Scan floor trued to NA for seed clocks (NA_SCAN_SEED_PROJECTION); any other party still carries the full-examination floor. - version_span_all x benign (acceptance scale): heap exponent 1.28 read from a probe pair straddling the flat allowance — the flat term the constant leg forgives deflates the sub-allowance base and manufactures the exponent (every non-straddling span_all family reads <= 1.0 at up to 4x the arity). The judge now fits the heap exponent only where both probes clear the allowance; the straddling pin in board/tests.rs reads red under the old max rule (mutation-verified, restored, diff clean). Board movement, parent-measured: my diff cannot move a reading (the render pipeline is untouched; exit-code consumption and floor/judge declarations only). Scale-1: 1804/42 -> 1846/0; acceptance: 1845/1 -> 1846/0; the only verdict flips are the 43 cures above, every other render diff is an exponent leg honestly unjudged (-.--) with its reading byte-identical, a floor column rendering '-', or legend text. amp-board-determinism, amp-board-shard-pin, worst-cases-pin all green.
… a different peer decode(&encode(a)) zeroed scope_id, so a link-local advertised name passed Endpoint::new's length-only validation and lost its scope in the LINK header — the peer's reverse dial then targeted an undialable unscoped address with nothing pointing at the cause. encode now panics on a nonzero scope_id (a configuration bug caught at endpoint construction, the router's one encode site); flowinfo labels a flow, not a peer, so it stays uncarried and documented. The Addr contract states the general rule: refuse a name the encoding cannot carry faithfully, never alter the dialed peer. Both behaviors pinned.
… bump r141 finding totality-2-TOT-2: the Bytes-backed at-rest form made every version/party clone a refcount bump, and complexity_claims.rs, worst.rs recorded the new truth (dated 2026-07-30) — but the two reviewed exemption tables kept the byte-copy mechanism story at 13 sites, every one contradicting the dated comments on the corresponding claims: - crates/before/src/meter/board/coverage.rs: Party::dangerously_alias (:75, the site the audit's roster missed), Clock::forks (:105), Clock::dangerously_alias (:132), Ranked::into_owned (:143), Span::into_parts/into_owned (:220/:229), From<Clock> (:244). - crates/before-fuelscape/src/ops.rs: Ranked::into_owned (:923), Clock::forks (:944), From<Clock> (:981), Party/Clock:: dangerously_alias (:1059/:1063), Span::into_parts/into_owned (:1162/:1172). Per-site re-denomination toward the code, not a blanket substitution: Ranked::encode's 'one version byte copy' (ops.rs:1001) stays — encode genuinely copies the bytes into its output.
…ow the root fan arb_divergent_pair's keys are content-addressed, so its universe is a fixed set of blake3 outputs that scatter at the root: the join walk's divergent (Some,Some) arm below the root was deterministically unreachable for the biconditional pins (measured zero entries at depth >= 1 over 10,240 samples). Wider random budgets cannot cure that — only chosen paths can share a prefix — so the new arb_deep_divergent_pair draws the divergence depth and both novelty widths (zero included, so subset, identical, and ceiling-only merges sample the false arm at depth), and a deterministic companion pins the three deciding shapes on the 31-byte-prefix fixtures: gain both directions, deletion honoring at depth, and the full-depth subset merge that must read unchanged.
deep_tree_query_and_causal_stack_safety covers the query folds; the event tree's text render/parse walk and min_ticks had nothing driving them past proptest depths. Re-derived from the predecessor track's interrupted draft against today's tree.
…e, range_bounded The arity-3 fused placement walk (one probe against the pair hull's two bounds) had no committed pass/fail resource instrument: the board's span rows price the wire form and causally_contains only the single-bound degenerate path, and the meter suite's placement pins run on one organic fixture. Three rows now drive the walk through every version-pair-bearing family at both scales, probed by a buffer-distinct re-decode so the coincidence rung cannot collapse the walk; the range_bounded row prices the composite a consumer reaches from owned endpoints (known_at's validating comparison rides along, stated at the row). Every new cell judges GREEN at both scales (no amplification finding: per-byte flat on every family, matching the audit's constructed- adversary readings). Rankings pinned from the live release fold at both scales with a movement annotation; every pre-existing entry verified unmoved (worst-cases-check clean, 166 rows x 2 scales). The registry's declared bundle reach moves +3 on every version-pair family (the board smoke pin re-stated); the placement claims now cite their own rows instead of the degenerate-path row.
…lip amortization Three adversarial-family witnesses adopted from the round-141 whitebox audit (r141-whitebox 3da8a989), each asserting a bound on a population no committed instrument drives: - tests/answer_embedded.rs: min_ticks/rank on wide-base tiny-tail (mixed second difference over a 2x2 (n,w) grid bounded at a tenth of the top cell: no n x w product; the wide answer is paid once, never per leaf) and on the wide ladder (per-packed-byte flat: near-equal wide minima discriminated within the bits that spelled them). - tests/fold_skeleton.rs: span_all per-byte flat when a shared deep skeleton doubles at fixed arity (the committed fold populations are all small-operand; this is the O(D log k) model's D leg). - suanpan/tests/amortized_sequences.rs: the sign fold's amortized O(1) under wide sign-flip oscillation (every committed band holds one polarity; the dual carry-boundary parking attack is already the accum_comb_touches_flat band, so only the sign-flip leg lands). Not adopted from the audit branch: the placement flatness sweeps (the board's placement rows now judge the same shapes with envelope discipline), and the print-only isolation probes (no asserts: their attribution findings are discharged in the audit record).
…weep Create version/skyline/overlay.rs and move into it, from sweep.rs, the walk machinery every multi-stream merge shares: PlateauCursor, Crossed, advance (the binary overlay-advance law, functionally identical and still infallible), LeafCursor, Step, Side, fold, advance_diff, and OpenedPair; and from query.rs, IdLeafCursor (cursor vocabulary consumed by masked.rs and query's project, not query logic). sweep.rs keeps the comparison layer: Directions, order_exit, eq_exit, the private sweep loop, and the entry points causal_cmp/eq/le/concurrent at their unchanged pub paths. Doc split, riding the move: the minted plateau/tiling vocabulary, the boundary-bookkeeping essay (the law's correctness argument, its three dyadic-interval facts intact, re-denominated for the generic home), and the cursor-cost argument move to overlay.rs's module doc; sweep.rs's module doc keeps the comparison semantics (elementary intervals, the one running difference, the Directions fold), Early exit, the comparison-specific Cost (skyline_cmp_* rows, flatness, zero grown segments) now citing overlay for the walk's argument, and Testing. The former opening client inventory is trimmed away: each client module names what it consumes. Every consumer re-points to the one new path (no re-exports): masked.rs, place.rs, place/filter.rs, admit.rs, emit.rs, query.rs, party/ops/diff.rs, emit/tests.rs, query/tests.rs; intra-doc links to the moved items re-aim at overlay across masked, place, filter, admit, emit, query, and diff. Renames in the two rewritten files only: advance's fa/fb -> flip_a/flip_b and ca/cb -> crossing_a/crossing_b; sweep.rs's dirs -> directions; LeafCursor::descend's k -> internal_nodes. Assertion pass: the tie-level debug_asserts, the canonical-input expects, and the final-leaf unreachables are contract and invariant checks and stay unchanged. Behavior is byte-identical: no meter constant moves, worst-cases-pin reads clean (168 pinned rows at 2 scales), and the full gate matches the known-red baseline exactly (docs/docs-internal/doctest/ fuelscape-test/surface-totality red for the pre-existing out-of-scope causes; test-all fails only the same 4 pre-existing rank-Display and surface-roster tests).
Wave 2 of the legibility restructure (plan D4), zero behavior change: every output is byte-identical (oracle differentials and the exhaustive small scope green), every committed meter constant reads identical (worst-cases-pin: clean, 168 pinned rows verified at 2 scales), and every fast path survives verbatim (the tiny-range first-leaf-depth < 2 gates, the block scans, the continue_verbatim splice and its held_at gate, the verbatim Out mode and matched-prefix skip, the memo's no-position-scanned-twice discipline). Moves: - fill/memo.rs (new): Memo + position_check, with the frame-ledger reference-discipline essay as its module doc (what a site is, what a link is relative to, write vs consumption order, the one-create/ one-consume lifetime). - fill/prescan.rs (new): PreScan + PreFrame + PreFrames, with the fill-equations-restricted-to-the-minimum table as its module doc. PreScan::new replaces fused_fill's 10-field struct literal. - fill.rs keeps tick/ticks, FillOutcome, fused_fill, FillWalk, Relation, Frame/Frames, scan_min_from, and gains DeltaReg — the named monotone-register/PopStack delta idiom, rebased at its four sites (Frames.keys, PreFrames.slots/.positions, expand_subtree's keys). - fill.rs module doc: the Limb cost paragraph recut as a charge inventory (every measured claim and meter-row name preserved); the memo material re-pointed at the new submodules. D7 (assertion minimization by construction): - Memo.queue: Vec<u32> 0-sentinel -> Vec<Option<NonZeroU32>>; set_link pushes first so the index is provably nonzero (the remaining expect is the u32 capacity contract); take_link becomes a typed Option read; a const assert pins the niche (one index-sized cell per site). - PreScan.first_slot: usize::MAX sentinel -> Option<usize>, and the suspend tuple (Accumulator, Accumulator, usize, u32) -> the named SuspendedLevel struct. D8 (naming, applied across fill.rs, memo.rs, prescan.rs, fuse.rs): ev -> event, h -> height, corr/Corr -> relation/Relation (H -> Height), d1 -> first_leaf_depth, d -> leaf_depth/arm_offset/out_delta/distance by role, neg/mag -> negative/magnitude, v -> absolute, x -> chain_span, rest -> remaining, vals -> values, l/r/m -> left_cost/right_cost/ cheaper (and left_distance/right_distance/nearer), el_start/l_end -> collapse_start/site_pos, pending_rel/seed_rel/install_rel -> *_relation, off -> offset.
Wave 3 of the skyline legibility restructure (plan D5), zero behavior change: all 776 before tests green, meter suite constants identical, worst-cases-pin clean (172 pinned rows at 2 scales), full gate clean. Moves: - query/integral.rs (new): FREEZE_ALLOWANCE_DIGITS, Integrator, Arming, WindowMass, Aggregate, charge_segment, charge_digits, clusters, u32_digits, int_digits, base_digits, meter_product, meter_window_digits. pub mod (overlay.rs precedent), items pub(super), no re-exports: query.rs, query/tests.rs, and query/web.rs re-point to integral's one path. - mul_into moves query.rs -> query/web.rs (its only non-test consumers: web's settle and EpochLedger::settle); tests reach it at query::web::mul_into. - query.rs keeps rank, distance, lag, rank_cmp, pair_integral, pair_fold, min_ticks, project, absolute_height, max_depth. Doc recut (D6): query.rs keeps the catalog, the sigma/orientation table with the valuation identities, a short height-split statement, the reader-routing Cost summary, and Testing; integral.rs receives the per-boundary algebra (the dh* derivation), the anchored-segment discipline (the h* = B + P + L split), and the funding material, recut into headed sections: the split -> the freeze trigger -> the promotion ledger -> the settle tree -> the charge inventory -> the settle bound and multiplication floor. Every meter row, band, committed-witness name, measured number, and epistemic marker preserved. Anchors re-aimed at integral: query.rs fn docs, web.rs's funding-arity note, tests.rs's kernel commentary, meter.rs's wide-arming and jump-pair prose. D7: Integrator::open now folds through signed::fold_signed_int (the match duplication was its body verbatim); settle_armings' leaf storage drops the Option-take dance for a draining into_iter cursor (verified: the left-first reduction reaches unit ranges in ascending order) plus a running-sum prefix, removing the 'each leaf reduces once' and 'seeded nonempty' expects; WindowMass::combine uses Peekable::next_if, removing both 'peeked' expects. The two committed adequacy settle kernels mirror the new spelling so their 'reduction verbatim' claims stay true. D8 renames: seg -> segment_mass, pos_local -> banked_window, Arming.neg -> negative, p_/w_/t_/seg_ readouts spelled out (parked_/window_/final_window_/segment_), ca/cb -> cursor_a/cursor_b, da/db -> step_a/step_b, orient -> current_orientation/new_orientation, sc/ic -> event_cursor/id_cursor, f -> flip, ev_bits -> event_bits, num -> numerator, l_sign/l_mag -> live_sign/live_magnitude, base -> floor_index (charge_digits' cluster floor), t -> digit_sum (mul_into), d/c/t -> digit/carry_out/sum (combine), i -> limb_index; 'one' kept with its doc. Adequacy kernels mirror the field renames so they read in lockstep with the shipped integrator.
…ty N
The pick/tie/assert skeleton of the overlay-advance law previously lived
four times: overlay's binary advance plus hand restatements in masked
(arity 4), place (arity 3), and filter's admits and coverage (arity N).
The three restatements now dissolve into one generic driver:
- overlay.rs gains CursorSet (priority/depth/step over numbered slots)
and advance_set, the law's arity-N, fold-internal face beside the
binary advance (arity-2, crossing-explicit — unchanged, all callers
untouched). One priority sequence serves both tie-breaks: the pick
takes the first slot in priority order achieving the maximum depth,
and tied slots step in priority order. The tie assert lives once, in
advance_set. The driver allocates nothing per round; priority
iterators are owned ('static) const-shaped arrays or index ranges —
the one signature adjustment from the planned shape, needed so the
driver can hold the sequence across the mutable steps.
- masked.rs: Walk implements CursorSet directly, priority
[B_MASK, B, A_MASK, A] (reproduces the last-max pick exactly; the
tied-others order flips ascending→descending, the sanctioned wibble).
block_skip keeps its structure and gating verbatim, with an
others_deepest(slot) helper replacing the twice-repeated depth maxes.
Renames: am/bm → a_mask/b_mask, ha/hb → height_a/height_b, dirs →
directions; named slot constants replace magic 0..4.
- place.rs: the walk's cursors bundle into Cursors (probe + two
Option<BoundSide>), priority [PROBE, START, END]; the fold_probe/
step_bound closures become the step impl's arms, and the two
"slot N is the present ..." pick-site expects collapse into one
absence-invariant expect shared by both bound arms.
- place/filter.rs: MemberCursors ([PROBE, bounds...]) and SpanCursors
([HI, LO, bounds...]) replace the two hand-rolled advances; the
Deepest enum and the duplicated fold_lo/fold_hi/fold_probe/step_bound
closures dissolve into the set impls. dirs → directions throughout.
Byte-identity: outputs are byte-identical everywhere — the full suite
(776 tests) is green untouched, including the differential proptests
against the composed sweeps and the exhaustive small-scope suites.
Meter movement: none. Every masked and placement MEASURED reading is
byte-identical to the parent commit (masked triple: limb 47, touches
4_704, scan 16_390, heap 1_256; masked quad: limb 24_614, touches
68_181, scan 1_073_674, heap 1_952; all placement relational identities
including the one-bound degenerate ≡ pair sweep, scan 714 = 714 and
limb 20 = 20). No constants re-pinned. The sanctioned masked tied-order
wibble does not materialize on the committed families: it requires a
mask strictly deepest with both event cursors tied at the flip, and no
committed scenario's a/b fold interleaving crosses that window with
order-sensitive carry work. worst-cases-pin: clean, 172 pinned rows
verified at 2 scales (unchanged).
…s as clients
Wave 5 of the skyline legibility restructure: CONSTRUCT. The full generic
unification landed; the fallback (shared kernels + one essay) was not
needed — evidence below.
Design
- skyline/watermark.rs now holds the one anchored-minimum web: MinWeb<P>
with the register named `gap` (one name for the two webs' registers),
the latent boundary, Entry<P> { ZeroRun, Diff { boundary, payload } },
Boundary { Word, Wide }, the follower slots + anchor_relative tags
(core-resident; only the fill walk installs followers), and the pool.
The twin ~100-line propagate loops and the literally-duplicated
decide_undercut_through_latent are one body each; the twin module
essays are one canonical essay (representation, width-conservation move
inventory, followers, the payload seam).
- Hooks, not traits: boundary-killing paths take on_die: impl FnMut(P);
the pushed-above arm mints its payload lazily (impl FnOnce() -> P);
close returns Close<P> { Pending / Retired / ZeroRun / Parked(P) } for
the client to dispatch. Two arm entries preserve each client's exact
op sequence: arm_at_height (the v = h arm — the gap moves out whole,
no fold) and arm_below (the funded-accumulator arm).
- fill/watermark.rs is deleted; fill.rs and prescan.rs drive MinWeb<()>
(the payload-free surface lives beside the core; the MinStack name is
retired with no alias — the instantiation is visible at the type).
query/web.rs is the thin min_ticks client: ReignWeb
{ web: MinWeb<Reign>, winner } with Reign, settle, EpochLedger,
mul_into; its module doc states only the fold's deltas (reigns, the
epoch ledger, the one-ledger funding arity) over a pointer to
watermark. Constructed diff: 738 (fill/watermark.rs) + 754 (web.rs)
twin lines become 1,021 (core + essay) + 389 (client); the
instantiation glue (Close, the hook parameters, the wrapper) is far
under the deleted twin bodies.
- Word compaction is a per-instantiation constructor policy
(MinWeb::compacting() — min_ticks; MinWeb::new() — fill), decided by
measurement (below), stated undated at both constructors.
Byte-identity and meters
- Outputs: the full suite is green untouched (776 tests — the tick/fill
and min_ticks differentials against the recursive oracle, the
exhaustive small scope, every snapshot pin).
- Meters: all 282 MEASURED readings of tests/meter.rs byte-identical to
the parent; the amp board matrix (2,014 cells) byte-identical; the
worst-case map byte-identical at both scales; ranking pin clean (172
pinned rows verified at 2 scales). Zero re-pins: min_ticks rows and
fill rows identical everywhere.
Construct-and-measure record (measured on the constructed diff, gated by
the stop rule, kept out of the landed behavior):
- Sharing web.rs's push-time Word compaction with fill read +1 touch per
word-scale site on two committed families (memo_comb 36,519 -> 37,518
small / 73,019 -> 75,018 large; reveal_comb_hifloor 42,234 -> 43,234 /
42,834 -> 43,834) and moved peak heap on no committed row: the
predicted transient win does not materialize on fill's committed
shapes (its boundary buffers pool either way). Compaction is therefore
elected per instantiation; the min_ticks instantiation keeps it with
its pinned op sequence byte-for-byte, Word arm included.
- Routing fill's emit_here arm through arm_at_height (dropping the no-op
fold of the leased zero) read -1 touch per arm (ascend_cliff
8,432 -> 7,432 / 16,848 -> 14,848; pure_comb 3,122 -> 2,122; memo
families -2,001..-7,999) but breaches four committed liveness floors
from below (tick_run's one-per-byte on ascend_cliff_plateau:
1,438 < 1,651 B; pure_comb 2,234 < 2,425 and ascend_cliff
14,848 < 15,636, both measured-x0.75 floors). An honest improvement
under a liveness floor is a floor-premise finding, left for an owner
decision; fill's arm paths stay op-identical (arm_below with the
leased zero).
Move-discipline attestation (each claim checkable in the unified body):
- a close parks its popped boundary by move, never a fold: close -> park
(mint move / min-into-max merge; Word arms add one machine word).
- an arm recycles the latent into the new boundary: push_boundary's
merge_into_wider before the trichotomy.
- a wide gap is never folded while it survives: emissions fold and
restore only the priced offset (emit_offset's post-sign word-scale
fast path intact); undercuts move gap out whole; the bridges fold gap
into a dying, code-priced delta.
- each propagate hop's dying side funds its fold, top-index domination
deciding direction before any fold, only comparable scales folding
undecided: propagate, one body.
- a set follower tag never outlives its latent: park tags, resolve_latent
untags by the latent's death fold, drop_below untags at the undercut,
close's retirement resets — debug-asserted at each site.
- heights fold into the register once per consumed delta: fold_height.
- Wave 2's two load-bearing install-before-emission ordering comments are
intact (fill.rs consume re-anchor arm; prescan record's tail).
D7: the reigning-record expects reduce 6 -> 5 (the arm trichotomy's two
collapse into the one mint-and-replace closure); the survivors document
the cross-struct winner <=> armed invariant the API cannot carry while
the winner stays wrapper-side. D8 on touched files: t -> gap,
sig -> anchor_relative, d_arm -> arm_offset (one name with fill's
consume site), rec -> reign, neg/off -> negative/offset,
bridge_add_t/bridge_sub_t -> bridge_add_gap/bridge_sub_gap; no
single-letter locals. PROBE-REPORT.md's two MinStack mentions are
re-denominated to MinWeb (the no-ghost-references sweep).
Gate: fully clean (fmt, doclint, testdoc, readme, clippy x2, both
rustdoc gates, test-all, doctest, worst-cases-pin, fuzzfit,
fuelscape-test, surface-totality, supply-chain).
Byte-identical behavior throughout: every deterministic meter reading and board cell is unchanged against the parent commit (captured and diffed at both scales of record plus the worst-case map), the worst-case pin reads clean (172 pinned rows verified at 2 scales), and the full gate is clean. Zero re-pins. Queued dedups and homes: - admit.rs: the collapsible-pair close-out lives once (close_ancestor), called from both step's backtrack loop and finish's drain — identical per-ancestor ops, loop shapes preserved. validate <-> admit cross-citations added in both module docs. - emit.rs: named module-level pick functions follow_max/follow_min replace the four duplicated side-selection closures across join, meet, and hull's emission table. - u32_digits moved integral.rs -> web.rs beside mul_into, its only consumer (verified fresh: WindowMass uses Limbs directly). - signed_sum_base becomes Signed::sum (it sums Signed values; "base" misled) — two call sites in fill.rs updated. - fill/fuse.rs Out::leaf unreachable: revisited and kept. Threading the builder out of diverge()/note_match() either relocates the panic (require_built) or dissolves the note_match/diverge vocabulary into a combined sink; the borrow topology that defeated Wave 2 is unchanged. D8 naming sweep (walk, build, validate, grow, text, literal, encode, decode, root, plus admit/emit residue): internal_nodes for every unary-run count; grow's left_present/right_present, path_depth, level, current, original, subtree, overshoot, events (the k parameter, with the module doc binding the paper's k to it); text's cursor/text/byte and merge's right_floor/lift for the derivation quantities; literal's left/right spelled-out topology and heights names; walk's negative/magnitude, Extremum register, net/min sign-magnitude names; emit's cursor_a/cursor_b, step_a/step_b, directions; admit's flip_lo/flip_hi. D7: no new conversions landed in the swept files — every surviving expect/unreachable is a contract panic or a cheap invariant probe, each considered site recorded in the campaign log. Doc re-aims: the retired name "watermark stack" re-denominated to the watermark web's terms at six meter-doc sites (meter.rs, registry.rs, board/family.rs, tests/meter.rs); skyline.rs's module doc gains the two-line machinery note pointing at overlay/watermark/signed.
The fill walk's at-height arm (`MinWeb<()>::emit_here`, pending frames open) routed through `arm_below` with a leased zero, whose offset computation folds that zero into the dying gap: one digit touch per arm bought nothing — `arm_at_height` moves the gap out whole with no fold and identical values. Wave 5 measured this exact routing and gated it out because the honest −1 touch per arm breaches four committed liveness floors from below; this commit takes the improvement and re-derives those floors premise-first. The falsified premise - The width-circulation `tick_run` one-per-byte floor claimed "the walk folds every consumed delta into the height accumulator" at one touch per input byte. The dimension was never mechanism-true: a fold touches one digit per 32-bit digit — one per 64-bit limb through `apply_limbs`, zero limbs included — so wide payload funds at most bytes/8, and the constant held only because the arm's no-op fold subsidized one touch per site. The leveled control (all-zero boundaries, the most sites per payload byte) exposes it: 1,438 touches on 1,651 input bytes. - The three ×0.75 floors it dragged under (pure_comb, ascend_cliff, ascend_cliff_plateau) were measured-basis floors whose basis included the same per-arm touch. Re-derived floors (from the improved walk's irreducible work, never the new measurements; margins are what the mechanism leaves) - tick_run (width_circulation): touches >= input/8. Every consumed code's magnitude folds into a live accumulator at least once, one touch per 64-bit limb, zero limbs included; in every family here the folded payload is at least an eighth of the packed input. Cleared: plateau 1,438 vs 206 (x7.0) small, 2,854 vs 412 (x6.9) large. - PURE_COMB_TOUCH_FLOOR = 2,030 = 2(k−1) + b/64 at (1,000, 2,048): each close-reveal cycle's arm pays the latent recycle's fold (>= 1 digit, a leased zero included) and the merged boundary's sign read; the wide plateau code folds once at one touch per limb. Cleared: 2,234 (x1.10). - ASCEND_CLIFF_TOUCH_FLOOR = 8,060 = 4(k−1) + b/64 at (2,000, 4,096): one fold per consumed nonzero unit code, one sign read per pushed boundary's arm, one domination read plus one dying fold per cascade hop, plus the wide cliff code's one fold. Cleared: 14,848 (x1.84). - PLATEAU_TOUCH_FLOOR = 2,063 = (k−1) + b/64 at (2,000, 4,096): one sign read per arm even at all-zero boundaries; the wide first raise folds once; the zero-run stack passes the final undercut whole. Cleared: 2,854 (x1.38). Re-pinned constants (old -> new; ceilings measured x1.25, unbreached floors measured x0.75, on the parent-measured new basis) - pure_comb ceiling 4,043 -> 2,793 (basis 3,234 -> 2,234), floor 2,425 -> 2,030 (derived, above) - ascend_cliff ceiling 26,060 -> 18,560 (parent-live basis 16,848 -> 14,848; the pinned 20,848 had pre-existing unowned drift), floor 15,636 -> 8,060 (derived) - PLATEAU_TOUCH_CEILING 6,068 -> 3,568 (basis 4,854 -> 2,854), PLATEAU_TOUCH_FLOOR 3,640 -> 2,063 (derived) - reveal_comb ceiling 122,131 -> 94,620, floor 73,278 -> 56,772 (parent-live basis 79,697 -> 75,696; pinned 97,705 was pre-existing drift) - HIFLOOR_TOUCH_CEILING 63,547 -> 51,042, HIFLOOR_TOUCH_FLOOR 38,127 -> 30,624 (parent-live basis 42,834 -> 40,833; pinned 50,837 was pre-existing drift) - memo_fanout ceiling 110,907 -> 90,902, floor 66,544 -> 54,540 (parent-live basis 76,722 -> 72,721; pinned 88,726 was pre-existing drift) Reading movements (parent 8bc1255 -> here, small / large; every one a whole-touch multiple of the family's arm count) - pure_comb 3,122 -> 2,122 / 3,234 -> 2,234 (−k) - ascend_cliff 8,432 -> 7,432 / 16,848 -> 14,848 (−k) - ascend_cliff_plateau 2,438 -> 1,438 / 4,854 -> 2,854 (−k) - reveal_comb 39,849 -> 37,848 / 79,697 -> 75,696 (−2k−1) - reveal_comb_hifloor 42,234 -> 40,233 / 42,834 -> 40,833 (−2k−1) - memo_chain_distinct 53,007 -> 51,006 / 106,007 -> 102,006 (−2k−1) - memo_chain_shared 37,022 -> 35,021 / 74,022 -> 70,021 (−2k−1) - memo_comb 36,519 -> 35,518 / 73,019 -> 71,018 (−2k−1) - memo_churn 52,021 -> 50,420 / 104,021 -> 100,820 (−2k−1) - memo_oscillating 507,465 -> 505,464 / 1,014,965 -> 1,010,964 (−2k−1) - descending_raises 40,031 -> 38,428 / 80,031 -> 76,828 (−2k−3) - tick scenario envelopes, inside their standing bands, no constant moved: tick_expand_cross 125,008 -> 125,006; tick_ownership_hole 6,050 -> 6,043; tick_mirror_wide 85,558 -> 85,557; tick_nested_wide 24,646 -> 24,645; tick_ownership_comb 125,020 -> 125,019; ticks_mirror_wide 86,059 -> 86,058; ticks_nested_wide 24,900 -> 24,899 (ticks_flatness endpoints follow, deltas 0) Board: only tick/ticks/clock_tick touch columns move (per-byte down; version_tick ascend-plateau's touch exponent display 1.00 -> 0.99); red counts unchanged (19 at scale 1 / 18 at acceptance, the pre-existing owner-triage set); worst-case map argmaxes unchanged (one runner-up ratio display); ranking pin clean with no re-pin (172 rows at 2 scales). Byte-identity: the full 776-test suite is green untouched — the tick/fill differentials against the recursive oracle, the exhaustive small scope, every snapshot pin. The change moves work, never values. The memo_resolution_cost module's own one-per-byte tick_run floor is unbreached (its families read 10x+ per byte on ledger folds) and keeps its constant.
…ink allows The rule: a skyline submodule is `pub` exactly where code outside the crate path-names it — the meter integration suite (`tests/meter.rs`) or any other external consumer. Verified by grep across `crates/before/tests/`, `crates/before/fuzz/`, `fuzzfit/`, `surfacecheck/`, the workspace root `src/`, and `crates/before-viz`: the module-qualified external reaches are `sweep`, `emit`, `query`, and `text` (the `encode`/`decode`/`validate` hits are this module's root functions), and nothing external names any machinery module. Demoted to `pub(crate)`: `place`, `fill`, `grow`, `literal`, `masked`, `overlay`, and `query::integral` (which also resolves the flagged pub/private machinery-module asymmetry: overlay+integral now sit with watermark+web on the private side). `skyline.rs`'s module doc names the demoted modules as plain code spans — the established pattern for its private machinery — and its machinery note now states the rule in one line instead of inventorying. `#![allow(rustdoc::private_intra_doc_links)]` roster, arbitrated by running both doc gates with every header removed and restoring exactly what fired: - Removed as dead (private containers; the lint cannot fire): admit.rs, grow.rs, overlay.rs, place.rs, masked.rs, query/integral.rs. - Kept, load-bearing (the public gate fails without them): codec/bits.rs (`Bits`/`BitsMut` docs link private `ptr_eq`/`canonical_eq`), sweep.rs (its doc links `super::overlay` and private `Directions`). - Added, load-bearing for the demotions: emit.rs (its doc cites `super::overlay`'s boundary-bookkeeping essay), query.rs (module and fold docs cite the `integral` submodule's essay). Zero behavior change and zero meter movement: visibility and doc headers only; the full suite is green and both rustdoc gates (public and --document-private-items, warnings denied) pass.
…s outright Owner ruling (2026-08-07, superseding the empty-buffer allowance): no expected-reds/accepted-reds mechanism may exist at all. A red board cell at a scale of record is unconditionally a gate failure until resolved — by a cure, or by an owner-declared model at the cell; there is no temporary normalization of deviance, so there is no buffer for it. Excision inventory (the mechanism and every consult): - meter/board/coverage.rs: the ExpectedRed struct and the BOARD_EXPECTED_REDS const (the buffer itself), with the module doc's buffer clause. - meter/board/coverage/tests.rs: the acceptance assertion expected_red_buffer_is_an_empty_triage_buffer and its import. - meter/board.rs: the pub re-exports and the declared-models section's buffer sentence, re-denominated to the unconditional criterion. - meter/registry.rs: the roster doc's intermediate-state bullet (a red cell with a live buffer entry was the sanctioned intermediate state; now there is none) and the adding-a-family checklist's buffer step. - testing/validation_index.rs: the board row's buffer sentence. - tests/amp_board_smoke.rs: the no-colors rationale, re-aimed at the gate's board leg. - examples/amp_board.rs: the verdict consult — the exit criterion was red count != buffer length; it is now red != 0 at the scales of record. - design/before-adversarial-resource-amplification.md: the status header, the red-doctrine decision record, the dashboard red-set section, the acceptance criterion, and §17.3, each restated over the unconditional criterion (the 2026-07-28 accepted-red ruling's doctrine survives; the buffer artifact does not). The demonstration this criterion exposes (measured at f1b24c0, release, one run per scale of record): 19 red cells at scale 1 and 18 at the acceptance scale — 14 causally_contains scan/touch floor reds, 4 ascend-cliff heap-constant reds (version_tick/version_ticks/clock_tick at 177.5 B/B vs the declared 158, version_min_ticks at 193.3 vs 177), and version_min_ticks/benign limb exponent 1.49 at scale 1 only. Their triage lands in the following commits; the gate's board leg is wired after the tree is green, with this red state recorded there as the instrument's catch demonstration.
…mily alignment Every red the unconditional criterion exposed at f1b24c0, diagnosed per cell before any number moved. Per-cell table (cell : genre : diagnosis : action : old -> new): 1-14. causally_contains x {cliff, comb-scatter, mirror-narrow, staircase, reveal-comb, reveal-hifloor, ascend-cliff, freeze-pos, promo-rearm, weight-comb, freeze-parade, lone-freeze, tooth-tail, benign} : FALSIFIED FLOOR PREMISE (not a dead meter) : the row shared comparison_floors(), whose premise — a distinct comparable pair must be walked to the end — is two-directional, while since(v).contains(w) asks one direction only. Probed every board family pair: all 13 red families' pairs answer TRUE (one witness event of w outside v decides; the fused filter::admits walk legitimately early-exits), and the one family whose verdict is FALSE (dense-suffix, w < v, full certification forced) reads green with honest full-walk numbers through the same kernel — the meters are watching; the premise was wrong. Cure: the new membership_floors() constructor forks on the shape of the answer the question forces, one universal premise, no per-family carve-outs: the query refusing w (w <= v) binds the full-examination scan floor and the per-overlay-boundary touch floor; the query admitting w binds the root-codes scan floor with touch not applicable; an equal pair binds neither (byte identity answers it). Floors moved; no reading moved. 15-18. {version_tick, version_ticks, clock_tick, version_min_ticks} x ascend-cliff heap constants : STALE FAMILY-STATED CONSTANTS, merged with the family alignment below into ONE restatement per cell. Two causes, named separately: (a) pre-campaign drift, bisected to its owning commit: 647494f "suanpan: quick register in front of the digit engine" moved the tick trio 123.8 -> 177.5 B/B and min_ticks 138.7 -> 193.3 in one commit (parent b79f482 still reads the declared profiles exactly; 647494f reads today's) — deliberate landed perf work (tick 1511 -> 1140 us in its own message) that re-pinned the envelope suite but not the never-gating board ceilings. Campaign-clean: readings byte-identical at the campaign base d249cee and at f1b24c0. (b) the ascend-cliff base alignment below moves every ascend-cliff operand ~-0.8% and the sampled capacity position, landing the profiles at 179.0 -> 181.1 (tick trio) and 194.8 -> 197.5 (min_ticks), measured release at both sampling scales, exponents exactly 1.00. Re-pin at the ratified worst-reading x1.25 rounded-up convention: ASCEND_CLIFF_TICK_HEAP_BYTES_PER_INPUT_BYTE 158 -> 227, ASCEND_CLIFF_MIN_TICKS_HEAP_BYTES_PER_INPUT_BYTE 177 -> 247. The derivations now also price the quick register and the certificate buffers' power-of-two capacity rounding, sampled at the position the family base fixes (measured: peak heap is a step function of the magnitude width with plateaus between powers of two — 248,672 B flat for widths 992..1023, 494,464 B flat for 1025..2047 — and the x2 ladder preserves the base's position in that period at every point). 19. rank_sum/ascend-cliff (touch) and the ascend-cliff exponent-window hygiene : FAMILY-GENERATOR ARTIFACT, repaired by the in-tree remainder-alignment convention (owner-approved): ASCEND_CLIFF_BASE 1000 -> 992 (= 31 x 32). Constructed evidence for the selector: the rank sum deposits each word-scale summand at bit offset (exponent gap) mod 32; a fixed-size sweep over wrap depths shows touch/summand flat at 1.002 for offsets 0..25, climbing 1.033/1.065/ 1.127/1.217/1.431/1.717 across offsets 26..31, exactly periodic mod 32 — and the family's own instances correlate exactly (rank exponent s-1: remainders 7/15/31/31 across knobs 1000/2000/4000/8000 match the measured 1.11/1.11/1.83/1.83 touch regimes). Six sibling families already pin their remainder by base choice (the freeze-position base's derivation); ascend-cliff was the one that missed it. 32 | 992 pins the remainder at 31 at every ladder point, and among multiples of 32 the base sits just below the 1024-bit capacity boundary, so the heap declarations above sample the buffers' rounding at its efficient edge (base 1024 was measured first and rejected: it lands exactly on the boundary and reads 277-279 B/B for the same work). rank_sum's touch constant now reads 1.4/B flat at every ladder point. (version_min_ticks/benign, the 19th red at f1b24c0, is a two-point-fit artifact over a sparse lumpy counter; its resolution is the estimator policy landing next in this wave, per the owner's full-ladder ruling.) Worst-map ranking pin: clean after the base change (172 rows, no near-tie flips). Prose in this commit's declarations anticipates the ladder vocabulary the policy commit formalizes.
…ne acceptance invocation Owner-ratified measurement policy: an exponent is a trend over all measured points, never a per-window ratio. The estimator is one log-log least-squares fit (judge::trend) across every point the run measured for the cell; through two points the slope is exactly the log ratio, so a single-scale debugging view fits as it renders. The verdict of record is run_acceptance: one invocation sweeps each cell's whole ladder — the two sizes at each of the two sampling scales — judges every constant, declared-model band, and liveness floor per size exactly as before-window semantics demand, fits each exponent once across the four points, and exits nonzero on any red cell; bare single-scale runs are views whose verdicts never bind. Ladder densification (measuring more points) is deliberately not part of the policy: it stays a case-by-case owner- invoked adjudication tool, and that boundary is stated on the estimator. Why: a two-point per-window ratio hands a verdict to a single generator lump. version_min_ticks/benign read limb e 1.49 at scale 1 (green 0.98 at acceptance) from a sparse, lumpy, intercept-scale counter — measured ladder 71:142, 102:174, 134:226, 213:424, 288:708, 427:638 (non-monotone), 549:860, 833:1546, 1117:1720 limb ops — a lump inside one window, linear across the ladder. Under the trend it reads e 0.90: green from its real four points, no cell model, no minted threshold, no new measurement executions. The trend is also strictly sharper where it matters: it surfaced rank_sum/ascend-cliff's cross-window regime flip that both per-window fits read as e 1.00 (triaged by the family alignment in the previous commit). Estimator stabilization, recomputed across all 2,014 cells at both sampling scales: exactly two cells' verdicts moved — version_min_ticks/ benign red -> green (above), rank_sum/ascend-cliff green -> red -> green (previous commit); every other verdict identical, no pinned constant moved by the estimator itself. Guards generalize faithfully: the denominator-span guard runs first-to- last over the fitted points; the capacity-model heap trend stays unjudged (banded instead); the heap fit drops sub-allowance points and judges only when two or more clearing points span a scaling denominator. The committed tripwire (acceptance_trend_absorbs_lumps_and_keeps_ amplifiers_red) pins both directions: the lump ladder's own first window reads over the ceiling through a two-point fit — the pre-policy red, demonstrated — while the four-point trend reads it linear, and a genuine quadratic ladder stays red through the trend in both windows. Invocation unification and re-denomination ride this commit: the acceptance judgment is one invocation (per-scale acceptance plumbing in the example retired), and "scales of record" retires as an evaluation concept — what exists is one measurement ladder feeding one trend fit plus per-size constant checks, with "sampling scale" surviving as schedule vocabulary (ACCEPTANCE_SCALE renamed LADDER_TOP_SCALE; DEFAULT_SCALE is the ladder's base; board docs, render and pin output strings, the worst-map docs, the bench sidecar's reference, and the design doc's acceptance criterion re-denominated). The bench judge's own two sampling scales are its instrument's schedule and keep their names.
The gate's board leg ran only worst-cases-pin, so the amp_board acceptance never gated — a process failure: the board's all-green criterion existed with no leg consuming it, and red cells sat invisible to every pre-commit run. The board stream now runs the acceptance invocation (the whole measurement ladder, one verdict, nonzero exit on any red cell) before the ranking pin; both are deterministic counters, so the stream stays load-immune and safely concurrent. The instruments ratchet's demonstration — this leg catches the pre-fix state (measured at f1b24c0, release, before the triage landed): amp-board: 1995 green / 19 red (2014 cells) [scale 1] amp-board: 1996 green / 18 red (2014 cells) [acceptance scale] with the red set: 14 causally_contains scan/touch floor cells (cliff, comb-scatter, mirror-narrow, staircase, reveal-comb, reveal-hifloor, ascend-cliff, freeze-pos, promo-rearm, weight-comb, freeze-parade, lone-freeze, tooth-tail, benign), the four ascend-cliff heap cells (version_tick/version_ticks/clock_tick at 177.5 B/B vs declared 158; version_min_ticks at 193.3 vs 177), and version_min_ticks/benign (limb exponent 1.49, scale 1 only). Wired after their triage and the estimator policy landed, so the leg arrives green; the readings above are the recorded proof it reads red on the state that motivated it. CI's instruments job drops its separate default-scale board step: the acceptance invocation measures and judges the whole ladder, so the per-scale step pair collapses into the one verdict leg beside the ranking pin, matching the gate.
Four summaries from the ladder-policy commit rendered past the 220-char budget (the acceptance sweep, the window judgment, the acceptance cell judgment, and the exponent-ceiling resolver); each keeps a one-line summary with the rest below the fold. The acceptance entry point's doc cites the private judge seam it drives, so the shard module carries the private-intra-doc-links allow (load-bearing: the link is the rename detector, resolved by the internal-docs gate).
Land sturdier forms of every guarantee the trybuild compile-fail suite
pins, beside the code that carries them, so they guard every build of
the crate rather than one test binary's stderr snapshots:
- static_assertions pins beside the type definitions:
Party/Clock: !Clone + !Copy (Identity Linearity, the crate docs'
second safety rule), each doc'd at the definition where a tempting
derive would land.
- The Clock join matrix's shape pinned beside the matrix: positive
asserts that Clock (by value) carries BitOr<Version>/BitOr<&Version>
with Output = Clock, and negative asserts that no Clock-Clock cell
exists in any borrow shape and no impl is carried by &Clock. Together
with !Copy these entail the use-after-move rejection: | moves its
clock, and the compiler rejects any later use.
- Paired doctests on both From impls (the balanced array splits): a
compile_fail,E0080 twin at N = 0 beside a runnable twin at N = 1 with
identical spelling except the arity — the pass twin is the adequacy
guard proving the spelling compiles, so the fail twin can only be
failing for the arity reason. The N >= 1 contract is now user-facing
rustdoc (a headed section on each impl). Doctests fully build, so the
post-monomorphization const assert fires under them; verified on both
the stable and the pinned-nightly (merged-doctests) legs, where the
E0080 annotation is code-checked.
Ratchet demonstrations (each mutation applied as a reversible edit,
restoration verified by clean git diff; the old suite is deleted only in
the follow-up commit, after these reds):
- derive(Clone) on Party -> E0283 at the party.rs assert_not_impl_any
(ambiguous AmbiguousIfImpl), build fails; reverted.
- derive(Clone) on Clock -> E0283 at the clock.rs assert, independent of
the derive's own E0277 on the Party field; reverted.
- impl BitOr<&Clock> for &Clock (minimal sketch) -> E0283 at the
&'static Clock assert_not_impl_any block; reverted.
- Party's N >= 1 const assert neutered -> the Party compile_fail doctest
FAILS ('Test compiled successfully, but it's marked compile_fail')
while the Clock twin stays green under its own assert; both neutered
-> both twins FAIL; reverted.
Every guarantee the suite pinned now lives in-tree (the parent commit), demonstrated red-under-mutation before this deletion — the instruments ratchet, applied to the instrument's own retirement. What dissolves with it, each verified sole-consumer first: - tests/compile_fail.rs and tests/ui/** (six fail cases, six stderr snapshots, the build-forcing pass case — its monomorphization-forcing role now inherent in doctests, which fully build). - The trybuild dev-dependency and its unique subtree in Cargo.lock. - The rust-src toolchain component (rust-toolchain.toml, ci.yml): its only purpose was letting rustc quote std source into the stderr snapshots. The toolchain-file comment, AGENTS.md's one-time-setup paragraph, and ci.yml's component list are re-denominated. - The stderr re-blessing ritual and its rustc-version sensitivity: the replacements pin guarantees, not diagnostic renderings. (Recorded loss, owner-accepted: the snapshots incidentally checked diagnostic rendering quality; nothing pins that now.) The coverage inventory re-points: surface_coverage's exclusion-families roster and oracle.rs's linearity note now name the compile-time pins (static_assertions beside the definitions and the join matrix, the array-split compile_fail doctest twins) as the owners of linearity and aliasing mechanics. This also removes the tree's only stderr-snapshot-sensitive leg: the gate never touches RUSTC_WRAPPER, and runs natively under kache.
…ixes Per the five fresh-eyes syntheses (skyline-restructure-reviews/): - verdicts #1: filter.rs finish gains the division-of-labor doc (settled pairs' refutations live in full_possible or are the favorable answer; the !live guards keep finish off stale directions). Chose the comment over making Pair::relation refuse when !live: finish's emptiness arms legitimately read settled pairs' relations, and an Option-refusing relation would conflate settled with concurrent. - verdicts #2: admit.rs Errors bullet corrected toward the code ("false verdict" -> the Refuted verdict), and Admission::Refuted's variant doc now carries the height-invalid routing hazard. - verdicts #3: the coverage walk's hole arm states the transitivity license (missing the minimum is missing everything: lo <= v <= bound forces lo <= bound). - streams #3 (F4): parse's O(n) production-path self-revalidation deleted per the recompute-and-compare ruling. Coverage check done first: every accepted text maps (up to digit spelling) onto the canonical-version space the render<->parse inverse pair and the transcoder differential sample, so no input reaches the validator that the committed suites do not cover. Doc re-denominated; a one-line comment states what pins validity. - tick (beyond-legibility): ReignWeb::close counts the close on each live outcome after the dispatch, so the impossible Pending state counts nothing in release. Call sites audited (query.rs min_ticks loop; web.rs drain): the increment lands on the same pre-close reigning record on every live arm — behavior identical on all valid inputs. - tick F10: the route key's three spellings now carry one convention comment ("the branch's route key: Route's convention, the bit position of the branch's 2-bit id tag") at fill.rs, fuse.rs, grow.rs. - foundations #2 (#4): negative-zero re-audit — no producer exists. Every construction normalizes: unzigzag (odd => magnitude >= 1), from_sign_magnitude (suanpan's sign_magnitude ties zero magnitude to Equal), signed_sum/signed_sum_int (cancellation => positive zero), literal negative:false sites. signed.rs restates the tolerance as deliberate slack, positively. Meter movement (all from the parse-revalidation deletion; parent 735fc76 measured by reversible restore, aarch64-apple-darwin, dev profile for envelopes, release for the board): - skyline_parse_dense: scan 750_012 -> 375_006 (limb/heap unmoved) - skyline_parse_bigroot: limb 41_885 -> 41_259, scan 220_018 -> 110_009 - skyline_parse_hugeleaf: heap 137_152 -> 121_984, limb 5_863 -> 3_909, scan 500_004 -> 250_002 - skyline_parse_cliff: limb 45_250 -> 45_180, scan 28_676 -> 14_338 - delegating-parser pipeline limb totals: hugeleaf 752 -> 501, bigroot 8_385 -> 8_259; floors re-derived at x0.85 over the two-site pipeline (639 -> 425, 7_127 -> 7_020), separation re-checked over the bypass readings (251, 4_132). - WORST_RANKINGS touch flips (parse touch density re-ranked once the per-parse work is the build pass's own): version_from_str default staircase -> reveal-comb, acceptance staircase -> comb-scatter; clock_from_str both scales concurrent-pair -> comb-scatter. Board acceptance 2014/2014 green; worst-cases pin clean (172 rows at 2 scales); full -p before --all-features suite 775 passed.
…ument naming
Prose/structure only; zero behavior change; zero meter movement (full
suite 775 green, board 2014/2014 green, worst-case pin clean at both
scales). Per the five syntheses plus the narration-delta relay block.
Vocabulary minting (the campaign's dominant friction genre), applied on
prescan.rs's italicized-first-use model:
- *plateau* minted in skyline.rs where the step function is introduced
(tick F3; overlay.rs's layer-local definition stands).
- *left-full site* minted in fill.rs's module doc beside the arms, with
the narration's full-child ground-truth sentence (relay 5); memo.rs
keeps a back-reference (tick F3).
- *min-into-max* minted at watermark.rs's first use with the
merge_into_wider gloss (integral F6, tick F3).
- *priced by* minted once in overlay.rs's Cost section (foundations
vocabulary finding) and made reachable from watermark.rs's cost
bullet (relay 3 — the tick reader's independent stall).
- *range*/*frame* reconciled by a dual mint at watermark.rs's first use
(a range is the client's bracket; the web holds one frame per open
range). Deviation from the charter's "pick one": the narration delta's
C2 repackage-don't-rewrite constraint and the relay-8 guard protect
praised sentences spelled in both words; the dual mint reaches the
same goal (no reader wonders whether they differ) without rewriting
them.
- height-split components B/P/L and F/L named in query.rs's split
section (integral F1); "both width currencies" named as touch and
limb (integral F4); judge.rs's ladder axes fixed as sampling scale x
size and used consistently (integral F9), with the sparse-lumpy
errs-red direction stated at trend (integral F10).
Thread and aim repairs:
- integral.rs P-bullet re-cut with the forward link to the promotion
ledger and Integrator::frozen (integral F2); ledger-settle bullet
split into funded sub-bullets (integral F3); Complexity address
re-aimed at Version::{rank,distance,lag} with rename-protected links
(integral F5).
- query.rs min_ticks bullet redeems the closes-count koan with the
web-submodule pointer (relay 4).
- grow.rs +k compounding names fill's raising mechanism (streams F1).
- text.rs merge doc gains the frame-free identity lift =
floor(right) - floor(left) (streams F3); the parse bullet glosses
*top*, splits the pin sentence, and states the schoolbook twin's role
plainly (streams F2).
- walk.rs's claim scoped to the single-stream leaf passes with
two-way cross-links to overlay's LeafCursor; no structural
unification (foundations #1). walk added to the root doc's machinery
tour; literal/walk mod declarations gain one-line comments
(foundations #3).
- masked.rs roster states what step's code shows — mask slots free,
A/B relative order the one committed-reading freedom, order
arbitrary-but-pinned (foundations #6, transcription form per relay
10).
- watermark.rs gains # The arming paths (three entry points,
preconditions, first-arm capability — tick F4) and emit_offset's
five-path map with the deliberate non-restore named (tick F5);
followers get the purpose/deferral sentence (relay 9) and the
anchor-relative story its park() pointer (relay 7). All praised
sentences preserved verbatim (relay 8 guard; C2).
- place.rs module doc states the probe-is-every-pair's-a orientation up
front (relay 2); walk's doc states the flatten drop/finish agreement
obligation and all three flatten callers carry their per-verdict
argument (relay 1 — the delta's top latent finding).
- fill.rs IdNode::Empty arm upgraded to the reachability + mechanism +
keep-rationale model (relay 6).
Cursor-set unification (verdicts seed-dispute): filter.rs's
MemberCursors/SpanCursors now own their walk state (probe/endpoint
cursors, live flags, sides) exactly as place.rs's Cursors — the borrow
checker allowed it without contortion; the read loops reach the sides
through the fields. masked/place shapes untouched (the delta's C4:
their difference is principled). Write sequences unchanged; placement
identity rows and the full board byte-green.
Instrument naming (tick #1, F1): the two lower-bound genres are named
apart file-wide in tests/meter.rs — derived *liveness floors* (trip =
the mechanism's irreducible work left the metered representation:
investigate) vs measured-x0.75 *improvement tripwires* (trip = the
reading dropped >25% below the pin: attribute and re-pin). The file
doc mints both; HIFLOOR_TOUCH_FLOOR -> HIFLOOR_TOUCH_TRIPWIRE,
reveal_comb's inline bound -> REVEAL_COMB_TOUCH_TRIPWIRE, envelope
column docs and every trip message re-denominated to their genre.
PURE_COMB_TOUCH_FLOOR and ASCEND_CLIFF_TOUCH_FLOOR keep the liveness
name they already earn.
memo_resolution_cost::tick_run floor (tick #2/F2): re-derived
premise-first to the reveal module's per-limb structure — one touch
per 64-bit limb of every consumed code's magnitude, with the family
premise stated (folded payload at least an eighth of the packed
input). Constant old -> new: one-per-input-byte -> one-per-eight-
input-bytes (the old x1 was a per-delta derivation asserted per byte,
subsidized by narrow-delta families). Readings unmoved; the floor is a
liveness check, not a tightness contest.
Owner counterweight (dissolve/link/mint, per term — binding ruling applied retroactively to the T2 lexicon): - min-into-max: DISSOLVED — every site now names suanpan's merge_into_wider plainly (the narrower buffer folds into the wider), linked once at the close bullet. - range/frame: resolved by DELETING "frame" from watermark.rs — the web's word is now "range" everywhere (prose, field docs, assert messages); "range" keeps its one definition (the client's bracket, never interpreted by the web). fill.rs's one "watermark frame" phrase re-denominated. - plateau: LINKED — overlay.rs's tiling vocabulary keeps the one mint; skyline.rs carries a plain gloss naming overlay as the minting site (a public->private intra-doc link cannot resolve on the public build). - "both width currencies": DISSOLVED into "both the touch and limb counters". - B/P/L and F/L component names: LINKED — named plainly in query.rs with the pointer to integral.rs's existing mints, no re-mint. - priced/paid-by, left-full site, settled (filter.rs), liveness-floor/improvement-tripwire: MINTED (each spent widely enough that per-use restatement costs more; the first two per the owner's own examples). - full child: LINKED to IdNode::Full (the API's own name). Polish implemented (by synthesis numbering): - foundations #5 (walk.rs/overlay.rs internal Panics sections adopt the precise truncation/malformation-vs-silent contract, pointing at causal_cmp's canonical statement), #7 (Extremum reset-policy comparison + provenance contract, grounded in the pool's clear-on-retire), #8 (CursorSet absent-slot lemma written out; priority's commutative-sums freedom stated), #9 (GAMMA_SMALL_MAG_BOUND named with its derivation, both twins), #10 (root-doc micro-frictions: first sentence, zigzag letter d vs code-shape k, gamma-covers-zero clause, codec-cursor reference), #11 (Step vs Signed distinction), #12 (block-scan honesty leads the skip docs), #13 (overlay layer-map sentence split), #14 (numeric flip<=depth restatement), #15 (IdLeafCursor pop-flip survival comment + idbits packed-coding pointer), #16 (advance's unexhausted precondition), #17 (sweep early-exit Break-carries-V reworded); delta latent items: the advance dual-channel why (callback = order, return = crossings), masked.rs Directions::relation link. - verdicts #6 (admit.rs "placement walk's idiom" misattribution dropped at both sites — restated-not-reused, fallibility argument kept), #7 (masked height integrators fold plainly via fold_signed_int; the Side::A polarity pun and its rescue comments gone), #9 (settled minted at Pair::live), #11 (end-first arbitrariness stated), #12 (trichotomy glossed as the comparison trichotomy), #13 (/* negative: */ argument comments at the literal seeding sites, uniformly), #14 (validate.rs first-leaf zero_delta defense), #15 (admit.rs rewrap), #16 (subsumption's pointwise no-block-skipping premise), #17 (filter.rs Cost names the per-interval bookkeeping scans); delta: Demand::After/Before inclusivity reminders at both downstream re-check sites. - streams F5 (grow Phase 2 absolute-code case), F6 (emit sticky-tie seed comments + placeholder note), F7 (build absorb-pop lens comment), P1 (re-anchor gloss), P2 (delta_code takes Option<&Step>), P3 (merge per-step comments). - integral P1 (one's why-a-field), P3 (pair_fold unwrap_or(1) declared unreachable-but-total), P4 (feeds garden path resolved in the Cost list), P5 (rank Cost paragraph as a charge list + the four-structure map sentence), F7 (top-index domination appositive), F8 (forward/ reverse dual names dropped for plain statements), F11 (jump-pair family named at the jump-comb parenthetical), F12 (carry-cliff and comb-teeth glosses), F13 (resolve_latent's caller obligation stated abstractly). - tick F6 (one-web-range-per-Frames-entry comment at the single close), F7 (FillWalk/PreScan field stack -> web, matching query/web.rs), F8 (Relation::Min <-> REL_FOLLOWER invariant on the type), F9 (FOLLOWER_SLOTS pub(super) + const assert binding the slot roster across files), F14 covered by the propagate doc's existing narration (loop-invariant comment deferred: see report), F15 (level-vs-depth caution at the twin declaration), F16 (level-0 keeper exemption), F17 (recorder invariant block), F18 (replay_max why-not-park), F19 (the twelve-line measurement roster reduced to claim + pointer), F20 (close() doc: fill discards the outcome entirely; min-ticks dispatches all four arms) [in close()'s payload sentence], F21 (emit_offset's constant-true note_match as a debug-asserted match), F22 (Out::leaf # Panics heading), F23 (copy_subtree regime map), F24 (compact()'s two-digits-cover-a-u64 derivation); tick polish: the two precondition-shaped assert messages restated as invariants, materialize's sign() collapse idiom matched to the explained spelling, walk()'s derived-depth comment, emit_step's deliberately- unread step comment, RouteProbe's Cost::MAX-as-don't-care and id_span fallback notes, the watermark representation paragraph as a list with the derivation sentence standing alone (relay-8 guard honored), the undercut bullet as sub-bullets, the cost essay's first-read gate, new()/compacting() pointing at their committed families, ascend-cliff floor's created/penetrated split, both derived floors scoped to their mechanism with the floor-premise escape stated. Zero meter movement: full suite 775 green, board 2014/2014 green, worst-case pin clean (172 rows, both scales), clippy clean on default and --all-features. validate_bits gated to test/meter (its production consumer is gone), keeping the default build warning-free.
accumulator/tests.rs (2,046 lines) becomes a shared harness (fresh, oracle_sign, assert_value, from_limbs) over four themed submodules: - tests/differential.rs: the oracle proptests and deterministic adversarial streams; - tests/metered.rs (touch-meter builds): the exact digit-touch pins behind the claims roster, tripwire included — every OWN witness the roster cites lives here, and the claims OWN path moves with them; - tests/witnesses.rs: the constructed tight-corner witnesses (decision thresholds, register headroom extremes, conversion corners); - tests/ledger.rs: the exhaustive and randomized ledger-invariant drivers. The committed proptest seeds move with their tests: the regression file is relocated to tests/differential.txt and duplicated to tests/ledger.txt (seeds replay per-file; the three committed cases' (arm, limbs, shift) shape is drawn by the run-forming strategies in both files), never stripped. New coverage: pooled_reuse_after_reset_matches_the_oracle pins the reset -> re-spill seam end to end (a second stream spilling into the retained buffer sees no residue) — the seam enter_digit_engine's idle-buffer debug_assert guards, previously exercised only up to the reset itself. Naming pass over the moved code (no single-letter identifiers): x/y -> receiver/operand, k/n/w/d -> cliff_bits/pairs/tooth_bits/ held_digits and kin, ledger_dfs a/o -> next_acc/next_oracle, closure binders spelled out. Two standalone-constraint repairs in test prose: witness docs no longer name a consumer crate. Oracle: suanpan 48/48 (one new test); before 775 passed as at the wave base; no non-test code touched.
…gate loop invariant + deferred zeros flush) — the two doc comments the T3 message named
…ary + body (content unchanged)
Naming (no public item touched; behavior-free): every single-letter code identifier spelled out — register values v/ov -> value/ operand_value/held, consume_run_at's t -> above, touch's n -> count, enumerate indices -> offset/limb_index/def_line/scan_line, closure binders (digit, cell, line, character, error, cited) throughout accumulator.rs, limbs.rs, touch_meter.rs, claims.rs, claims/tests.rs. Paper notation (|d|, |s|, |x|) survives only in prose quoting the bounds. merge_into_wider takes 'mut other' directly instead of rebinding. Assertion audit: read_magnitude's debug_assert — an O(skipped-prefix) all-zero rescan of exactly the region the watermark skip exists to avoid, on every dev read-out — is retired per the recompute-and- compare ruling: the invariant it sampled unsystematically is held deliberately by the ledger-invariant suite (the write-watermark clause, after every step of every exhaustive and randomized schedule) and by oracle value agreement on every differential stream; the fn doc now cites that coverage. The surviving debug_asserts are O(1) or once-per-epoch discipline documentation; the four shift-position expects are documented contract panics. Also rewraps the two overlong # Complexity lines on the shifted-word entry points. Oracle: suanpan 48/48; before 775 passed; worst-cases-pin byte-identical (172 rows, rebuilt binary).
Prose only — no code changes. The gaps, each stated in suanpan's own terms: - Metering (crate page + touch_meter module doc): the quick register's touch accounting is now stated — a delta, sign query, negation, or shift the register absorbs counts exactly one touch, a register read-out counts the value's digit_count, the spill prices only its few-digit deposit — and the exact-count semantics are declared a public contract (a fixed operation sequence yields a deterministic reading; changing any operation's count is a breaking change, never noise). - reset: the honest cost fork is on the doc — a reset scans O(|self|) to keep the allocation, a fresh new() is O(1) and drops it — with the decision rule (will the capacity be spilled into again?). - merge_into_wider: why the bound is amortized — a nearly-cancelling merge zeroes the receiver's top and the settlement scan spends credits prepaid by the writes that built those digits (the ledger argument). - Accumulator type doc: the Complexity section no longer states the Clone/Debug pricing twice. - Two mid-sentence wrap artifacts repaired (the representation section's 'If t is in the zone', the Interop lock sentence); one test doc summary brought under the doclint budget. README re-derived via just readme (no hand edits). Oracle: suanpan 48/48; before 775 passed; doclint/testdoc clean; worst-cases-pin byte-identical (172 rows).
The last single-letter code identifiers: the magnitude dispatches' Some(n) -> Some(word), the claims table binder's row indices, and the integration harness's touches(f)/a/t/n -> metered/acc/grid/rounds. Standalone prose: suanpan's own text no longer names its consumer — the claims module, its binding tests, and the amortized-sequences essay now say 'the sibling meter suite the BANDS path names'. The BANDS path string itself stays: it is the mechanical citation the witness-existence check resolves, and the one workspace-relative reference in the crate (flagged for the owner). Oracle: suanpan 48/48; doclint clean; no non-doc behavior touched.
Disjoint file sets: skyline campaign touched crates/before + workspace config; suanpan campaign touched crates/suanpan only. Both sides gated green independently at their heads (kache-native; board byte-identical on the suanpan side, zero re-pins).
The rewrap across the skyline module's doc comments and code comments is the owner's own work; this commit lands it as-is. Mechanical repairs applied: none. The rewrap moved line breaks only. Verified by construction rather than by inspection alone: - word-sequence equality: every removed/added block in the diff normalizes (comment prefix stripped, whitespace collapsed) to an identical token sequence, so no word was dropped, duplicated, or transposed; - comment-only: no non-comment line changed; - markdown block structure: doc lines segment into the same leaf blocks with the same joined content as before, so no continuation line became a list item, heading, blockquote, indented code, or table row; - link integrity: no intra-doc link is split between `]` and `(`, the one break markdown drops silently; - rendered output: the two code spans now folded across a line break (`|D'| <= |dD|` and `Theta(log |v|)` in query/integral.rs) render as single code spans, no table is emitted, and no docblock in the module tree contains a stray backtick; - no line exceeds 80 columns; no trailing whitespace or doubled space at a join point. Gate legs green: fmt-check, doclint, testdoc, readme-check, clippy (--all-targets --all-features, warnings denied), docs, docs-internal, doctest. The doclint reading was checked live, not vacuous: a deliberately de-indented list continuation in skyline.rs drew clippy::doc_lazy_continuation, and the mutation was reversed to a byte-identical tree.
Mechanical: the README is derived from crate-level rustdoc (cargo-rdme); the rewrap moved line breaks only (verified by normalized word-diff).
Replace the skyline currency's loose `negative: bool` vocabulary with a two-valued `Sign` enum (`Positive`/`Negative`) in version/skyline/signed.rs, so polarity puns are unwritable. Zero stays a zero magnitude under `Positive`, exactly the coding's convention; the accumulator's three-valued `Ordering` reads map down at the seam (`Signed::from_sign_magnitude` keeps its `(Ordering, UBig)` signature), and suanpan is untouched. Conversion families: - signed.rs: `Signed.sign`, `zigzag_signed`, `unzigzag`/`unzigzag_base`, `fold_signed`/`fold_signed_int`, `gamma_code_signed`(+`_int`), `signed_sum`/`signed_sum_int`; helpers `from_is_negative`, `is_negative`, `negate`. - overlay.rs `Step.sign` and `fold` (orientation applied as `sign`/`sign.negate()` per side); walk.rs `Extremum::fold`/`fold_armed` and `fold_region`; watermark.rs `fold_height` and the emit/arm/compare family; fill.rs/prescan.rs consume/fold/emit paths; emit.rs `delta_code`/`switch_delta`; grow.rs `recode`'s delta sign; query.rs rank/min-ticks/project folds; web.rs `Reign.sign`, `ReignWeb::leaf`, `EpochLedger.drifts`, `mul_into`'s balanced-digit terms; integral.rs `charge_segment`/`charge_digits`/`WindowMass::charge`, `Arming.sign`, `Integrator::open`; admit, validate, literal, place, place/filter, masked, text; the eight `/* negative: */`-annotated literal folds now spell `Sign::Positive`/`Sign::Negative` directly. Tuple-return dispositions: the unzigzag family and `signed_sum` stay tuples (`(Sign, Int)`/`(Sign, Base)` — consumers immediately fold or repackage, and `Signed`'s magnitude is `Int` where these carry `Base`); `signed_sum_int` and emit's `switch_delta` return `Signed` (their consumers hold the pair as one quantity). text.rs `Summary.span`/ `.incoming` become `(Sign, Base)`. Deliberate keep-as-bool (not quantity signs): - web.rs `mul_into(subtract: bool)` — operation selector (add vs remove the product from a running total). - grow.rs `recode`'s `increment` — height-stepping direction derived from the `Step` selector enum, which is itself untouched. - integral.rs `jump`'s local `negative` (and its test mirrors) — a local predicate branched immediately, never crossing a signature. - emit/tests.rs helper `fold_signed(subtract: bool, ...)` — orientation of a stream within a difference; the step's own sign now composes via `Sign::negate`. - codec/base/tests.rs generator tuples — add-vs-sub op selectors at the suanpan seam, below the skyline currency layer. Behavior is byte-identical: full suite green, board acceptance and the worst-cases ranking pin unchanged, no meter reading moved.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an almost entirely ground-up rewrite of
before, replacing its internal representation with the "skyline": an interleaved tree topology with leaves encoded as Elias-gamma encodings of differences from the previous leaf. This, along with a lot of algorithmic improvements, hardensbeforeagainst adversarial (and accidental) memory amplification on all inputs, and significantly accelerates its performance on even ordinary inputs, to roughly meet or exceed the speed of the pointer-based reference implementation, while using 100x less space.There is still a lot to do to improve the internal legibility of the crate, as well as improve its documentation, but it's time to land this and make further improvements in later branches.