Repository navigation
Fill composition overlays the closure onto the shared underlay (per-entry assembly) - #7836
Merged
Merged
Conversation
symbol_index_with_qualified_fill and symbol_index_with_bare_fill composed an entry's closure census with a per-index underlay memo (whole-pool qualified fill; whole-tree bare census per source root) by walking the UNDERLAY's key list, probing the accumulator per key, and path-copying an insert per miss. The underlay is constant across entries while the closure varies, so every entry paid O(|whole pool|) work and retained O(|whole pool|) fresh HAMT nodes to build an index that differs only by its own closure. Both directions denote the same map -- union of the key sets, closure wins the intersection -- so overlaying the closure onto the shared memo is identical at O(|closure|), from an O(1) persistent clone. DESIGN 6 bare-minimum-cost. Measured, fixed 50-entry cohort, two reproductions per arm: symbol-index merge 25,517.7 / 26,279.1 -> 530.6 / 538.8 ms (-97.9%) per-root symbol-index comp 16,734.2 / 17,063.9 -> 531.7 / 491.4 ms (-97.0%) sum exclusive assembly 74,876.0 / 76,535.5 -> 34,856.8 / 33,671.5 (-54.7%) additive resolve 129,779 / 132,623 -> 92,332 / 90,940 (-30.2%) Outcomes byte-identical in both arms (48 PASS / 2 FAIL, same two pre-existing hermetic-mode refusals); regen_divergence_count=0 with the seed rebuilt from the changed sources. symbol_index_fill_overlay_direction_test is the discriminating control on the direction clause, executed both ways: green as landed, and both arms red on the winner assertion when the merge direction is flipped in the seed. This is one slice of the shared-entry-view hypothesis, not the whole of it: import-string rewiring, the per-entry closure census, and the per-root variant base are untouched and are different defects. No fleet wall is claimed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The heal job reds with HealAuthorCommitRequired: the CI app lacks
workflows:write, so a drifted .github/workflows/** generated artifact can only
be repaired by an author commit. The drift is NOT from this branch --
main's committed falsifier.yml carries no `id: release_bins` while
generated_artifact_gate main_wet emits it, so main has been carrying the drift
since the step id landed in its spec, with every heal attempt unable to push it.
Regenerated with:
gunbc run --source-root dag --source-root src/v2 \
--entry dag/tools/generated_artifact_gate.dag --function main_wet
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…eipt The note emitted its whole narrative into the seed -- compile and binary material inside the PR whose subject is unnecessary work. The mechanism's detail already has a document authority; the row keeps only the law (closure overlays the underlay, same denotation, different cost grain) and names the receipt and the witness. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The first receipt carried conclusions, not the evidence they derive from, and
its base binary predated the main merge -- two variables, not one.
Both arms are now built from ONE tree with ONE variable: the after arm is this
commit, the base arm is this commit with base-arm-revert.patch applied (the two
fill functions and nothing else). Binary digests for both are retained, so a
reader rebuilds an arm and checks a hash instead of trusting a table cell.
Retained under docs/plans/receipts/fill-composition-overlay-direction/:
subject.tsv commits, binary digests, host envelope, run order,
memory instrument, invocation, selection
cohort.tsv 50 rows: ordinal, entry, function
base-r{1,2}.tsv per-arm scalars + the three receipt lines
after-r{1,2}.tsv
*.stderr.txt full run stderr, as the predecessor receipt retains
base-arm-revert.patch the exact one-variable revert
derive_summary.py summary.json is computed from the four arm files ONLY;
refuses on a missing arm; keeps the inclusive
rewire_total_observation row out of the exclusive sum
summary.json derived, not transcribed
Corrected figures on the same-tree arms (two reproductions each):
symbol-index merge 34,654.4 / 28,420.1 -> 624.6 / 585.4 (-98.1%)
per-root symbol-index comp 27,095.2 / 18,642.2 -> 719.4 / 618.5 (-97.1%)
sum exclusive assembly 100,773.3 / 83,980.4 -> 41,011.9 / 36,017.0 (-58.3%)
additive resolve 155,680 / 146,484 -> 105,012 / 94,624 (-33.9%)
elapsed wall 268,369 / 247,963 -> 200,932 / 183,286 (-25.6%)
peak RSS (VmHWM) 8,160,560 / 8,108,424 -> 5,804,768 / 5,803,012 (-28.7%)
Outcomes identical in all four arms.
Two honesty notes are recorded in the receipt rather than smoothed: the
import-string rewiring row's +12% mean is one outlier inside a 35% within-arm
spread (its other after run sits inside the base range), and the discovery-path
pair is reported as an UNPAIRED observation because both arms were OOM-killed --
--roster-from-discovery does not restrict discovery to the supplied --entry rows.
The execution grain is also corrected: the cohort is ONE process holding ONE
MultiEntryIndex with 50 entry groups, not 50 invocations.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
.gitattributes marks the generated stage0 sources merge=generated-artifact. Merging #7834 (named-argument refusal on function values) resolved v1_compiler_infer.rs to this branch's side and dropped main's 103-line addition, while 04_infer.dag -- the authority -- merged correctly and carried it. Git reported no conflict; the tree was left authority-ahead-of-seed, which is exactly the state the self-host gate exists to catch, and regen --verify reported the divergence. Regenerated from the merged .dag, then bootstrapped properly: rebuild from the regenerated seed and verify again, because the binary that emitted it predates the change it was emitting. Second pass reports regen_divergence_count=0. The two falsifier witnesses that redded main (falsifier_job_steps() arity, repaired upstream by #7843) now pass here by execution. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Second occurrence of the same class: .gitattributes marks generated stage0 sources merge=generated-artifact, so merging main resolved v1_compiler_infer.rs to this branch's side and dropped main's newer emit (CallPositionalDeficit, param_node_default_value) while 04_infer.dag -- the authority -- merged correctly and carried it. Git reported no conflict. Regenerated from the merged authority, then bootstrapped: rebuild from the regenerated seed and verify again, because the binary that emitted it predates the change it was emitting. Second pass reports regen_divergence_count=0. This branch's own mechanism was verified present in BOTH the authority (04_infer.dag symbol_index_with_qualified_fill / symbol_index_with_bare_fill) and the regenerated seed, rather than assumed to have survived the merge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Operator ruling 2026-08-05: the slice's disposition is Delivered and the broader shared-entry-view program stays Open. The note carried the numbers but not the ruled status, so the repo's own authority did not say which of the two it was. Also records the selection rule for the next slice: identify the duplicated construction first, never target the largest surviving row on size -- this receipt's rewiring figure carries a 35% within-arm spread, so size alone selects nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 5, 2026
… silently taking ours merge.generated-artifact.driver answered `true` — the shell builtin, which leaves the ours side in place and exits 0. Git recorded a CLEAN merge and the other side's authority-derived bytes were gone with no signal: the DESIGN §5 absorbing fallback at the integration boundary, whose failure arm answered instead of refusing and destroyed the one fact worth keeping, that a provisional choice was made at all. Measured class (#7836, twice in one session): merging main into a branch that also touched src/v1/stage0/src/v1_compiler_infer.rs resolved the SEED to the branch side and dropped main's emit changes (103 lines, then 130) while src/v1/04_infer.dag — the AUTHORITY — merged correctly and carried them. No conflict either time; the tree was left authority-ahead-of-seed and surfaced a CI cycle later as a red regen job. The refusal is precise, not a widen, and that is measured rather than argued: git reaches a low-level merge driver only when both sides changed the path since the merge base. On a four-case matrix (one-sided theirs, one-sided ours, identical both sides, different both sides) the driver was invoked in exactly the fourth case. So it fires exactly where taking either side drops the other, and adds no stop to a merge that was previously correct. The driver writes nothing to the result file, so git keeps the ours side verbatim — clean bytes, no conflict markers — marks the path unmerged, and exits nonzero with the located regeneration recipe (including the two-pass rebuild, since one regen_stage0 pass can self-verify at divergence 0 for the wrong reason). Rung, at its honest ceiling: mitigatable → mechanically preventable at the merge boundary. NOT structural — a resolver can still `git add` the provisional bytes, and a clone that never converged the repo-local binding gets vanilla text merge. Next trigger is the existing countable row gunbc.commit_workflow commit_writer_binding_work (the DashboardAutocommit and heal-arm writers calling admit_commit_writer at their write boundary); until those land, an out-of-repository autocommit can stage through the unmerged path, and that residue is stated rather than unnoticed. Found and fixed on the way: the generated hook line that converges this binding rendered its argv through git_shell_join_argv, which by that module's own standing ruling is a join and never a quoter. Nothing quoted, so a multi-word driver value degenerated into seven arguments where git expects two — the self-healing converge block would have failed on every hook invocation while reading as ordinary in the diff. It now renders through extdeps.exec.command shell_command_render, which fixes the class rather than this value. Evidence, green by execution (claim_batch --wet): divergent_generated_artifact_merge_refuses_by_real_execution — exit nonzero, 3 index stages, ours content, no markers divergent_generated_artifact_merge_under_true_driver_silently_drops_theirs_red_control — the SAME reproduction with `true`: exit 0, no unmerged stage, theirs gone. The discriminating RED; it fails the moment take-ours returns one_sided_generated_artifact_change_merges_clean — the non-widen control The temp repository executes the emitted script text and the modeled config value, not a copy. 47 further passes across the drift, gitattributes, hook-emit and repo-config witnesses; the new quoting claim asserts key-followed-by-single-quoted-value, so it reds on the unquoted form rather than moving with the renderer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls
pushed a commit
that referenced
this pull request
Aug 6, 2026
… silently taking ours (#7870) * WIP: Correctness (NOT the speed lane): merge=generated-artifact silently drop * WIP: Correctness (NOT the speed lane): merge=generated-artifact silently drop * merge=generated-artifact refuses the concurrent divergence instead of silently taking ours merge.generated-artifact.driver answered `true` — the shell builtin, which leaves the ours side in place and exits 0. Git recorded a CLEAN merge and the other side's authority-derived bytes were gone with no signal: the DESIGN §5 absorbing fallback at the integration boundary, whose failure arm answered instead of refusing and destroyed the one fact worth keeping, that a provisional choice was made at all. Measured class (#7836, twice in one session): merging main into a branch that also touched src/v1/stage0/src/v1_compiler_infer.rs resolved the SEED to the branch side and dropped main's emit changes (103 lines, then 130) while src/v1/04_infer.dag — the AUTHORITY — merged correctly and carried them. No conflict either time; the tree was left authority-ahead-of-seed and surfaced a CI cycle later as a red regen job. The refusal is precise, not a widen, and that is measured rather than argued: git reaches a low-level merge driver only when both sides changed the path since the merge base. On a four-case matrix (one-sided theirs, one-sided ours, identical both sides, different both sides) the driver was invoked in exactly the fourth case. So it fires exactly where taking either side drops the other, and adds no stop to a merge that was previously correct. The driver writes nothing to the result file, so git keeps the ours side verbatim — clean bytes, no conflict markers — marks the path unmerged, and exits nonzero with the located regeneration recipe (including the two-pass rebuild, since one regen_stage0 pass can self-verify at divergence 0 for the wrong reason). Rung, at its honest ceiling: mitigatable → mechanically preventable at the merge boundary. NOT structural — a resolver can still `git add` the provisional bytes, and a clone that never converged the repo-local binding gets vanilla text merge. Next trigger is the existing countable row gunbc.commit_workflow commit_writer_binding_work (the DashboardAutocommit and heal-arm writers calling admit_commit_writer at their write boundary); until those land, an out-of-repository autocommit can stage through the unmerged path, and that residue is stated rather than unnoticed. Found and fixed on the way: the generated hook line that converges this binding rendered its argv through git_shell_join_argv, which by that module's own standing ruling is a join and never a quoter. Nothing quoted, so a multi-word driver value degenerated into seven arguments where git expects two — the self-healing converge block would have failed on every hook invocation while reading as ordinary in the diff. It now renders through extdeps.exec.command shell_command_render, which fixes the class rather than this value. Evidence, green by execution (claim_batch --wet): divergent_generated_artifact_merge_refuses_by_real_execution — exit nonzero, 3 index stages, ours content, no markers divergent_generated_artifact_merge_under_true_driver_silently_drops_theirs_red_control — the SAME reproduction with `true`: exit 0, no unmerged stage, theirs gone. The discriminating RED; it fails the moment take-ours returns one_sided_generated_artifact_change_merges_clean — the non-widen control The temp repository executes the emitted script text and the modeled config value, not a copy. 47 further passes across the drift, gitattributes, hook-emit and repo-config witnesses; the new quoting claim asserts key-followed-by-single-quoted-value, so it reds on the unquoted form rather than moving with the renderer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * chore: regenerate drifted generated artifacts (ci auto-heal) * Regenerate .gitattributes and ci.yml from the merged authorities The merge of main into this branch was governed by this PR's own driver, which is the first live execution of it. It refused on exactly two paths — .gitattributes and .github/workflows/ci.yml, the two generated projections both sides had changed since the merge base — left the ours bytes in the worktree with no conflict markers, and printed the regeneration recipe. dag/gunbc/ci_layer_roots.dag is authored and merged textually with both sides' rows, and every src/v1 seed file changed on main only, so no driver ran there and nothing was dropped. The refusal was not decorative. The ours side of .gitattributes was missing src/v1/stage0/src/v1_tests_claim_v1_complexity_eviction_hazard_test.rs, a row main had added; under the retired `true` driver that row would have merged CLEAN and vanished. Regeneration recovered it. Followed the recipe the driver printed: rebuilt from the merged sources first (main moved 32 src/v1 files, so the pre-merge binary would have emitted from a stale seed), then main_wet, then regen_stage0 — 133 files written, none changed — and regen_stage0 --verify reports regen_divergence_count=0 against a binary built after the merge, so the fixed point is a claim about the merged authorities rather than about a stale binary. RECEIPT FOR THE RESIDUE THIS PR ALREADY NAMED, observed rather than predicted: the out-of-repository autocommit committed through the unmerged index at 00:05 UTC while the resolution was in progress, producing a two-parent merge commit carrying the provisional ours bytes. That is exactly the DashboardAutocommit row in gunbc.commit_workflow commit_writer_binding_work — the writer that does not call admit_commit_writer at its write boundary — and it is why this PR reports the class as mechanically preventable rather than structural. The driver still did its work: the divergence was visible, the recipe ran, and the regenerated bytes land here. Had the driver answered `true`, there would have been nothing for the autocommit to commit through and no signal at any point. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Integrate main (CIT-0) and regenerate ci.yml from the merged authorities main moved again while the previous integration was in flight. This merge produced no driver refusal — the two generated projections it touches changed on main's side only, which is the one-sided case git resolves without reaching a low-level driver at all, exactly as the non-widen control in this PR asserts. Regenerating from the merged authorities then added the include-hidden-files row that arrived with main's workflow change. Against origin/main the committed ci.yml now differs only by this PR's own two additions (the generated-artifact-merge exclude and its staging line), and main_wet reports no further drift. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
3 tasks done
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 6, 2026
Fixed post-#7836 50-entry cohort, interleaved base/after arms on one executor: −1.5% wall, −4.7% assembly, +1.8% peak RSS; closure_env and rewired memos 0 hits on this roster. Raw arms and derived summary.json retained under docs/plans/receipts/entry-view-assembly-direction/. Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 6, 2026
Cohort A/B on the post-#7836 roster: −1.5% wall, −4.7% assembly, +1.8% peak RSS; closure_env and rewired memos 0 hits / 50 misses. Delete process-lifetime memos, claim_batch receipt line, and witness controls — retain measurement receipts only. Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls
pushed a commit
that referenced
this pull request
Aug 6, 2026
* WIP: PR B: construct entry views from shared module and root facts (rewiring, * Fix PR B entry-view assembly: compile, fmt, and shared memo wiring. Wire closure/root assembly env and rewire memos through reconcile, fix im::Vector type mismatches, and drop the per-module census RefCell path that panicked at runtime. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix PR B memo key completeness before A/B measurement. Delete the dead type_name_export_index_memo path, fold variant-eligibility and source_indices derivation into memo digests with documented notes, and enroll discriminating witness controls in entry_view_assembly_memo_witness_test. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: PR B: construct entry views from shared module and root facts (rewiring, * Delete inner global_bare_variant_base_memo after cohort count. Representative 50-entry cohort: 1 cross-grain hit in 106 builds — closure/root coarse memos retain the win; the v2 digest recomputed eligibility on every miss. Remove the stale claim_batch receipt hook that broke fmt at 257175f. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: PR B: construct entry views from shared module and root facts (rewiring, * Address operator P0 review on entry-view assembly receipts. Delete the hollow fallback counter (no fallback arm exists), add memo hit/miss and key-count instrumentation for retention receipts, document variant-base cache key completeness at closure/root grain, and enroll the discriminating witness. Co-authored-by: Cursor <cursoragent@cursor.com> * Document root-key invariant in variant-base cache key note. Name why bare source_tree_root suffices for tree_bare_census_for_root within a fixed MultiEntryIndex, and when incremental index population re-opens the key. Co-authored-by: Cursor <cursoragent@cursor.com> * Add entry-view assembly cohort A/B receipts (measured miss). Fixed post-#7836 50-entry cohort, interleaved base/after arms on one executor: −1.5% wall, −4.7% assembly, +1.8% peak RSS; closure_env and rewired memos 0 hits on this roster. Raw arms and derived summary.json retained under docs/plans/receipts/entry-view-assembly-direction/. Co-authored-by: Cursor <cursoragent@cursor.com> * Remove entry-view assembly memos after measured cohort miss. Cohort A/B on the post-#7836 roster: −1.5% wall, −4.7% assembly, +1.8% peak RSS; closure_env and rewired memos 0 hits / 50 misses. Delete process-lifetime memos, claim_batch receipt line, and witness controls — retain measurement receipts only. Co-authored-by: Cursor <cursoragent@cursor.com> * Link entry-view assembly receipt into doc graph. The new receipt md was unreachable from registered roots, so doc_graph_has_no_orphan_docs failed on PR #7867. Co-authored-by: Cursor <cursoragent@cursor.com> * Headline root_env 92% hit / 1.5% wall in entry-view receipt. Make the load-bearing finding — a working cache that still does not move wall — the headline; state cohort bounds and equivalence honestly before undraft. Co-authored-by: Cursor <cursoragent@cursor.com> * Strip ANSI escapes from remote_cohort_run3.log receipt. Raw terminal colour codes made the PR diff undiffable for review tooling (resolve-pr-diff + gh api fallback both failed). Co-authored-by: Cursor <cursoragent@cursor.com> * Fill binary_sha256.txt; align floor-prep with root_env headline. Receipt cited an empty binary hash file; populate claim_batch digests from summary.json. Floor-prep follow-on now leads with root_env 92% hit / −1.5% wall per receipt headline. Co-authored-by: Cursor <cursoragent@cursor.com> * Address review 49494: memo parser, arm TSVs, shell scaffolds. - Fix derive_summary.py to retain closure_env/root_env/rewired breakdown (was flattening to last-wins rewired-only dict). - Commit per-arm TSV + stderr artifacts extracted from remote_cohort_run3.log (fill-composition precedent); regenerate summary.json. - Add SCAFFOLD + dissolve-on headers to run_all.sh and run_ab_cohort.sh. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 16, 2026
Merge commit rather than rebase: the working agreement is squash-merge, so branch history is flattened on landing anyway, and a rebase would force-push a branch whose instrumentation commits have been cited by sha all evening. Four conflicts, resolved by two different rules. DESIGN.md is a generated projection and was regenerated from dag/gunbc/design_document.dag, not hand-resolved. The merge driver refuses rather than answering true, so it leaves the ours side in the worktree with no conflict markers and marks the path unmerged -- a file that looks resolved and is wrong, which is the failure recorded twice on #7836. Verified afterwards that the projection carries both sides' authority-derived content: main's replacement-cut rule and Altra rows, and this branch's floor-cut rung drop. The three stage0 .rs files are hand-maintained (not in .gitattributes) and were merged by hand: v1_interpreter.rs took both sides -- this branch's ctx.indexes.service_ops and main's str_value helper. cli_run.rs took the deletion. Main modified the selection-degradation receipt machinery that the floor cut removes; no reference to any of its symbols survives anywhere in the tree. claim_executor.rs took main's str_value helper and dropped its selection_tag and _with_selection arguments. Those pass parameters the .dag authority on this branch does not declare -- floor_component_row_of_failure_mode takes no selection_tag, and neither _with_selection constructor exists -- so carrying them would have called constructors that are not there. Main also changed Value::Str to carry Rc<str> and added str_value(), so ten construction sites in cli_run.rs were migrated. Two of those were match PATTERNS, where the variant must stay and only the payload handling changes; a blanket rewrite hit them and the compiler refused, which is the intended outcome of that kind of edit rather than a surprise. Verified after the merge, because the instrumentation is one line away from regressing to the na it just stopped emitting: both cgroup readers resolve through floor_cgroup_dir(), no hardcoded root read survives, both decode seams are present, and a live run emits real cur_kb/ev_high/ev_max. regen_stage0 --verify reports regen_divergence_count=0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot
pushed a commit
that referenced
this pull request
Aug 27, 2026
The conflict was an ADD/ADD on the census module and its witness, which is the tell that this PR's content had already reached main by squash merge. Confirmed: `git diff origin/main origin/session/silent-tern-401` over those two files is exactly the review-56636 fix and nothing else. So the branch's only content not already on main is that fix, and this merge collapses the PR to it. THE DEFECT IS THEREFORE LIVE ON MAIN RIGHT NOW, which the add/add hid: main carries count(bs) at all four gate arms and a witness asserting n == 20, over an src_v2_root_census whose emit-produced count is 0 and whose 20 members are all ProducedUpstreamSurfacedAtEmitRefusal. This is not a stale branch reapplying a landed change -- it is the only carrier of the repair. RESOLUTIONS, each read rather than defaulted: census module + witness -- took HEAD. Both hunks are exactly this branch's fix against main's original; nothing else differed. DESIGN.md -- took MAIN, which is a strict superset. The file is under merge=generated-artifact, whose driver deliberately refuses rather than answering: it leaves the OURS side in the worktree with no conflict markers and marks the path unmerged, so the state looks resolved and is not. Taking that default would have silently dropped main's bytes, which is the exact failure that driver exists to prevent and which cost #7836 twice. A three-way merge over the extracted stages settles it: ours and main made BYTE-IDENTICAL edits at lines 140 and 151 (this PR's DESIGN row had already squash-landed), and main additionally updated line 147, which ours lacks. So main's version contains everything ours does plus one row. merge-file returns clean and its output is identical to main's side. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013crMNyLvjKC2Q5UF851PKy
This was referenced Aug 27, 2026
6 tasks
briansrls
pushed a commit
that referenced
this pull request
Sep 8, 2026
…e function Five conflicts, and in four of them BOTH sides were right about different things. Taking a side would have silently reverted work. pair_serving_desired: main pinned max-num-batched-tokens with its own fleet measurements; this branch corrected the KV dtype and window. They annotate DIFFERENT FIELDS of one function whose merged body already carries both decisions, so both annotation blocks survive, ordered to follow the fields as the body declares them. pair_serving_realization: main added conditional prefill flags rendered only when requested; this branch made the model path come from the declared snapshot, which makes the whole render optional. These compose exactly -- main decides WHICH FLAGS the prefill policy contributes, this branch decides WHETHER THERE IS A LINE AT ALL -- so the renderer keeps the optional signature and concatenates main's flags. The witness needed more than text. Main's two new prefill assertions call the renderer with one argument, which no longer typechecks against the snapshot-taking signature. They are ADAPTED rather than weakened or dropped: a helper renders through the declared snapshot and answers empty when unpinned, so an unpinned snapshot cannot quietly satisfy an assertion about a line nobody launches. ci_layer_roots: this branch adds a note above one main edited. The new note is kept and the v1 note is taken from MAIN, because its wording changed there and this branch never touched it -- keeping the stale copy would have reverted an edit nobody asked to revert. docs/design-rung-drops.md is GENERATED and is not resolved here. The merge driver refuses rather than answering, leaving the ours side unmerged with no markers, so hand-picking a side would drop the other's authority-derived bytes silently -- the defect that driver exists to prevent, which happened twice on #7836. It is staged provisionally and regenerated from the merged authorities before this lands. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013g351i6QQQPDBjwAe3iyVb
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.
Summary
Per-entry index assembly composed an entry's closure census with a shared per-
MultiEntryIndexunderlay memo — the whole-pool qualified fill, and the whole-tree bare census for each source root the entry reaches — by walking the underlay's key list, probing the accumulator per key, and path-copying an insert for every miss. The underlay is constant across entries while the closure varies, so every entry paid O(|whole pool|) work and retained O(|whole pool|) fresh HAMT nodes to build an index that differs only by its own closure.Both directions denote the same map — union of the key sets, closure value wins the intersection — so overlaying the closure onto the shared memo is identical at O(|closure|), from an O(1) persistent clone.
Authority is
src/v1/04_infer.dag(symbol_index_with_qualified_fill,symbol_index_with_bare_fill);v1_compiler_infer.rsis the regenerated seed. DESIGN §6 bare-minimum-cost: a copied accumulator is fixed regardless of the realized n, and the identity of the two directions is what makes this a cost fix rather than a semantic change.Measured benefit
Fixed 50-entry cohort, one process holding one
MultiEntryIndex, both arms built from one tree with one variable, two reproductions per arm:≈66 seconds recovered across 50 entries (1.32 s/entry in this cohort). Every aggregate is lower in both after runs than in both base runs, with no overlap. No fleet figure is claimed: these are additive spans plus this cohort's elapsed wall, not a required-path floor result.
Equivalence
regen_stage0 --verify→regen_divergence_count=0, with the seed rebuilt from the changed sources (not a stale-seed self-verify).Retained evidence
docs/plans/receipts/fill-composition-overlay-direction/— nothing here asks a reader to trust a table cell:subject.tsv— commits, both binary sha256s, host envelope, run order, memory instrument, invocation, selectioncohort.tsv— 50 rows: ordinal, entry, functionbase-r{1,2}.tsv/after-r{1,2}.tsv+ full per-run stderrbase-arm-revert.patch— the exact one-variable reversal; the base arm is this tree with that patch applied and nothing elsederive_summary.py→summary.json— computed only from the four arm files; refuses on a missing arm; keeps the inclusiverewire_total_observationrow out of the exclusive sumTwo things are recorded rather than smoothed: the import-string rewiring row's +12% mean is one outlier inside a 35% within-arm spread (its other after run sits inside the base range), and the discovery-path pair is reported as an unpaired observation because both arms were OOM-killed —
--roster-from-discoverydoes not restrict discovery to the supplied--entryrows.Test plan
cargo test -p v1-compiler-tests symbol_index_fill_overlay— 2 passedleft: "probe.underlay" right: "probe.closure") while still producing the right key set, so the witness measures the direction and not the union. Seed restored.regen_stage0 --verify→ divergence 0, seed rebuilt from changed sourcescargo fmt --all --checkNote on where the unit control executes: nextest was removed from CI 2026-07-11, so
v1-compiler-testscompiles in CI but does not run there. The direction control executes locally (output above); the in-CI evidence is the corpus green.Scope
Fill-composition slice: delivered. Broader shared-entry-view program: open. The surviving assembly rows — import-string rewiring, the per-entry closure census, the per-root variant base — are different defects needing module-grain reuse, and are deliberately not in this PR. Neither is the Rust build-path work.
Worker attestation