Repository navigation
G8-r2c C: measure.combine@1 sums declared signed cent components - #1461
Merged
Merged
Conversation
grouped_pareto_mle@1, in the new microcosm.build.tail_estimators, fits a Pareto alpha by maximum likelihood to contiguous anchor bands and the open top. It bisects the declared bracket for the declared iteration count, rounds once to six decimals half-even, carries alpha as p/10**6, and refuses a bracket without a sign change and an alpha at or below one by name. Its receipt records the anchors, their fact references and counts, the bracket, the iterations, l' at the final bracket, alpha and the implied top-band mean alpha*c/(alpha - 1). transport.quantile_map@2, in the new transport/quantile_kernels.py, reads the anchor counts from the same compiled band surface _surface_bands reads, then delegates to quantile_map@1's own run with the fitted alpha as a literal. The new module keeps @1's source hash, and every registered kernel's implementation hash is unchanged. Composition lists @2 beside @1 in SKELETON_KERNELS, the money producer sets and _SUPPORT_PRODUCERS (quantile_mapped), and the registry installs it with the population kernels. Invariants: l' is strictly decreasing, so the bisection finds the one root; exact Pareto expected counts recover alpha within 1e-6; scaling the counts leaves alpha unchanged; moving mass upward lowers alpha; @2's map is bitwise @1's at the fitted alpha; Belgium's RSZ counts give 3.348955. Hypothesis tests check each, and each of 13 mutants turns a test red. The bare-band-list support test is xfail(strict) until the w4 fix round's E1 lands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
The new transport/measure_kernels.py sums declared signed integer-cent components on one entity in Python integers, adds back the losses of each declared add-back component (so it counts max(0, r)), and writes three columns the declaration names: the measure in cents, a unit column equal to max(floor, x) / scale, and a universe status. The declaration document holds the entity, components, signs, add-backs, floor, scale and output names, so the kernel holds no column name, floor or scale of its own. A null component leaves the record unresolved (null measure, NaN unit), never zero; x <= 0 is excluded from the positive universe; a measure outside int64 is refused by name. An optional measurement_id is carried into the receipt for hunk A's composition proof. Composition lists the kernel in SKELETON_KERNELS and the registry installs it; no existing kernel's implementation hash moves. Invariants: components plus add-backs equal x exactly; the statuses partition the records; the output does not depend on component order; the unit column equals max(floor, x) / scale for any declared floor and scale; the measure equals an independent Python-integer sum. Hypothesis tests check each, and each of 9 mutants turns a test red. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
ruff's isort rule wants the measure kernels' import in order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
register_transport_population_kernels installs fifteen kernels now that transport.quantile_map@2 joins them. The docstring said thirteen on the base, while the test pinned fourteen; both now say fifteen. The pin lists the refs, not hashes, so no implementation hash moves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
Brings B's fifteen-kernel registration pin (a401e22) into C. The merge changes only test_transport_population_kernels.py; the next commit counts measure.combine@1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
register_transport_population_kernels installs sixteen kernels with measure.combine@1. The pin lists refs, not hashes, so no implementation hash moves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N2tyHSTU4AFqsmoXwaTAXH
This was referenced Nov 2, 2026
This merges the G8-w4 fix round's w4d head fcdb473 into G8-r2c hunk B. Git found no conflicts, so T/compose.py carries both sides' additions and the fix round's text in the code it owns. Invariant: the merge adds B's hunks to w4d and nothing else. The changed lines of `git diff fcdb473 HEAD` equal those of `git diff d81280b a401e22`, line for line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Since w4c, quantile_support returns the frozen QuantileSupport dataclass, which has no __iter__, so the old tuple unpack in test_the_w4_support_producer_reads_v2_params_with_an_open_top raised TypeError after the merge. The test now binds the dataclass, compares support.positive with a tuple of tuples, asserts that a bare band list feeds both signs (support.negative == support.positive), and passes both fields to quantile_bounds. The fix round's E1 makes a bare band list's support read on both signs, so test_v2_support_bounds_both_signs_for_a_bare_band_list XPASSed strictly. This removes its xfail mark; the assertion is unchanged. Checked: test_transport_quantile_map_v2.py passes, 37 of 37. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_property_one_band_and_the_top_match_the_closed_form returned early when the closed-form alpha fell outside 1.01 to 63, and test_property_v2_is_bitwise_v1_at_the_fitted_alpha returned early when the estimator refused. Hypothesis counted each return as a passing example. Each now calls hypothesis.assume, so Hypothesis replaces the draw and its health check would report a filter that rejects too much. test_property_the_score_changes_sign_once_on_the_bracket had the same guard, and it calls assume too. Checked with --hypothesis-show-statistics and a temporary hypothesis.event at each final assertion (not committed). Before, 30 of 60 counted examples reached the closed-form assertion and 44 of 60 reached the differential. After, all 60 of 60 reach it in each of the three properties (109, 14 and 7 invalid draws replaced), and no health check fired. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review's mutant B-M1 (half-up in place of half-even in _round_half_even, B/tail_estimators.py:166) left every test green, because no test rounds a value lying exactly on a tie. test_six_decimal_rounding_is_half_even_at_an_exact_tie rounds Fraction("1.0078125") to 1.007812 and Fraction("1.0078135") to 1.007814, and two values just off the tie to their nearer neighbour.
Checked: with the condition changed to remainder >= half, the new test fails and the other 37 tests in the file pass; with the code restored, all 38 pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under the r2c bracket [1 + 2**-20, 64] the rounded alpha is at least 1.000001, so alpha_not_above_one cannot fire, and heavy-tail data whose root lies at or below one is refused as bracket_without_sign_change. The module docstring now says so. The code doesn't change; both cases still refuse, so R2C-9 holds. The docstring is part of the module source that transport.quantile_map@2's implementation_hash digests, so that new row's hash moves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The review's mutants C-N1 to C-N6 left every test in test_transport_measure_kernels.py green. This adds the tests that catch each one. Review fix 1: test_the_receipt_weights_each_record_by_its_frame_weight runs five records with frame weights 1, 1.25, 1.5, 1.75 and 2, and checks each component's weighted_signed_total, below_zero.weighted and at_zero.weighted against sums written out by hand. C-N1 (weighted_signed_total ignores the weights, T/measure_kernels.py:244-247) and C-N2 (below_zero.weighted sums the x = 0 set, :264-265) each turn it red. Review fix 2: test_node_shape_refusals now also refuses a masked slice, outputs other than the declaration's three (an extra one and a renamed one) and a rewrite output; test_malformed_declarations_are_refused refuses a floor of 2**63 and of -2**63 - 1. C-N3 (allow a rewrite output, :339), C-N4 (drop the whole-row check, :315-316) and C-N5 (drop the outputs check, :331-335) turn test_node_shape_refusals red, and C-N6 (drop the floor's int64 check, :140-141) turns both new floor cases red. Checked: with the kernel unchanged the file passes, 32 of 32; each mutant fails only the test named above. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This brings G8-r2c hunk B's merge-up into hunk C: the w4 fix round's w4d head fcdb473, B's two test fixes for that merge, and B's review fixes. Git auto-merged T/compose.py; nothing conflicted. Invariant: C's head differs from B's head by C's own hunks and C's review fixes only. `git diff c9fa663 HEAD` touches T/measure_kernels.py, T/compose.py's SKELETON_KERNELS line, T/registry.py's import, count and registration, test_transport_measure_kernels.py and the registration pin in test_transport_population_kernels.py, and nothing else. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tail estimator module docstring said the receipt names the bracket_without_sign_change reason. A refusal writes no receipt: TailEstimatorRefusalError raises from grouped_pareto_alpha before transport.quantile_map@2 delegates to @1, and its message and code carry the reason. This changes that one word and nothing else; the replacement has the same length, so no line moves. The change moves transport.quantile_map@2's implementation hash, because that hash digests tail_estimators. I recomputed implementation_hash() for all 44 kernels the engine-free toy registry installs, before and after; only transport.quantile_map@2 moved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FfhfP7EBWSvpa8Wv4
measure.combine@1 builds below_zero and at_zero from the resolved records
only (measure_kernels.py:250-251), but no test asserted those masses on a
frame with an unresolved record, so the review's mutant C-X2 (count every
record whose measure is 0 or None as at zero) kept all tests green.
The new test runs a five-record frame, {WAGES: [0, None, -5, None, 7]},
whose _frame weights are 1, 1.25, 1.5, 1.75 and 2, and asserts
below_zero == {n: 1, weighted: 1.5} and at_zero == {n: 1, weighted: 1.0}.
It sits beside the weights test rather than extending it, because a sixth
record there would change every weight that test checks by hand.
I ran C-X2 and its twin on line 250 (count None as below zero); the new
test fails under each and passes on the unmutated source.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FfhfP7EBWSvpa8Wv4
measure.combine@1 reads measurement_id through string_param (measure_kernels.py:309-313), which refuses anything but a non-empty string. No test reached that check, so the review's mutant C-X1 (read context.params["measurement_id"] directly) kept every test green. R2C-13 makes this the key hunk A's proof reads. The new parametrized test passes 123, "", True and an explicit null and asserts a TypeError whose message is exactly "measure.combine@1 parameter 'measurement_id' must be a non-empty string." (graph_inputs.py:85-91). I ran C-X1; all four cases fail under it and pass on the unmutated source. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FfhfP7EBWSvpa8Wv4
B's head b20948d carries F3, the one-word docstring fix in tail_estimators.py. The merge brings that line into C and nothing else. I checked that the changed lines of git diff -U0 b20948d HEAD equal those of git diff -U0 c9fa663 10694ec plus the F1 and F2 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6FfhfP7EBWSvpa8Wv4
MaxGhenis
marked this pull request as ready for review
November 3, 2026 01:02
Contributor
Author
|
Merged by the NZ hub (session local_e407a527) at acfa6b9 with --merge. Gates: |
MaxGhenis
pushed a commit
that referenced
this pull request
Nov 3, 2026
Brings in #1459 and #1461 (ea8f409), which landed after the first merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6Jmpqc2fSZAM219btF
10 tasks
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.
G8-r2c shared hunk C (#1183):
measure.combine@1. C holds B's new headb20948d9(#1459) and lands right after B. Until B lands, C's diff against main shows B's hunks as well as C's.Head:
acfa6b943db08e99e0464a7ba7ee92e54b5f3bc2, after the fix round below.Landing note. Belgium's hub measured a tree holding hunks A, B, C and D, and both
transport.quantile_map@2andmeasure.combine@1read differently there than in this PR's table. So when A and D land after B and C, they move those two rows again. This body quotes no@2value from that measurement, because F3 (on B) changed@2's hash after it.Fix round
The review in #1183 comment 6590677926 (APPROVE_WITH_NITS) owed C two tests and a body update. Every file:line is at
acfa6b94; the test file ispackages/microcosm-build/tests/engine_free/shared/test_transport_measure_kernels.py.6adaf7cbtest_the_receipt_masses_count_resolved_records_only(:209-217), beside the weights test (:179). Five records,{WAGES: [0, None, -5, None, 7]}, weights 1, 1.25, 1.5, 1.75 and 2; it assertsbelow_zero == {"n": 1, "weighted": 1.5}andat_zero == {"n": 1, "weighted": 1.0}. The code under test isT/measure_kernels.py:250-251and:264-265:251→zero = [i for i in range(size) if measures[i] in (0, None)]) and its twin (:250→negative = [i for i in range(size) if measures[i] is None or measures[i] < 0]): that test,1 failedunder eachmeasurement_id's type checkcdcb985atest_a_measurement_id_that_is_not_a_non_empty_string_is_refused(:285-300), parametrized over123,"",Trueandparams={"measurement_id": None}. Each assertsTypeErrorand the exact message "measure.combine@1 parameter 'measurement_id' must be a non-empty string." (T/graph_inputs.py:85-91). The code under test isT/measure_kernels.py:309-313:310→context.params["measurement_id"]): all four cases,4 failedacfa6b94git merge --no-ff b20948d9, which brings in F3's one word atB/tail_estimators.py:25B/tail_estimators.py:25, by the mergeThe merge check. I stripped the
+/-lines fromgit diff -U0 c9fa6639 10694ec0and fromgit diff -U0 b20948d9 acfa6b94and compared them withdiff. The only difference is the two new tests' lines, so C's head differs from B's by C's hunks, C's earlier fixes and F1 and F2, and nothing else.Does
measurement_identer the node's key? Yes (Read). The kernel reads it fromNode.params(microcosm/graph/decl.py:492).Node.normative()(decl.py:621-636) projects every field exceptDESCRIPTIVE_FIELDS, which is{"description", "citation"}(decl.py:82), so it keepsparams.node_keyhashesnormative(node)as its second part (microcosm/graph/keys.py:288-290). So two nodes that differ only inmeasurement_idget different keys. No test here checks that.Merge-up
10694ec0a2960cb104cce5a35154c6eaabb60ba9(wasc29e4871).c9fa6639, in merge commit10694ec0, withgit merge --no-ff. That brings in w4dfcdb47395293955347ec2697feef1a736a76cc23(the G8-w4 fix round), B's two test fixes for that merge, and B's review fixes; G8-r2c B: transport.quantile_map@2 with a fitted grouped Pareto top band #1459's "Merge-up" section lists them. Nothing was rebased or force-pushed.T/compose.py; nothing conflicted.git diff c9fa6639 10694ec0touches only C's files:T/measure_kernels.py,T/compose.py:193,T/registry.py:53,:536and:547,test_transport_measure_kernels.pyandtest_transport_population_kernels.py:143and:151. So C's head differs from B's by C's hunks and C's review fixes, and nothing else.Review fixes, earlier round
The review (#1183 comment 6585875953, APPROVE_WITH_NITS) owed C two test fixes and one text change. Every file:line is at this head.
ae7c3933test_the_receipt_weights_each_record_by_its_frame_weight,test_transport_measure_kernels.py:179. Five records with frame weights 1, 1.25, 1.5, 1.75 and 2; it checks each component'sweighted_signed_total,below_zero.weightedandat_zero.weightedagainst sums written out by handT/measure_kernels.py:244-247) and C-N2 (:264-265): that testae7c3933test_node_shape_refusals(:362atacfa6b94,:333atae7c3933) now refuses a masked slice, outputs other than the declaration's three (one extra, one renamed) and arewriteoutput;test_malformed_declarations_are_refused(:330atacfa6b94) refuses a floor of 2^63 and of −2^63 − 1 (:314-315):339), C-N4 (:315-316) and C-N5 (:331-335):test_node_shape_refusals. C-N6 (:140-141): both new floor casesThe change
measure.combine@1, in the newT/measure_kernels.py(T/ispackages/microcosm-build/src/microcosm/build/transport/), sums declared signed integer-cent components on one entity into one measure.measureparameter is a canonical JSON declaration withmeasure_sha256. It names the entity, each component column and its sign (±1), the add-back columns, thefloor, thescaleand the three output column names (measure,unit,universe_status).validate_measure_declaration(T/measure_kernels.py:88-161) checks its shape. The module holds no column name, floor, scale or float literal, so NZ's floor 0 and scale 100 will live only in NZ's declaration (R2C-10).combine_measure,:177-274), in Python integers per record:includedwhere x > 0 andexcludedwhere x ≤ 0, whatever floor the declaration names (R2C-14). Where any component is null, the status isunresolvedwith a null measure and a NaN unit, never zero. The three labels areUNIVERSE_STATES, imported fromB/reference_intervals.py:79, which r2b's classifier reads.int64_overflow(:217-221).run,:295-384):Int64, or asint64when the node declares it and no record is unresolved (otherwise refused,:352-356);int / int;string.measurement_id. The node may declare it. The kernel copies it intoreceipt["measurement_id"]and computes nothing from it. Hunk A's composition proof reads the node parameter.T/compose.pySKELETON_KERNELSandT/registry.py.Invariants, and the test that checks each
All tests are in
packages/microcosm-build/tests/engine_free/shared/test_transport_measure_kernels.py.test_property_components_plus_add_back_equal_the_measure(Hypothesis)test_property_the_universe_statuses_partition_the_records(Hypothesis)test_property_the_output_does_not_depend_on_component_order(Hypothesis)test_property_the_unit_is_max_floor_x_over_scale(Hypothesis),test_the_floor_and_scale_come_from_the_declarationtest_property_differential_against_an_independent_integer_sum(Hypothesis differential)test_losses_net_against_gains,test_a_negative_sign_subtracts,test_the_add_back_ignores_an_add_back_components_lossestest_records_at_or_below_zero_sit_outside_the_positive_universetest_an_int64_overflow_is_refused_by_name; each property test also checks that a refusal happens only when the independent sum leaves int64test_a_null_component_leaves_the_record_unresolved_not_zerotest_the_measurement_id_is_carried_not_usedtest_the_receipt_weights_each_record_by_its_frame_weighttest_the_receipt_masses_count_resolved_records_onlymeasurement_idthat isn't a non-empty string is refusedtest_a_measurement_id_that_is_not_a_non_empty_string_is_refusedtest_node_shape_refusalstest_malformed_declarations_are_refusedMutants
All 18 turn tests red; the last three (C-X1, C-X2 and its twin) are this round's, run at
cdcb985a. The first 9 ran atc29e4871. C-N1 to C-N6 are the review's (#1183 comment 6585875953); I ran each againsttest_transport_measure_kernels.pyasae7c3933commits it, and each one turns only the test named red. Their file:line refs are at this head;T/measure_kernels.pyis unchanged sincec29e4871.test_a_null_component_leaves_the_record_unresolved_not_zeroand 5 property teststest_the_add_back_ignores_an_add_back_components_losses,test_property_differential_against_an_independent_integer_sumtest_an_int64_overflow_is_refused_by_nametest_records_at_or_below_zero_sit_outside_the_positive_universe,test_property_the_universe_statuses_partition_the_recordstest_the_floor_and_scale_come_from_the_declaration,test_property_the_unit_is_max_floor_x_over_scaletest_a_negative_sign_subtractsand 6 moretest_the_measurement_id_is_carried_not_usedSKELETON_KERNELStest_measure_combine_is_registered_in_the_skeletontest_measure_combine_is_registered_in_the_skeletonweighted_signed_totalignores the weights (T/measure_kernels.py:244-247)test_the_receipt_weights_each_record_by_its_frame_weightbelow_zero.weightedsums the x = 0 set (:264-265)test_the_receipt_weights_each_record_by_its_frame_weightrewriteoutput (:339)test_node_shape_refusals:315-316)test_node_shape_refusals:331-335)test_node_shape_refusals:140-141)test_malformed_declarations_are_refused, both new floor casesmeasurement_id's type check (:310→context.params["measurement_id"])test_a_measurement_id_that_is_not_a_non_empty_string_is_refused, all four cases:251)test_the_receipt_masses_count_resolved_records_only:250)test_the_receipt_masses_count_resolved_records_onlyShared hunks (file:line at head
acfa6b94)C's own hunks, which
git diff b20948d9 acfa6b94shows:T/measure_kernels.py:1-393.T/compose.py:193(SKELETON_KERNELS).T/registry.py:53(import),:536(docstring count),:547(registration).packages/microcosm-build/tests/engine_free/shared/test_transport_measure_kernels.py:1-575(:1-546before F1 and F2 added 29 lines).packages/microcosm-build/tests/engine_free/shared/test_transport_population_kernels.py:143and:151: the registration pin now listsmeasure.combine@1and says sixteen.B's hunks sit at these lines at this head:
B/tail_estimators.py:1-375,T/quantile_kernels.py:1-158,T/compose.py:184,:220-221,:848-851,:947-957,:1020and:1637,T/registry.py:57and:543,test_transport_quantile_map_v2.py:1-806andtest_transport_population_kernels.py:157. F3 moved none of these lines.git diff fcdb4739 acfa6b94shows B's and C's hunks and nothing else.Judgment calls
measure.combine@1marks a recordincludedat x > 0,excludedat x ≤ 0 andunresolvedon any null component, whatever floor the declaration names. The floor bounds only the unit column, max(floor, x)/scale. Design §3 sets the x > 0 rule and names no floor; R2C-10 moved the floor into the declaration and left the universe alone. NZ declares floor 0, so the two readings agree for NZ. A country that needs zero or loss records inside the universe asks for a declared universe field, which takes a new ruling.UNIVERSE_STATESrather than spelling them again, so its hash digestsB/reference_intervals.py. Hunk D edits that file, so D will movemeasure.combine@1's hash too.Int64carries unresolved records as null. The kernel acceptsint64only when none is unresolved, so a null never turns into a zero.Implementation hashes
I computed
implementation_hash()for every kernel the engine-free toy registry installs:make_composed_fixtureintest_support/microcosm_build/transport_composed.py, whosebuild_transport_registrycall installs the population, geography, target, gate, take-up, reporting and evidence kernels plus the threesimulate.*rule kernels for its toy engines. That's 43 kernels at main and atfcdb4739, 44 at B and 45 at C. The earlier tables left out the threesimulate.*rows; none of them moves. For312dc4d6I installedmicrocosm-emitter-interface==0.7.0, from itsuv.lock, into a scratch target onPYTHONPATH, not into the venv. Each worktree'ssrcdirectories came first onPYTHONPATH, and I printedmicrocosm.build.__path__to confirm it.Against the intake heads, only
transport.quantile_map@2moves (F3, through the merge of B). F1 and F2 add tests only, someasure.combine@1stays at8636ac082235b979. Hunk D editsB/reference_intervals.py, which this kernel digests, so D will move it (see "Landing note").gates.battery@1moves on main, not here. Its hash digests the source closure of its gate bindings (binding_identity.describe,T/gate_kernels.py:740, hashed at:771-775), and three main merges afterfcdb4739changed modules in that closure: #1410'sa6bcd1ab(B/staging.py,B/staging_storage.py,B/us_runtime/worker_identity.py), #1428'se226192a(B/source_manifest.py) and #1051's4b1b1b10(B/us_runtime/multispine_pool.py). I found them by diffing the closure's per-module digests atfcdb4739and312dc4d6and runninggit log --first-parent --oneline fcdb4739..312dc4d6on those five files.312dc4d6fcdb4739c9fa6639b20948d910694ec0acfa6b94calibrate.ordered_adam@10d4577effa147ebe0d4577effa147ebe0d4577effa147ebe0d4577effa147ebe0d4577effa147ebe0d4577effa147ebecalibration.prepare@1c13e76497b8d2dfbc13e76497b8d2dfbc13e76497b8d2dfbc13e76497b8d2dfbc13e76497b8d2dfbc13e76497b8d2dfbconcepts.encode@17815fae8ed573af67815fae8ed573af67815fae8ed573af67815fae8ed573af67815fae8ed573af67815fae8ed573af6concepts.encode_groups@1062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605abdiagnostics.calibration@1d38f8fad075a9aced38f8fad075a9aced38f8fad075a9aced38f8fad075a9aced38f8fad075a9aced38f8fad075a9aceexport.prepare@1af31fa6e1690b90caf31fa6e1690b90caf31fa6e1690b90caf31fa6e1690b90caf31fa6e1690b90caf31fa6e1690b90cexport.readback@196be393c760ca76896be393c760ca76896be393c760ca76896be393c760ca76896be393c760ca76896be393c760ca768gates.battery@15893a7fbe197685629f0505b6a0093f829f0505b6a0093f829f0505b6a0093f829f0505b6a0093f829f0505b6a0093f8a6bcd1ab, #1428'se226192aand #1051's4b1b1b10changed first-party modules in the battery's binding source closure. B and C move nothinggeography.assign_atomic@1d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678geography.derive@1d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678geography.gate@1d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678geography.person_location@13efcbe3741d044973efcbe3741d044973efcbe3741d044973efcbe3741d044973efcbe3741d044973efcbe3741d04497geography.support_from_facts@160273ea8388098b860273ea8388098b860273ea8388098b860273ea8388098b860273ea8388098b860273ea8388098b8geography.support_import@1d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678d60f7ec388903678measure.combine@18636ac082235b9798636ac082235b979money.annual_transfers@1c8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2femoney.minor_units@1c8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2fec8a067cd750ed2femoney.normalize@1f10fbeeaf87467b6f10fbeeaf87467b6f10fbeeaf87467b6f10fbeeaf87467b6f10fbeeaf87467b6f10fbeeaf87467b6reporting.carry_income_decile@180335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c27410reporting.income_decile@180335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c27410reporting.receipt_group@180335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c2741080335f0183c27410simulate.counterfactual@1d54638a3d73a25f1d54638a3d73a25f1d54638a3d73a25f1d54638a3d73a25f1d54638a3d73a25f1d54638a3d73a25f1simulate.rules_by_ref@15806634ec3d9c9445806634ec3d9c9445806634ec3d9c9445806634ec3d9c9445806634ec3d9c9445806634ec3d9c944simulate.solve_zero@145fd2ffdc8cdcabe45fd2ffdc8cdcabe45fd2ffdc8cdcabe45fd2ffdc8cdcabe45fd2ffdc8cdcabe45fd2ffdc8cdcabetakeup.assign@153caf4ae91fc4acb53caf4ae91fc4acb53caf4ae91fc4acb53caf4ae91fc4acb53caf4ae91fc4acb53caf4ae91fc4acbtakeup.bands@11ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b92takeup.cell_diagnostics@11ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b921ceca3ba7c7c9b92takeup.compare@1a318a19b0d147ec9a318a19b0d147ec9a318a19b0d147ec9a318a19b0d147ec9a318a19b0d147ec9a318a19b0d147ec9takeup.gap@13e15ad5e2903c31c3e15ad5e2903c31c3e15ad5e2903c31c3e15ad5e2903c31c3e15ad5e2903c31c3e15ad5e2903c31ctargets.compile@1f3d372c40418665bf3d372c40418665bf3d372c40418665bf3d372c40418665bf3d372c40418665bf3d372c40418665btargets.problem@1aed111cadf163873aed111cadf163873aed111cadf163873aed111cadf163873aed111cadf163873aed111cadf163873transport.boundary@1fc9d10670f6a092ffc9d10670f6a092ffc9d10670f6a092ffc9d10670f6a092ffc9d10670f6a092ffc9d10670f6a092ftransport.create@182dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba156transport.create@282dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba15682dc0880aefba156transport.currency@19c3457ddb908aa969c3457ddb908aa969c3457ddb908aa969c3457ddb908aa969c3457ddb908aa969c3457ddb908aa96transport.donor_ranges@162def362139a52e462def362139a52e462def362139a52e462def362139a52e462def362139a52e462def362139a52e4transport.donor_receipt@162def362139a52e462def362139a52e462def362139a52e462def362139a52e462def362139a52e462def362139a52e4transport.input_closure@123134112061495b723134112061495b723134112061495b723134112061495b723134112061495b723134112061495b7transport.package@1e86be552287a6eb3e86be552287a6eb3e86be552287a6eb3e86be552287a6eb3e86be552287a6eb3e86be552287a6eb3transport.quantile_map@10966a4eb8a4922160966a4eb8a4922160966a4eb8a4922160966a4eb8a4922160966a4eb8a4922160966a4eb8a492216transport.quantile_map@2aa0fd5e4e532264a40b17ba56c16b60faa0fd5e4e532264a40b17ba56c16b60fB/tail_estimators.py:25moved it fromaa0fd5e4e532264a, because@2digeststail_estimatorstransport.scenario_override@1062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605ab062f88411ad605abtransport.support_bounds@12303c60a7ec6135c2303c60a7ec6135c2303c60a7ec6135c2303c60a7ec6135c2303c60a7ec6135c2303c60a7ec6135ctransport.unit_attributes@1f50ec74a1bfe35bbf50ec74a1bfe35bbf50ec74a1bfe35bbf50ec74a1bfe35bbf50ec74a1bfe35bbf50ec74a1bfe35bbtransport.weights_audit@11f3d4750134561271f3d4750134561271f3d4750134561271f3d4750134561271f3d4750134561271f3d475013456127Tests
Closed list at head
acfa6b94, with-n 4and no--maxfail. All files are inpackages/microcosm-build/tests/engine_free/shared/.test_transport_quantile_map_v2.pytest_transport_measure_kernels.pytest_transport_population_kernels.pytest_transport_graph.pytest_transport_evidence_kernels.pytest_country_spec.pyThe run reported
416 passed, with no skip and no xfail in its JUnit XML.test_transport_measure_kernels.pywent from 32 to 37: F1 adds one test and F2 adds four cases.test_transport_graph.py's guards against a float literal or a country name in anyT/*.pypass. At this head,python tools/ci_test_plan.py verifyprintsverification=ok, anduv run --no-sync ruff check .prints "All checks passed!".At
10694ec0, the previous round ran a wider list of 53 files: 4156 passed and 86 skipped, each skip for a pinned NZ feed, pinned geography bytes, the Axiom dense engine or the real donor. This round didn't rerun those files.https://claude.ai/code/session_01LwQq6FfhfP7EBWSvpa8Wv4
Generated by Claude Code