Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
3241e77
Compose the UK national release role on the graph: kernels and compos…
juaristi22 Sep 29, 2026
0a451ae
Build the UK national release role through the graph driver
juaristi22 Sep 29, 2026
e7cb473
Retire the in-process UK calibration seam runner and stage
juaristi22 Sep 29, 2026
925686e
Carry the seam's diagnostics descriptors and resolution block on the …
juaristi22 Sep 29, 2026
24f6395
Receipts: the licensed seam-vs-graph national A/B and the sweeps
juaristi22 Sep 29, 2026
eb1704e
Refuse an occupied national output directory before any work (review C2)
juaristi22 Sep 30, 2026
cb0d390
Re-issue the completion marker over the files the close step rewrites…
juaristi22 Sep 30, 2026
1e8e252
Record an operator interrupt as a discarded Logbook row on both lines…
juaristi22 Sep 30, 2026
15bff5b
Record scratch-mode resolver paths relative to the scratch root (revi…
juaristi22 Sep 30, 2026
e61dd97
Refuse an unhonoured bound doctrine on the dense solve; graph_nationa…
juaristi22 Sep 30, 2026
a4308eb
Require the registered atomic-area supports for a release candidate (…
juaristi22 Sep 30, 2026
11f4014
Blank z-scores beside suppressed counts in the #931 evidence (#932 re…
juaristi22 Sep 30, 2026
c7057e9
Accept only LAD23CD or LAD24CD as the April 2023 LAD code column (#93…
juaristi22 Sep 30, 2026
edb478f
Scope docstring, alias-name comment, atomic-law admission test (#932 …
juaristi22 Sep 30, 2026
63771af
Round-1 docs: deviations, runbook, changelog, receipts R6, the R5 com…
juaristi22 Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion changelog.d/uk-full-build.changed.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
The UK full build is one executable graph served by one driver, `microcosm-build-uk` (`tools/build_uk_full.py`), which carries the release roles of microcosm#823. `--release-role dense` builds the K-clone joint national and local surface through the graph: source spine, geographic cloning, target compilation and selection, calibration, exact-count sizing, gates, diagnostics and a checked export, with all applicable geographies calibrated by default and `--target-geographies country` as an explicit filter in the same build. `--release-role national` is parsed and validated by the same posture-aware validator and then dispatched, before any graph is prepared, to the retained calibration seam through `uk_runtime.national_role`, so the national line is built by the same engine as before. The dense role keeps the posture's solve defaults and refusal tables, the `microcosm_uk_2024_25_local.*` output names, a schema-4 `rowwise_candidate_manifest.json` projected from the stored graph artifacts (which the dense release pre-flight and assembler accept), the Logbook row, staging telemetry around each graph phase and the staged bundle, and gains `--baseline-pi-floor`, `--no-size-checkpoint`, `--candidate-clone-counts` and `--households-only`. `tools/build_uk_rowwise_candidate.py` is now a stub over the driver and `tools/build_uk_frs_spine.py` a shim over `uk_runtime.spine_build`, into which the spine tool moved with its gate batteries as graph nodes and its stage evidence read back from the content store; every runbook command keeps working through them. Bound stage, gate and diagnostic artifacts are restored on replay, exported bytes are checked against their declared artifacts, and the graph's terminal node reports unsigned certification readiness.
The UK full build is one executable graph served by one driver, `microcosm-build-uk` (`tools/build_uk_full.py`), which carries the release roles of microcosm#823. `--release-role dense` builds the K-clone joint national and local surface through the graph: source spine, geographic cloning, target compilation and selection, calibration, exact-count sizing, gates, diagnostics and a checked export, with all applicable geographies calibrated by default and `--target-geographies country` as an explicit filter in the same build. `--release-role national` is parsed and validated by the same posture-aware validator and, since the change that followed, built on the same graph (see the national graph path entry). The dense role keeps the posture's solve defaults and refusal tables, the `microcosm_uk_2024_25_local.*` output names, a schema-4 `rowwise_candidate_manifest.json` projected from the stored graph artifacts (which the dense release pre-flight and assembler accept), the Logbook row, staging telemetry around each graph phase and the staged bundle, and gains `--baseline-pi-floor`, `--no-size-checkpoint`, `--candidate-clone-counts` and `--households-only`. `tools/build_uk_rowwise_candidate.py` is now a stub over the driver and `tools/build_uk_frs_spine.py` a shim over `uk_runtime.spine_build`, into which the spine tool moved with its gate batteries as graph nodes and its stage evidence read back from the content store; every runbook command keeps working through them. Bound stage, gate and diagnostic artifacts are restored on replay, exported bytes are checked against their declared artifacts, and the graph's terminal node reports unsigned certification readiness.
3 changes: 3 additions & 0 deletions changelog.d/uk-national-graph-path.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
The UK national release role (`microcosm-build-uk --release-role national`) now builds on the shared executable graph instead of dispatching to the in-process calibration seam. `uk_runtime.graph_national` composes the bound spine checkpoint, a national register node (the pinned Chronicle artifact, measure exclusions, band edges, the frozen-register check), a national problem node (engine measures resolved on the bound frame, the register materialised, one ordered problem with the national doctrine's `family_equal` loss weights, mass reason and bounds bound into it), the shared dense and calibrated nodes under the doctrine, and the calibration-seam gate scope evaluated in the graph; the driver materialises the seam-shaped evidence from the stored artifacts (the seam diagnostics with the build block, the target-support sidecars, the battery replayed from the stored phase report and signed, `microcosm_uk_2024_25.h5` with a graph readback, the schema-1 `build_record.json` the release-cut certifier reads, the frozen registries, the schema-4 national manifest, the Logbook row on `uk-frs-calibration`, staging and the incumbent evaluation). The dense solve node's admission is declared by the node (the dense line keeps its preflight battery; the national line admits the bound spine's provenance), the bound checkpoint keeps its H5's own period, and the measure receipt carries the materialisation report. `calibration_run.run_uk_calibration`, its attempt runner and battery, and `national_calibration.UKNationalCalibrationStage` are retired; the seam's contracts (gate scopes, sidecar authentication, provenance blocks, scoped signing) and the frame adapter stay.

Review round 1: the national line refuses an occupied `--out` before any work (the seam's rule), an operator interrupt records a `discarded` Logbook row on both lines, and `build.json` is re-issued after the close step so it binds the final build record and manifest bytes. The measure receipt records a scratch-mode resolver's source path relative to the scratch root, making the measure and national problem nodes deterministic between runs; the dense solve refuses a bound `mass_rule`, `scale_rule` or `l0_lambda` it does not honour; the national gate node reads its scope from the posture. Folded from microcosm#932's round 1: a release candidate's atomic-area supports must be the `sources.yaml` rows and the dense release pre-flight checks the manifest's geography binding against that register; the OA-to-LAD lookups accept `LAD23CD`/`LAD24CD` only; the committed #931 evidence blanks z-scores beside suppressed counts.
187 changes: 187 additions & 0 deletions docs/evidence/uk-901-national-ab/compare_a_vs_b2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
{
"purpose": "R5 of experiments/901-uk-national-graph-path-receipts.md: the licensed seam-vs-graph national A/B on the 10 % smoke spine of the #901 pre-merge run (53,806 households, 1,062 targets), compared field by field by data/ukds/acceptance/901-national-ab/compare_national_ab.py. Aggregates and field-level differences only; no unit records.",
"date": "2026-09-29",
"a": "a-seam (main at the #901 merge, 6a70cd4ee, run_uk_calibration)",
"b": "b-graph-2 (uk-national-graph-path at 218226898, microcosm-build-uk --release-role national)",
"solve": {
"targets": [
1062,
1062
],
"households": [
53806,
53806
],
"row_names_equal": true,
"target_vector_equal": true,
"matrix_identical": true,
"design_weights_equal": true,
"household_ids_equal": true,
"final_weights_identical": true,
"final_weights_max_abs_diff": 0.0,
"final_weight_totals": [
29024853.117736887,
29024853.117736887
]
},
"diagnostics": {
"scalars": {
"schema_version": [
8,
8,
true
],
"initial_loss": [
0.3107629418373108,
0.3107629418373108,
true
],
"final_loss": [
0.008806911920052014,
0.008806911920052014,
true
],
"n_nonzero": [
53806,
53806,
true
],
"n_records": [
53806,
53806,
true
],
"realized_max_weight_ratio": [
10.000000000000002,
10.000000000000002,
true
],
"fraction_within_10pct": [
0.9774011299435028,
0.9774011299435028,
true
]
},
"diff_minus_build": [],
"build_diff": [
"/measure_resolution/provider/mode: 'direct_h5' vs 'scratch_frame_export'",
"/measure_resolution/provider/source_path: the seam's input H5 path vs the graph's scratch export path (machine paths omitted here; the scratch path is recorded scratch-relative since the round-1 review)"
],
"bytes_identical": false
},
"gate_report": {
"blocked_at_phase": [
"terminal",
"terminal"
],
"statuses": {
"uk_aggregate_admin": [
"passed",
"passed"
],
"uk_calibration_reference_coverage": [
"passed",
"passed"
],
"uk_cgt_projection_entrants": [
"failed",
"failed"
],
"uk_target_fit": [
"passed",
"passed"
],
"uk_weight_ess": [
"passed",
"passed"
],
"uk_weight_ratio": [
"passed",
"passed"
],
"uk_zero_weight_strata": [
"passed",
"passed"
]
},
"diff_minus_attestation": [],
"signed": [
true,
true
]
},
"logbook": {
"pipeline": [
"uk-frs-calibration",
"uk-frs-calibration",
true
],
"identity_digest": [
"2344c21d2bc85ed0695cf8678db1890cb03238ed9aa3612ca9a209204fd11659",
"2344c21d2bc85ed0695cf8678db1890cb03238ed9aa3612ca9a209204fd11659",
true
],
"input_pins_digest": [
"74a4aa2fbfb82565b98b7f7fbb1b31076d9b95ebd48ab2e125ccc5366bc3b188",
"74a4aa2fbfb82565b98b7f7fbb1b31076d9b95ebd48ab2e125ccc5366bc3b188",
true
],
"disposition": [
"failed",
"failed",
true
],
"rung": [
"f100",
"f100",
true
],
"seed": [
0,
0,
true
],
"phases": [
[
"attempt_started",
"input_sha_verified",
"input_loaded",
"input_sidecar_bound",
"input_finite",
"national_calibration_solved",
"diagnostics_written",
"target_support_sidecars_written",
"error"
],
[
"attempt_started",
"configured",
"input_sha_verified",
"input_loaded",
"input_sidecar_bound",
"targets_bound",
"national_calibration_solved",
"diagnostics_written",
"target_support_sidecars_written",
"calibration_gates_evaluated",
"candidate_blocked"
]
]
},
"h5": {
"written": [
false,
false
]
},
"build_record": {
"written": [
false,
false
]
},
"wall_seconds": {
"a": "637.99",
"b": "653.31"
}
}
Loading
Loading