Implement amendments 11-13: entrants, partitioned mass, declared tolerance - #851
Implement amendments 11-13: entrants, partitioned mass, declared tolerance#851MaxGhenis wants to merge 4 commits into
Conversation
…rance (B6, C5, D6 green) Executor and population semantics for the three interface amendments, built by a sol lane (20260902-101550-impl-11-13) against the red acceptance tests and flipped with tools/graph_acceptance_flip.py: - B6: an EXPAND node with entrants=True accepts null lineage; entrant rows are built from the kernel's materialized columns (every carried column required, dtype-checked), memberships must name incumbent or entrant groups, the lineage receipt records [new_id, null], and cached replay restores the null. Entrant persons stay fail-closed for now: KernelResult has no channel for their stratum (amendment 14 follows). - C5: capabilities.tolerance is recorded in every receipt, resolved for every declared input into KernelContext.tolerances (rewrites read the incumbent's owner), bound into the producer's key so a changed tolerance invalidates readers, and carried through manifest save/load. - D6: mass is accounted per (partition, stratum) when Graph.mass_partition is set; conserve is enforced per partition and names the partition value; the receipt carries a nested partition block beside the flat fields; kernel-declared accounting is validated to the same shape. - fit.qrf@1: the H1 fixture regenerated on arm64 and on x86_64 under Rosetta differs by zero cells, so the declared bound is Tolerance(ulps=1) with the measurement in the constant's comment; only pins.json moved. Suite: 207 passed, 0 xfailed; H1-H3 byte-exact; burndown total 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Sol review (read-only pass over d048b68, full text in the lane report) plus my rulings as the graph owner. Changes requested; a fix lane follows once the B7 leg lands, so the two do not collide in Must fix before merge
Follow-ups (same lane if cheap)
Verified by the review under a read-only sandbox: focused population/declaration/kernel/key tests 52 passed; kernel and country graph tests 29 passed; ruff clean; 🤖 Generated with Claude Code |
…ance The #851 review showed a string spelling an enum member passed as the member, so a kernel could claim tolerance_bound without a bound. Every Capabilities field is now checked at construction (enums by type, consumes_se a boolean, dependencies a tuple of names) and KernelRegistry.register refuses a look-alike. Lock re-recorded. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # packages/microcosm-graph/tests/test_graph_acceptance_burndown.py # packages/microcosm-graph/tests/test_graph_explain.py
…green) Built by a sol lane (20260902-121951-impl-b7) against the red B7 test and folded here with the current interface head (Capabilities validation). An entrants=True EXPAND that adds person rows supplies KernelResult.strata for exactly the null-lineage person targets; missing entrants, incumbent or copied ids, unknown, duplicate or null ids, a mismatched id dtype, or strata outside that context reject the named node. Copied persons inherit their source stratum; entrant persons take their declared label, which may introduce a new stratum; membership materialization keeps them in total and per-stratum mass. Cached replay attests the full person stratum vector against an ordered receipt["entrant_strata"] of [person_id, label] pairs (bytes labels in a tagged hex form). The sanctioned flip removed only B7's marker; suite pins report 45 properties, zero red. Verified here: 252 tests across the graph shard, kernel packages, and both country graph suites; ruff; partition and burndown verifiers. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Built by a sol lane (20260902-134618-fix-851, one commit per finding, squashed here without its journals) and verified independently: 262 tests across the graph shard, kernel packages, and both country graph suites; ruff; burndown total 0 against origin/main. - EXPAND overlays may not name an entity's id column; final id indexes are asserted against lineage cold and warm. - An entrant's partition value is structural: the EXPAND overlay supplies it with no downstream claimant, while ordinary nodes still cannot own the partition coordinate (composed entrant-with-partition test). - Cache identity binds the full canonical Capabilities projection, not tolerance alone; a cache load misses when the stored capabilities disagree; PARAM- and EXECUTOR-seeded fit.qrf no longer share entries; tolerance stays outside implementation_hash; signed zeros key identically. - KernelContext.tolerances covers rewrite incumbents, resolved against the input version as the compiler and keys do. - Entrant materialization bridge claims require ROWS_ALL. - RunManifest.population() returns one documented PopulationView type; no __class__ mutation. - fit.qrf's tolerance comment states the provisional one-ULP budget honestly; pins regenerated. A bogus partition receipt block is rejected on unpartitioned graphs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
All seven rulings from the review are implemented at 7a8ecbe with a regression test each (details in the fix-lane report; squashed onto this branch after independent verification: 262 tests, ruff, burndown clean). The B7 leg (amendment 14, entrant person strata) landed in the previous commit. CI is the remaining gate. |
Stacked on #847 (retarget to
mainonce it merges). The executor semantics for interface amendments 11-13, built by a sol lane against the red acceptance tests B6, C5, D6 and flipped withtools/graph_acceptance_flip.py.entrants=Trueaccepts null lineage; entrant rows are built from the kernel's materialized columns (every carried column required, dtype-checked), memberships must name incumbent or entrant groups, the lineage receipt records[new_id, null], and cached replay restores the null. Entrant persons remain fail-closed because the frozenKernelResulthas no channel for a new person's mandatory stratum; amendment 14 (KernelResult.strata, charter row B7) follows on Interface amendments 11-13: entrants, mass partition, declared tolerance #847 and a further flip lands here.KernelContext.tolerances(a rewrite reads its incumbent's owner), bound into the producer's key so a changed tolerance invalidates readers, carried through manifest save/load, shown inview/explain.Graph.mass_partitionis set;conserveenforced per partition and the rejection names the partition value; receipt carries a nestedpartitionblock beside the flat fields; kernel-declared accounting validated to the same shape.Tolerance(ulps=1), recorded in the constant's comment; onlypins.jsonmoved.Lane verification (verbatim in the lane report): graph suite
207 passed in 573.09s, cross-package kernels and country graph tests29 passed, H1-H33 passed, ruff,ci_test_groups --verify,graph_acceptance_burndown --verify --baseline origin/maintotal 0. An independent rerun is in progress here and a sol review follows before merge.🤖 Generated with Claude Code