Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
df9dd54
test(serve): load_qwen35_layers fails closed on missing depth/tensors…
noahgift Oct 19, 2026
8092119
test(profile): run rejects bad config before tracing + FALSIFY-BIN-AP…
noahgift Oct 19, 2026
d182bba
test(orchestrate): handle_slash_command arms via real stdin — cost, c…
noahgift Oct 19, 2026
9d991c6
test(present-widgets): ModelCard::paint covered, 7 draw-list tests + …
noahgift Oct 19, 2026
dec8512
test(explain): cover render_register_panel text and status colour thr…
noahgift Oct 19, 2026
6e6ddcb
test(cbtop): cover render_sparklines thresholds, boxes and y advance …
noahgift Oct 19, 2026
23b1c34
test(cgp): cover profile_quant output, roofline label and token estim…
noahgift Oct 19, 2026
e953340
test(train): execute_plan precondition guards + FALSIFY-CLASS-010 (Re…
noahgift Oct 19, 2026
2e9914b
test(train): cover ClassifyTrainer::train early stop, best epoch, che…
noahgift Oct 19, 2026
8993a05
chore(regen): derived files, pass_criteria bumps and CI fragments for…
noahgift Oct 19, 2026
9627296
fix(contracts): cargo-test formal entries carry a declared symbol so …
noahgift Oct 19, 2026
85cefcb
Merge remote-tracking branch 'origin/main' into batch/test-fold-branc…
noahgift Oct 19, 2026
ef0fd97
style(explain): rustfmt the include!d register-panel tests (include_f…
noahgift Oct 19, 2026
186eb45
Merge remote-tracking branch 'origin/main' into tmp-m
noahgift Oct 19, 2026
557deb7
Merge remote-tracking branch 'origin/main' into fx5724
noahgift Oct 19, 2026
b7e9ba6
fix(contracts): regenerate witness after merging main (WitnessStale f…
noahgift Oct 19, 2026
d3559f9
merge: origin/main (witness, contracts.nt, shapes.ttl regenerated)
noahgift Oct 19, 2026
394ec59
fix(contracts): regenerate shapes.ttl and witness with the in-tree pv…
noahgift Oct 19, 2026
3133db0
Merge origin/main into (regen contracts)
noahgift Oct 20, 2026
da0941f
docs(readme): regenerate CONTRACT_COUNT after merging main (readme-sync)
noahgift Oct 20, 2026
3a6858b
fix(contracts): refresh ONT-5 witness census for the merged corpus (R…
noahgift Oct 20, 2026
3436713
Merge branch 'main' into batch/test-fold-branch-only-0345
noahgift Oct 20, 2026
002a4bd
fix(ci): give the orchestrate-repl-slash fragment a free ordinal (813…
noahgift Oct 20, 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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ publishing — all backed by YAML provable contracts that fail CI on drift.
| Metric | Count | Source of truth |
|-------:|------:|---|
| Workspace crates | **81** workspace crates | `cargo metadata --no-deps` (NOT `ls crates/` — 4 are `exclude`d, 1 has no Cargo.toml) |
| Provable contracts | **<!-- CONTRACT_COUNT_START -->1996<!-- CONTRACT_COUNT_END -->** provable contracts | `contracts/census.json` `.n_files` — the set `pv lint` walks (`pv census`, ONT-001 ONT-1; regenerated by `make contracts`, written by `make readme-sync`, guarded by `scripts/check_readme_claims.sh`) |
| Provable contracts | **<!-- CONTRACT_COUNT_START -->1999<!-- CONTRACT_COUNT_END -->** provable contracts | `contracts/census.json` `.n_files` — the set `pv lint` walks (`pv census`, ONT-001 ONT-1; regenerated by `make contracts`, written by `make readme-sync`, guarded by `scripts/check_readme_claims.sh`) |
| CLI commands | **113** CLI commands | `contracts/apr-cli-commands-v1.yaml` §`commands` (parse the list; `apr --help` also lists `help` itself, and `grep -c '^ - name:'` gives 119 — other same-indent `name:` keys exist in the file) |
| Book CLI chapters | **114** chapters | `ls book/src/cli/*.md` |
| Book lib chapters | **73** chapters | `ls book/src/lib/*.md` (parity with `pub mod`) |
Expand Down Expand Up @@ -403,7 +403,7 @@ falsification_tests:
prediction: apr validate bad-model.apr exits non-zero
```

The tree carries <!-- CONTRACT_COUNT_START -->1996<!-- CONTRACT_COUNT_END --> contracts across inference, training, quantization, attention, FFN,
The tree carries <!-- CONTRACT_COUNT_START -->1999<!-- CONTRACT_COUNT_END --> contracts across inference, training, quantization, attention, FFN,
tokenization, model formats, CLI safety — and this README itself.

## Migration from old crates
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cargo test -p aprender-cgp --test quant_profile_output
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cargo test -p aprender-profile --test run_config_errors_5713
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cargo test -p aprender-serve --test qwen35_load_failclosed_5678
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cargo test -p aprender-train --test execute_plan_guards_5674
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cargo test -p aprender-orchestrate --test repl_slash
6 changes: 6 additions & 0 deletions contracts/bin-aprender-profile--aprender-profile-v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,9 @@ falsification_tests:
test: 'cargo test -p aprender-profile --test cli_surface_gate unusable_input_is_rejected'
if_fails: 'MEASURED 2026-09-27 (aprender-01): each exits 2 ("Baseline not found", the documented code) with no panic, GREEN; an existing FILE is also reported "not found" because a baseline is a directory'
mutation: 'make a rejection path return Ok(()) or unwrap the read; must turn RED on that row'
- id: FALSIFY-BIN-APRENDER-PROFILE-007
rule: 'run rejects bad configuration before tracing, naming the flag'
prediction: '`--ml-clusters 1`, a missing or malformed `--transpiler-map`, an unknown `--chaos` preset and an unparsable `--chaos-memory-limit` each exit 1 with a stderr message naming the offending value'
test: 'cargo test -p aprender-profile --test run_config_errors_5713'
if_fails: 'a bad flag is silently accepted and a trace starts with a default (#5713)'
mutation: 'change the ml_clusters guard from < 2 to < 1; ml_clusters_below_two_is_rejected_with_the_value must turn RED'
7 changes: 6 additions & 1 deletion contracts/classification-finetune-v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,11 @@ falsification_tests:
prediction: 'pass + warn + fail equals the number of pre-flight checks, so none is counted twice or dropped'
test: 'aprender-train finetune::training_plan::tests::check_counts_partitions_every_preflight_check'
if_fails: 'A status bucket was dropped or a filter loosened; the displayed summary and the verdict would then disagree about the same checks. MUTANT: fail = 0 turns 2 rows RED.'
- id: FALSIFY-CLASS-010
rule: Apply preconditions fail loudly, by kind
prediction: 'execute_plan returns ConfigError naming a missing model dir, Io naming missing training data, and ConfigError for an unknown model size (GH-377) after creating the output dir; none fall through to training'
test: 'aprender-train --test execute_plan_guards_5674 (4 tests)'
if_fails: 'A precondition was dropped or its error kind changed; apply would start training against a missing model/data or silently default the model size. MUTANT: execute_plan missing-data guard returning ConfigError instead of Io turns missing_training_data_is_an_io_error RED.'
kani_harnesses:
- id: KANI-FT-001
obligation: FT-INV-001
Expand Down Expand Up @@ -204,5 +209,5 @@ qa_gate:
- softmax_sum_invariant
- nan_inf_rejection
- config_factory_contract_sync
pass_criteria: All 9 falsification tests pass
pass_criteria: All 10 falsification tests pass
falsification: Bypass ValidatedClassLogits::new() with unsafe or wrong constructor
15 changes: 15 additions & 0 deletions contracts/contracts.nt
Original file line number Diff line number Diff line change
Expand Up @@ -11788,6 +11788,11 @@
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-draw-scrollbar-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/explain-tui-draw-scrollbar-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-draw-scrollbar-v1> <https://ont.paiml.dev/v1alpha1/id> "explain-tui-draw-scrollbar-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-draw-scrollbar-v1> <https://ont.paiml.dev/v1alpha1/kind> "pattern"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-register-panel-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-register-panel-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-register-panel-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/explain-tui-register-panel-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-register-panel-v1> <https://ont.paiml.dev/v1alpha1/id> "explain-tui-register-panel-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/explain-tui-register-panel-v1> <https://ont.paiml.dev/v1alpha1/kind> "pattern"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/export-user-metadata-roundtrip-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/export-user-metadata-roundtrip-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/export-user-metadata-roundtrip-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Kernel> .
Expand Down Expand Up @@ -12550,6 +12555,11 @@
<https://ont.paiml.dev/v1alpha1/contract/model-capability-ladder-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/model-capability-ladder-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-capability-ladder-v1> <https://ont.paiml.dev/v1alpha1/id> "model-capability-ladder-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-capability-ladder-v1> <https://ont.paiml.dev/v1alpha1/kind> "pattern"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-card-paint-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/model-card-paint-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/model-card-paint-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/model-card-paint-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-card-paint-v1> <https://ont.paiml.dev/v1alpha1/id> "model-card-paint-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-card-paint-v1> <https://ont.paiml.dev/v1alpha1/kind> "pattern"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/model-config-algebra-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/model-config-algebra-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/model-config-algebra-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Kernel> .
Expand Down Expand Up @@ -14078,6 +14088,11 @@
<https://ont.paiml.dev/v1alpha1/contract/tracing-observability-v1> <https://ont.paiml.dev/v1alpha1/id> "tracing-observability-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/tracing-observability-v1> <https://ont.paiml.dev/v1alpha1/name> "tracing-observability"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/tracing-observability-v1> <https://ont.paiml.dev/v1alpha1/version> "1.0.0"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/train-classify-train-loop-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/train-classify-train-loop-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/train-classify-train-loop-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/train-classify-train-loop-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/train-classify-train-loop-v1> <https://ont.paiml.dev/v1alpha1/id> "train-classify-train-loop-v1"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/train-classify-train-loop-v1> <https://ont.paiml.dev/v1alpha1/kind> "pattern"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://ont.paiml.dev/v1alpha1/contract/train-loader-try-load-apr-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/ns/prov#Entity> .
<https://ont.paiml.dev/v1alpha1/contract/train-loader-try-load-apr-v1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://ont.paiml.dev/v1alpha1/Contract> .
<https://ont.paiml.dev/v1alpha1/contract/train-loader-try-load-apr-v1> <https://ont.paiml.dev/v1alpha1/file> "contracts/train-loader-try-load-apr-v1.yaml"^^<http://www.w3.org/2001/XMLSchema#string> .
Expand Down
47 changes: 47 additions & 0 deletions contracts/explain-tui-register-panel-v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
metadata:
id: C-EXPLAIN-TUI-REGISTER-PANEL
version: 1.0.0
created: '2026-10-19'
author: PAIML Engineering
kind: pattern
status: ACTIVE_ALGORITHM_LEVEL
description: |
Pins the register panel drawn by the aprender-explain TUI sidebar (#5594):
one line per register class with its limit, a total/occupancy line, and a
status colour that is green below 64 registers, yellow from 64 to 127 and
red from 128.
references:
- 'crates/aprender-explain/src/tui/widgets.rs (render_register_panel)'

equations:
register_panel_status_colour:
formula: |
colour(total) = green if total < 64, yellow if total < 128, else red
domain: RegisterUsage totals passed through render_sidebar
invariants:
- 'the thresholds are 64 and 128, lower bound inclusive'

proof_obligations:
- id: ERP-INV-001
type: invariant
property: register panel text and status colour follow the total register count
formal: 'colour ≡ threshold'
applies_to: register_panel_status_colour

falsification_tests:
- id: FALSIFY-EXPLAIN-TUI-REGISTER-PANEL-001
rule: render_register_panel draws exact lines and the threshold colour
prediction: 'totals 63, 64, 127 and 128 give green, yellow, yellow and red borders; the lines show the .f32/.b32/.b64/.pred counts and the Total/occ text'
test: cargo test -p aprender-explain --lib register_panel
if_fails: the TUI misreports register pressure on a kernel
ship_blocking: false
mutation: 'change either < to <=, or print the wrong register field; each must turn RED'

qa_gate:
id: QA-EXPLAIN-TUI-REGISTER-PANEL-001
name: Explain TUI register panel gate
description: register panel text and colour thresholds are exact
checks:
- register_panel_status_colour
pass_criteria: FALSIFY-EXPLAIN-TUI-REGISTER-PANEL-001 passes
falsification: Any failure fails the gate
47 changes: 47 additions & 0 deletions contracts/model-card-paint-v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
metadata:
version: 1.0.0
created: '2026-10-19'
author: PAIML Engineering
description: "presentar-widgets ModelCard::paint (#5539) — draws background, border and status badge, then title and version, then optional description, framework/task line, parameters, at most 4 metrics (only when the chart is on) and at most 5 tags, each row below the previous."
kind: pattern
references:
- "crates/aprender-present-widgets/src/model_card.rs — paint"
- "aprender#5539 — coverage ticket"

equations:
paint_draw_list:
formula: "paint emits 3 rects (bg, border, badge) + texts [status, name, vN]; description adds 24 to y of later rows; framework/task text is 'f • t', f or t; metrics emit 2 texts each for min(n,4) when show_metrics_chart; tags emit rect(len*6+12 x 18)+text for min(n,5)"
domain: "a laid-out ModelCard and a RecordingCanvas"
codomain: "the recorded DrawCommand list"
invariants:
- "metrics beyond the 4th and tags beyond the 5th are never drawn"
- "show_metrics_chart=false suppresses all metric text"

proof_obligations:
- id: MODELCARD-PAINT-INV-001
type: invariant
property: "Metrics are capped at 4 and gated by show_metrics_chart"
formal: "∀ run: cargo test -p aprender-present-widgets --lib test_paint_metrics_cap_at_four_and_toggle exits 0"
applies_to: paint_draw_list
- id: MODELCARD-PAINT-INV-002
type: invariant
property: "Tags are capped at 5 and sized from their length"
formal: "∀ run: cargo test -p aprender-present-widgets --lib test_paint_tags_cap_at_five_with_width_from_len exits 0"
applies_to: paint_draw_list

falsification_tests:
- id: FALSIFY-MODELCARD-PAINT-001
rule: "metric cap raised"
prediction: "changing take(4) to take(5) turns test_paint_metrics_cap_at_four_and_toggle RED"
test: "cargo test -p aprender-present-widgets --lib test_paint_metrics_cap_at_four_and_toggle"
if_fails: "metric cap is unguarded"
- id: FALSIFY-MODELCARD-PAINT-002
rule: "tag width formula changed"
prediction: "using len*5 instead of len*6 turns test_paint_tags_cap_at_five_with_width_from_len RED"
test: "cargo test -p aprender-present-widgets --lib test_paint_tags_cap_at_five_with_width_from_len"
if_fails: "tag sizing is unguarded"
- id: FALSIFY-MODELCARD-PAINT-003
rule: "description offset changed"
prediction: "y_offset += 20 after the description turns test_paint_description_shifts_following_rows_by_24 RED"
test: "cargo test -p aprender-present-widgets --lib test_paint_description_shifts_following_rows_by_24"
if_fails: "row layout is unguarded"
7 changes: 6 additions & 1 deletion contracts/qwen35-shapes-v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ falsification_tests:
prediction: SIMD shapes match scalar shapes
test: 'proptest: compare scalar vs SIMD projection shapes'
if_fails: SIMD implementation uses different dimensions
- id: FALSIFY-Q35-008
rule: Layer loader fails closed
prediction: 'load_qwen35_layers errors naming {arch}.block_count when the key is absent, returns 0 layers for block_count = 0, and errors (not a truncated model) when a declared layer lacks its tensors'
test: 'aprender-serve --test qwen35_load_failclosed_5678 (4 tests, header-only GGUF)'
if_fails: 'A missing depth is guessed or a missing tensor is skipped, yielding a silently truncated Qwen3.5. MUTANT: missing block_count falling back to unwrap_or(0) turns missing_block_count_is_refused_not_guessed RED.'
kani_harnesses:
- id: KANI-Q35-001
obligation: Q35-INV-001
Expand Down Expand Up @@ -181,5 +186,5 @@ qa_gate:
- swiglu_ratio
- o_projection
- rope_frequencies
pass_criteria: All 7 falsification tests pass
pass_criteria: All 8 falsification tests pass
falsification: Change n_kv from 4 to 3 to break GQA divisibility
47 changes: 47 additions & 0 deletions contracts/train-classify-train-loop-v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
metadata:
id: C-TRAIN-CLASSIFY-TRAIN-LOOP
version: 1.0.0
created: '2026-10-19'
author: PAIML Engineering
kind: pattern
status: ACTIVE_ALGORITHM_LEVEL
description: |
Pins ClassifyTrainer::train on the single-process path (#5686): early
stopping fires when epochs without improvement reach the patience, best
epoch tracks the lowest validation loss, best and periodic checkpoints are
written, and an attached monitor writer receives the run.
references:
- 'crates/aprender-train/src/finetune/classify_trainer.rs (train)'

equations:
classify_train_loop:
formula: |
stop after epoch e iff epochs_without_improvement(e) >= patience; checkpoint epoch-e iff (e + 1) mod save_every == 0 (save_every is 1 when epochs <= save_every); best/ is written on every new lowest val_loss
domain: single-process ClassifyTrainer runs
invariants:
- 'epoch_metrics are recorded in epoch order'

proof_obligations:
- id: TCT-INV-001
type: invariant
property: patience bounds the run and best_epoch is the lowest val_loss
formal: 'stopped ⇒ without_improvement ≡ patience'
applies_to: classify_train_loop

falsification_tests:
- id: FALSIFY-TRAIN-CLASSIFY-TRAIN-LOOP-001
rule: train stops at the patience, tracks the best epoch and writes checkpoints
prediction: 'patience 0 gives one epoch and stopped_early; patience 100 runs every epoch with best_epoch at the lowest val_loss; best, epoch-0 and epoch-1 checkpoints exist'
test: cargo test -p aprender-train --lib _5686
if_fails: training overruns its patience, reports the wrong best epoch, or leaves no checkpoint to resume from
ship_blocking: false
mutation: 'change >= to > in the early-stopping check, or disable the periodic checkpoint branch; each must turn RED'

qa_gate:
id: QA-TRAIN-CLASSIFY-TRAIN-LOOP-001
name: Classify train loop gate
description: early stopping, best epoch, checkpoints and monitor hold
checks:
- classify_train_loop
pass_criteria: FALSIFY-TRAIN-CLASSIFY-TRAIN-LOOP-001 passes
falsification: Any failure fails the gate
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"census_id_set_sha256": "db20faa02774eeffec52d05d3e579c0ec7047e2f0bed655de26b7e3eeff34151",
"census_id_set_sha256": "97d2981c4166b0ad4b9557a36ed59d891f92a64092bc63c7c7241832d9c4cbae",
"relations_sha256": "811c78184eb2609244c59534f015f0be2f90923120a3027c176ad56723d0d850",
"checkable_n": 87,
"result": {
Expand Down
Loading
Loading