From 16b6e6212952706c947008182b4cdf42f5fe852f Mon Sep 17 00:00:00 2001 From: Joshua Snider Date: Tue, 13 Oct 2026 00:18:17 -0400 Subject: [PATCH 1/2] Reconcile selected PR626 Linux replay with preserved CI evidence --- docs/ci-verification.md | 10 + docs/research/current-status.md | 6 + .../selected626-linux-reconciliation/CLAIM.md | 24 ++ .../EXPECTED.json | 114 ++++++++ .../README.md | 126 +++++++++ .../RESULT.json | 54 ++++ .../SOURCE-PINS.json | 41 +++ .../evidence/artifact.zip | Bin 0 -> 35904 bytes .../evidence/artifacts.json | 1 + .../evidence/jobs.json | 1 + .../evidence/run.json | 1 + .../evidence/workflow.log.gz | Bin 0 -> 8825 bytes .../verify.py | 246 ++++++++++++++++++ 13 files changed, 624 insertions(+) create mode 100644 research/selected626-linux-reconciliation/CLAIM.md create mode 100644 research/selected626-linux-reconciliation/EXPECTED.json create mode 100644 research/selected626-linux-reconciliation/README.md create mode 100644 research/selected626-linux-reconciliation/RESULT.json create mode 100644 research/selected626-linux-reconciliation/SOURCE-PINS.json create mode 100644 research/selected626-linux-reconciliation/evidence/artifact.zip create mode 100644 research/selected626-linux-reconciliation/evidence/artifacts.json create mode 100644 research/selected626-linux-reconciliation/evidence/jobs.json create mode 100644 research/selected626-linux-reconciliation/evidence/run.json create mode 100644 research/selected626-linux-reconciliation/evidence/workflow.log.gz create mode 100644 research/selected626-linux-reconciliation/verify.py diff --git a/docs/ci-verification.md b/docs/ci-verification.md index 0a18a03b4c..7f3c012504 100644 --- a/docs/ci-verification.md +++ b/docs/ci-verification.md @@ -2,6 +2,16 @@ ## Current selected-family replay +The selected #543 + #626 composition uses `.github/workflows/frontier626.yml`. +Its [completed Linux run](https://github.com/CrocSwap/integer-mult-bounds/actions/runs/38317651752) +passed on 2026-10-13 at commit `ed49217ad6244f1d3bfe4588f122fa861849739c`. +The [preserved artifact reconciliation](../research/selected626-linux-reconciliation/README.md) +checks source equality to the sprint base, all six replay stages and exact +mathematical assembly agreement, with explicit limits for omitted payloads. +The older queued integration receipt is retained as historical evidence. + +## Historical selected-family replay through #588 + `.github/workflows/frontier588.yml` provides one complete cold check of #543 with #588 on Ubuntu 24.04 and Python 3.12. It installs NumPy, SymPy, SciPy, C++17 and Boost, checks the selected record and review evidence, rebuilds both diff --git a/docs/research/current-status.md b/docs/research/current-status.md index 630009d642..d439290771 100644 --- a/docs/research/current-status.md +++ b/docs/research/current-status.md @@ -5,6 +5,12 @@ See the [review](community-k492-review.md), [integration receipt](community-k492 [selected record](../../certificates/selected-result.json) and [PR ledger](pr-ledger.md). Public cold replay: `make frontier626-verify`. +The previously queued #626 Linux run completed successfully on 2026-10-13. +The [preserved evidence and offline checker](../../research/selected626-linux-reconciliation/README.md) +bind that run to its tested sources, six replay stages and exact assembly. +Three generated provenance digests differ from the committed assembly; the +linked reconciliation records their scope and the unavailable payloads. + The frozen round covers #618–#626. Eight scoped reviews complete; #620 remains partial pending portable research replays and validation of its solver/barrier claims. Earlier open reviews retain their ledger status. Inherited uniform, diff --git a/research/selected626-linux-reconciliation/CLAIM.md b/research/selected626-linux-reconciliation/CLAIM.md new file mode 100644 index 0000000000..f22e443070 --- /dev/null +++ b/research/selected626-linux-reconciliation/CLAIM.md @@ -0,0 +1,24 @@ +# Sprint claim + +- Track: research consolidation; OS-random assignment seed **95** (`secrets.randbelow(100)`). +- Exact base: `66849e1475c930fd7732b1a0067ffee7e1e95f60`. +- Object: the pending/queued Linux status in the selected #626 integration receipt, + for run `38317651752` at `ed49217ad6244f1d3bfe4588f122fa861849739c`. +- Method: inspect that exact completed run and its artifact; check all orchestrator + stages, log digests, exact composition and tested-source equality to the base. +- Deliverable: a preserved, offline-checkable provenance receipt with rejection + controls and a narrowly scoped current-status correction. No new kappa claim. +- Claim time: 2026-10-13 04:08 UTC. Expected finish: 04:30 UTC; final quarter + reserved for verification and handoff. +- Coordination: GitHub's pinned-issue list is empty, Discussions is disabled, + and the only open non-PR issue is #650 asking for Discussions. No reservation + issue was opened. Open PR titles and #675's body were checked for overlap. +- Candidates considered: (1) selected source-manifest completeness; + (2) #620 partial-review status versus predecessor attribution; + (3) queued-versus-completed #626 Linux evidence. Seed `95 % 3 = 2` selects + the third candidate after the overlap screen. The first two already have + explicit coverage in the selected checker/review; the third has a concrete + newly completed result to reconcile. + +Prepared by Josh Snider (`jsnider3`) with substantial OpenAI Codex assistance. +Apache-2.0. This claim is local because no sprint coordination issue exists. diff --git a/research/selected626-linux-reconciliation/EXPECTED.json b/research/selected626-linux-reconciliation/EXPECTED.json new file mode 100644 index 0000000000..d3c578df6b --- /dev/null +++ b/research/selected626-linux-reconciliation/EXPECTED.json @@ -0,0 +1,114 @@ +{ + "evidence_sha256": { + "artifact.zip": "1f1ad114e311f75d25fd6500db7ef0b8e15a4814aebc5c1edb01ec9288480355", + "artifacts.json": "d70261bfc7af4a9129ed5e2528fb039c72099110604d5ffa1ccb0832f070f379", + "jobs.json": "8b18b198ff47192f2e1bc76a79f14915440ae6e56bc5ad9f0833418e949e85c6", + "run.json": "6f963a2553e3e429da119f6b84294f90c565f592166f79cf0a63f3aa5659f626", + "workflow.log.gz": "0002ce6ad55392dcd4c4ac3f96635affff4169dfa0e5367a2d43c350fb8bb2c9" + }, + "workflow_steps": [ + "Set up job", + "Run actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1", + "Run actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97", + "Install verification dependencies", + "Check selected record and review evidence", + "Cold finite replay and exact composition binding", + "Require committed files unchanged", + "Run actions/upload-artifact@v4", + "Post Run actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97", + "Post Run actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1", + "Complete job" + ], + "complex_steps": [ + "actual-recompression-and-rebound-controls", + "admission-controls", + "bind-providers", + "ck-all-columns-native-frames", + "ck-all-phase-edges", + "ck-both-reflected-ledgers", + "ck-independent-local-controls", + "ck-normalized-wrappers", + "ck-step0-port_stage-construction", + "ck-step0-port_stage-native-audit", + "ck-step1-port_stage-construction", + "ck-step1-port_stage-native-audit", + "ck-step2-port_stage-construction", + "ck-step2-port_stage-native-audit", + "ck-step3-port_stage-construction", + "ck-step3-port_stage-native-audit", + "ck-step4-port_stage-construction", + "ck-step4-port_stage-native-audit", + "ck-step5-frame_regroup-construction", + "ck-step6-hyperplane_end-construction", + "ck-step6-hyperplane_end-controls", + "ck-step7-cold_end-construction", + "ck-step7-cold_end-controls", + "ck_504-step0-greedy_kernels-construction", + "ck_504-step0-greedy_kernels-omissions", + "ck_504-step1-frame_coalesce-construction", + "ck_504-step2-gate_move_coalesce-construction", + "conservative-and-native-exact-assembly", + "emit-controller", + "fresh-invoice", + "frozen558-full-replay", + "independent-controller-and-controls", + "jp8-all-columns-native-frames", + "jp8-all-phase-edges", + "jp8-base-k_triangle-construction", + "jp8-both-reflected-ledgers", + "jp8-independent-local-controls", + "jp8-normalized-wrappers", + "jp8-step0-port_stage-construction", + "jp8-step0-port_stage-native-audit", + "jp8-step1-port_stage-construction", + "jp8-step1-port_stage-native-audit", + "jp8-step2-port_stage-construction", + "jp8-step2-port_stage-native-audit", + "jp8-step3-port_stage-construction", + "jp8-step3-port_stage-native-audit", + "jp8-step4-frame_regroup-construction", + "jp8-step5-hyperplane_end-construction", + "jp8-step5-hyperplane_end-controls", + "jp8-step6-cold_end-construction", + "jp8-step6-cold_end-controls", + "jp8_504-step0-cold_kernel-construction", + "jp8_504-step0-cold_kernel-omissions", + "jp8_504-step1-multicut-construction", + "jp8_504-step1-multicut-omissions", + "jp8_504-step2-frozen558_scalar_audits-rank5", + "jp8_504-step2-frozen558_scalar_audits-static44", + "jp8_504-step3-joint_prefix-all-kernel-omissions", + "jp8_504-step3-joint_prefix-construction", + "jp8_504-step3-joint_prefix-independent-joint-prefix-and-coverage", + "jp8_504-step3-joint_prefix-rank5-omissions", + "k-triangle-control-empty-schedule", + "k-triangle-control-pr531-construct504", + "phase-timing-portability-controls" + ], + "assembly_digest_differences": [ + { + "path": [ + "template_sha256" + ], + "linux": "8aac9a65fe3b15889a0cdbc125bd80ab0e141578efccd25a7d338fd5ee3aae6e", + "committed": "22b41c45fdac1dcc7495311fe701f4697219654843558785ed72fae91df531b0" + }, + { + "path": [ + "input_sha256", + "owner_audit" + ], + "linux": "1de45f6b911f8ef6f9c134a1eaf1e1f03feac808e048f896c1099b121c061ce9", + "committed": "ec7bc4157e7ab1707bddf99994149c932b51365de7e742508fd182051ca57fc1" + }, + { + "path": [ + "input_sha256", + "fresh_invoice" + ], + "linux": "2219b0c60373d93f256ff255ce6de2af1605b4c61c18f45cb189f788c5bb5d96", + "committed": "367a73f744ea9b7dd6cca5fa3fda47175f560aa3d37e708c9fa1294dbd4b56eb" + } + ], + "workflow_log_sha256": "fbdc929e9bbf4ba9afb050b4c74f51322499dd388be3c861ff51a5754b39ebba" +} diff --git a/research/selected626-linux-reconciliation/README.md b/research/selected626-linux-reconciliation/README.md new file mode 100644 index 0000000000..a3a771094e --- /dev/null +++ b/research/selected626-linux-reconciliation/README.md @@ -0,0 +1,126 @@ +# Selected #626 Linux evidence reconciliation + +The published #626 integration receipt records run **38317651752** as queued. +That exact run completed successfully on **2026-10-13 at 02:10:06 UTC**. +This package preserves its artifact and checks the evidence linking that +execution to the selected #543 + #626 composition. Status: **research +consolidation / provenance verification; no new kappa**. + +The conditional result remains exactly +`51110230636731/31250000000000000 = 0.001635527380375392`. +The earlier queued receipt remains an unchanged historical snapshot. + +## Reproduce + +From a clone containing the two commits below, using Python 3.11+ and Git: + +```sh +python3 -I -B research/selected626-linux-reconciliation/verify.py +``` + +Expected: + +```text +PASS_PR626_LINUX_RECONCILIATION 6 stages, 64 substeps, 47 strict margins, 16 rejection controls +``` + +No network, third-party Python package, compilation, or supplier rerun is needed. +`--out /tmp/pr626-linux-report.json` writes the deterministic report. +The same command also works with `-O`; rejection checks use explicit exceptions. +A shallow clone must fetch the pinned commits first. This is an evidence check, +not a fresh execution of the supplier pipeline; that remains `make frontier626-verify`. + +## Exact evidence and source scope + +| Object | Pin | +|---|---| +| Sprint base | `66849e1475c930fd7732b1a0067ffee7e1e95f60` | +| Tested CI commit | `ed49217ad6244f1d3bfe4588f122fa861849739c` | +| Run, attempt | [38317651752](https://github.com/CrocSwap/integer-mult-bounds/actions/runs/38317651752), attempt 1 | +| Job | [115038013572](https://github.com/CrocSwap/integer-mult-bounds/actions/runs/38317651752/job/115038013572) | +| Artifact | `11784169747`, `frontier626-linux-python312` | +| Original ZIP SHA-256 | `1f1ad114e311f75d25fd6500db7ef0b8e15a4814aebc5c1edb01ec9288480355` | +| Selected #626 source | `660de893d27bb7abd1d5b01b1640207528a5c851` | +| Retained #543 source | `2065fe4f72a914d907f1046603f5a36f17018535` | + +`evidence/` retains the original ZIP, run metadata (selected API fields), full +job/artifact metadata, and losslessly compressed `gh run view --log` output. +`EXPECTED.json` also pins the decompressed log bytes. It pins those evidence +bytes, all workflow step names, all 64 complex receipt substeps, and the three +assembly digest differences. The ZIP hash matches GitHub's artifact metadata; +its bytes are an immutable downloaded input, not a regenerated container. + +`SOURCE-PINS.json` records Git object IDs. The checker independently queries +both commits and requires 39 identical objects for every selected package root, +all proof supplements, the complete `scripts/` tree, the workflow, Makefile, +selected record, source manifest, and selected assembly. It derives this coverage +from the selected record rather than accepting an arbitrary shortened list. +It also binds the complex receipt's package/spec and six dependency-manifest +SHA-256 values to the base's bytes. The intervening publication/ledger edits +are outside this source-equivalence claim. + +The archived run reports Ubuntu 24.04.5, image `20261004.327.1`, Python 3.12.15, +NumPy 2.5.4, SymPy 1.14.0, SciPy 1.18.1 and mpmath 1.3.0. The workflow installs +dependencies without version pins; these are observed versions from the log, +not a claim that a future installation will reproduce that environment. + +## What agrees, and what remains unavailable + +All six orchestrator stages have exit code zero and retained logs matching +their SHA-256 values: bit543, declarations, complex626, independent-owner, +helper-interface, and bindings. The complex receipt lists 64 successful +substeps; its result explicitly reports no baseline or local-output reuse. +The composition links to the exact archived complex receipt and assembly. + +Every assembly JSON field agrees with the committed certificate except these +three explicitly recorded paths: + +- `template_sha256` +- `input_sha256.owner_audit` +- `input_sha256.fresh_invoice` + +In particular, the paid profiles, moment intervals, source-engine hashes, +supplier endpoints, bootstrap data, controls, and all 47 strict outer margins +agree exactly. The checker additionally evaluates all 47 rational margins as +positive. The two source-engine/margin mutation controls update receipt links +consistently, so rejection tests mathematical-field comparison rather than +merely noticing a stale file hash. + +The workflow did **not** upload the generated template, owner audit, invoice, +all 64 substep logs, or separate `OWNER-CHECK.json`/`INTERFACE.json`. Their +execution is supported by the retained stage logs and receipts, but this package +cannot independently compare those omitted payloads or explain the three byte +digest differences. It does not assert that those differences are only gzip +metadata. The source already includes recompression controls; their recorded +success is evidence of execution, not a replacement for the missing payloads. + +Negative controls reject wrong heads/attempts, queued runs, skipped workflow +steps, detached artifacts, missing/failed replay stages, changed logs, broken +receipt links, wrong kappa, changed positive margins, altered engine hashes, +unrecorded provenance differences, and changed tested source objects. + +This is an offline consistency check of preserved GitHub evidence, not a signed +attestation or an independent mathematical reimplementation. It confirms one +completed run at a pinned source state. It does not establish other platforms, +newer PRs, optimality, or a full multiplication theorem. The selected review's +all-size compiler, common-label/mutable-basis, pooled hosting, residual, +precision/tape/recovery and analytic assumptions remain. + +## Attribution and sprint record + +Douglas Colkitt supplied the selected review, replay orchestration and CI. +Chafik Boukhalfa supplied #626's owner repair; Jeremy Kothe supplied #622/#623's +construction; eumemic supplied #543's bit supplier. GamingPuzzled's #620 lead +and the preceding supplier, recurrence and verification contributors retain +the attribution in the selected review and package notices. PR #675's +independent owner-boundary audit is distinct from this CI provenance check. + +Consolidation by Josh Snider (`jsnider3`) with substantial OpenAI Codex assistance. +Apache-2.0; this is not independent human peer review. [CLAIM.md](CLAIM.md) +records OS-random seed 95, candidates, scope and coordination checks. + +Local validation: normal and optimized isolated Python runs produced identical +reports; all 16 rejection controls passed. `make selected-record-check`, +`python3 -B scripts/verify_pr_reconciliation.py`, and `git diff --check` passed. +The selected suppliers were not rebuilt locally because this change reconciles +the already completed, preserved CI execution and changes no construction. diff --git a/research/selected626-linux-reconciliation/RESULT.json b/research/selected626-linux-reconciliation/RESULT.json new file mode 100644 index 0000000000..62051d8342 --- /dev/null +++ b/research/selected626-linux-reconciliation/RESULT.json @@ -0,0 +1,54 @@ +{ + "status": "PASS_PR626_LINUX_RECONCILIATION", + "run": 38317651752, + "ci_head": "ed49217ad6244f1d3bfe4588f122fa861849739c", + "base": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "kappa": "51110230636731/31250000000000000", + "replay_stages": 6, + "complex_substeps": 64, + "strict_assembly_margins": 47, + "assembly_digest_differences": [ + { + "path": [ + "template_sha256" + ], + "linux": "8aac9a65fe3b15889a0cdbc125bd80ab0e141578efccd25a7d338fd5ee3aae6e", + "committed": "22b41c45fdac1dcc7495311fe701f4697219654843558785ed72fae91df531b0" + }, + { + "path": [ + "input_sha256", + "owner_audit" + ], + "linux": "1de45f6b911f8ef6f9c134a1eaf1e1f03feac808e048f896c1099b121c061ce9", + "committed": "ec7bc4157e7ab1707bddf99994149c932b51365de7e742508fd182051ca57fc1" + }, + { + "path": [ + "input_sha256", + "fresh_invoice" + ], + "linux": "2219b0c60373d93f256ff255ce6de2af1605b4c61c18f45cb189f788c5bb5d96", + "committed": "367a73f744ea9b7dd6cca5fa3fda47175f560aa3d37e708c9fa1294dbd4b56eb" + } + ], + "source_objects_matched": 39, + "negative_controls": [ + "wrong_ci_head", + "wrong_attempt", + "queued_run", + "skipped_workflow_step", + "artifact_other_run", + "artifact_bad_digest", + "missing_helper_log", + "corrupt_owner_log", + "missing_helper_stage", + "failed_bit_stage", + "wrong_kappa", + "broken_receipt_link", + "changed_positive_margin", + "changed_source_engine_digest", + "changed_recorded_digest_difference", + "changed_tested_source" + ] +} diff --git a/research/selected626-linux-reconciliation/SOURCE-PINS.json b/research/selected626-linux-reconciliation/SOURCE-PINS.json new file mode 100644 index 0000000000..4cb8c2b349 --- /dev/null +++ b/research/selected626-linux-reconciliation/SOURCE-PINS.json @@ -0,0 +1,41 @@ +{ + ".github/workflows/frontier626.yml": "4e4ee39e73ffc5e4608f9734bab0a12f96510690", + "Makefile": "9d4d7808d26869d7b0d228bd92cffbc5697eb838", + "certificates/selected-result.json": "92a10096dee76479af88a897714b3818d8263141", + "docs/research/community-cold617-review.md": "ca1e7d4f971db844129b5c1bbd34373a71c3e673", + "docs/research/community-hyperplane599-review.md": "cc25932a93aa16c57f7d0255414bafe16eb71aa5", + "docs/research/community-k492-review.md": "11efcd07ae2b9d93d355c6adaf773dca70dbce91", + "research/community-k492-audit/SELECTED-SOURCE.json": "5f8725175afc095ff2da92e38af6ef4476c266da", + "research/community-k492-audit/pr626/replay/ASSEMBLY.json": "2e97b75bd8e74e8aa1b5fb83adcdc461aa07c398", + "research/complex-571-cold14-b3": "cffdf1744c6b4fc690ce5284f5ee92993d861064", + "research/complex-571-cold14-b3/PROOF-NOTE.md": "ee93419b8cf8da08bf8ff678a1d2f1a7f3011158", + "research/complex-571-cold14-b3/README.md": "a3d037b2b0135525c94f2ba7f4774424cc9931c4", + "research/complex-571-free4fc8/NOTICE.md": "78715c83efbb15294f83fb9f5436e0e091b4e554", + "research/complex-571-hpeq5/README.md": "806aafc1431738b7607213ad2b29ff49269b159e", + "research/complex-joint-prefix": "b50b62dfc181f1a395576963c5a5ce2ed8b820b5", + "research/complex-joint-prefix/proof/CONSTRUCTION.md": "b037060c014255431d7d74ba96e554b3fb1c5e18", + "research/complex-k492-owner-repair": "0bec96ae6a8c58535dab09bc6f01fa775412d91f", + "research/complex-k492-owner-repair/PROOF-NOTE-R.md": "a403cbeb77ea8b8187de6942ea5f74ca10e9c159", + "research/complex-k492-owner-repair/PROOF-NOTE.md": "0586ac5422f867035187cd55ed42c030b3d3b4b4", + "research/complex-k492-owner-repair/README.md": "58722c1a496f0c806e77c9d762eb00b0c53254f0", + "research/complex-multicold": "816cd09153701ba86aa9b70b88144f3db369dfb3", + "research/complex-multicold/proof/CONSTRUCTION.md": "1d4b6d6c17000f472108f2f62f834df5e4dee4de", + "research/complex-multicold/vendor/pr559/PROOF.md": "9adf304048b62c6db9250a611a8d4b0b60ed8276", + "research/direct-delivery504-global": "3c778f14be29a3ca3a30b478191d5b6406cc4591", + "research/e8-bit-carrier-skeleton": "0074582e358b1082d2f6f2a1d014b639284da1a7", + "research/e8-bit-r420": "d420f76f9ddfede0cd2fdfd690404e97081ce804", + "research/e8-bit-r420/README.md": "6751eba6f617292fc919e58d5a9f9f06ab037391", + "research/hyperplane-end-lean/HyperplaneEnd/Exact.lean": "1af33a206a9ba6c4826b3a1516d104e770380869", + "research/hyperplane-end-lean/PROOF.md": "a94a2ac168c088a1282ea411766bc859178620df", + "research/kernel-frame-coalescing": "528aa1f0d5c7b355269228b33594976e70499832", + "research/kernel-frame-coalescing/PROOF.md": "d23ad096f7d3028981d46d31106318d2d5ec6ad3", + "research/promoted-kernel-coalescing/vendor/larger_gain": "3fc145ff30ab32534d805a5aa69b5746614b3eb7", + "research/structural-gain": "560627015ba5bca60900e54b7c8e0c072a40f1ef", + "research/structural-gain/frontier-composition/README.md": "45614683acf25bd2f1b664bb208d59a9305f58e4", + "scripts": "b5723e7ac6d178ee38dd9d1a1eff1491f3f57f67", + "scripts/verify_cold617_interface.py": "7892bf352d94f6835e5897ea8c7c982a9b096696", + "scripts/verify_frontier588_bindings.py": "8889873f431bb41fbc9b776bec7596875179cbec", + "scripts/verify_frontier626.py": "d7a9a290b8de66da0a32ffd43b741af90305ac28", + "scripts/verify_frontier626_bindings.py": "1e51d5313015620eaa4963d906f915ca9dfb6dcc", + "scripts/verify_hpe_lean_binding.py": "d295b028edc531dfbfaa023370a9528bada35572" +} diff --git a/research/selected626-linux-reconciliation/evidence/artifact.zip b/research/selected626-linux-reconciliation/evidence/artifact.zip new file mode 100644 index 0000000000000000000000000000000000000000..cab6ed9eb29dca39b606456fec43b843924ded44 GIT binary patch literal 35904 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

p#~g%c}b!5_Qf(*6%)?*Jo86lUwTaoRX-+d6IA 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 literal 0 HcmV?d00001 diff --git a/research/selected626-linux-reconciliation/evidence/artifacts.json b/research/selected626-linux-reconciliation/evidence/artifacts.json new file mode 100644 index 0000000000..1eae176595 --- /dev/null +++ b/research/selected626-linux-reconciliation/evidence/artifacts.json @@ -0,0 +1 @@ +{"total_count":1,"artifacts":[{"id":11784169747,"node_id":"MDg6QXJ0aWZhY3QxMTc4NDE2OTc0Nw==","name":"frontier626-linux-python312","size_in_bytes":35904,"url":"https://api.github.com/repos/CrocSwap/integer-mult-bounds/actions/artifacts/11784169747","archive_download_url":"https://api.github.com/repos/CrocSwap/integer-mult-bounds/actions/artifacts/11784169747/zip","expired":false,"digest":"sha256:1f1ad114e311f75d25fd6500db7ef0b8e15a4814aebc5c1edb01ec9288480355","created_at":"2026-10-13T02:10:03Z","updated_at":"2026-10-13T02:10:03Z","expires_at":"2027-01-10T22:36:47Z","workflow_run":{"id":38317651752,"repository_id":1408136434,"head_repository_id":1408136434,"head_branch":"main","head_sha":"ed49217ad6244f1d3bfe4588f122fa861849739c"}}]} \ No newline at end of file diff --git a/research/selected626-linux-reconciliation/evidence/jobs.json b/research/selected626-linux-reconciliation/evidence/jobs.json new file mode 100644 index 0000000000..f4c6c43a08 --- /dev/null +++ b/research/selected626-linux-reconciliation/evidence/jobs.json @@ -0,0 +1 @@ +{"total_count":1,"jobs":[{"id":115038013572,"run_id":38317651752,"workflow_name":"Selected family 626 finite composition","head_branch":"main","run_url":"https://api.github.com/repos/CrocSwap/integer-mult-bounds/actions/runs/38317651752","run_attempt":1,"node_id":"CR_kwDOU-508s8AAAAayMzIhA","head_sha":"ed49217ad6244f1d3bfe4588f122fa861849739c","url":"https://api.github.com/repos/CrocSwap/integer-mult-bounds/actions/jobs/115038013572","html_url":"https://github.com/CrocSwap/integer-mult-bounds/actions/runs/38317651752/job/115038013572","status":"completed","conclusion":"success","created_at":"2026-10-12T22:36:47Z","started_at":"2026-10-13T01:59:12Z","completed_at":"2026-10-13T02:10:05Z","name":"replay","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2026-10-13T01:59:13Z","completed_at":"2026-10-13T01:59:14Z"},{"name":"Run actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1","status":"completed","conclusion":"success","number":2,"started_at":"2026-10-13T01:59:14Z","completed_at":"2026-10-13T01:59:23Z"},{"name":"Run actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97","status":"completed","conclusion":"success","number":3,"started_at":"2026-10-13T01:59:23Z","completed_at":"2026-10-13T01:59:23Z"},{"name":"Install verification dependencies","status":"completed","conclusion":"success","number":4,"started_at":"2026-10-13T01:59:23Z","completed_at":"2026-10-13T01:59:51Z"},{"name":"Check selected record and review evidence","status":"completed","conclusion":"success","number":5,"started_at":"2026-10-13T01:59:51Z","completed_at":"2026-10-13T01:59:52Z"},{"name":"Cold finite replay and exact composition binding","status":"completed","conclusion":"success","number":6,"started_at":"2026-10-13T01:59:52Z","completed_at":"2026-10-13T02:10:01Z"},{"name":"Require committed files unchanged","status":"completed","conclusion":"success","number":7,"started_at":"2026-10-13T02:10:01Z","completed_at":"2026-10-13T02:10:02Z"},{"name":"Run actions/upload-artifact@v4","status":"completed","conclusion":"success","number":8,"started_at":"2026-10-13T02:10:02Z","completed_at":"2026-10-13T02:10:03Z"},{"name":"Post Run actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97","status":"completed","conclusion":"success","number":15,"started_at":"2026-10-13T02:10:03Z","completed_at":"2026-10-13T02:10:03Z"},{"name":"Post Run actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1","status":"completed","conclusion":"success","number":16,"started_at":"2026-10-13T02:10:03Z","completed_at":"2026-10-13T02:10:03Z"},{"name":"Complete job","status":"completed","conclusion":"success","number":17,"started_at":"2026-10-13T02:10:03Z","completed_at":"2026-10-13T02:10:03Z"}],"check_run_url":"https://api.github.com/repos/CrocSwap/integer-mult-bounds/check-runs/115038013572","labels":["ubuntu-24.04"],"runner_id":1000048998,"runner_name":"GitHub Actions 1000048998","runner_group_id":0,"runner_group_name":"GitHub Actions"}]} \ No newline at end of file diff --git a/research/selected626-linux-reconciliation/evidence/run.json b/research/selected626-linux-reconciliation/evidence/run.json new file mode 100644 index 0000000000..68bb585a10 --- /dev/null +++ b/research/selected626-linux-reconciliation/evidence/run.json @@ -0,0 +1 @@ +{"conclusion":"success","created_at":"2026-10-12T22:36:47Z","event":"push","head_repository":{"full_name":"CrocSwap/integer-mult-bounds"},"head_sha":"ed49217ad6244f1d3bfe4588f122fa861849739c","html_url":"https://github.com/CrocSwap/integer-mult-bounds/actions/runs/38317651752","id":38317651752,"path":".github/workflows/frontier626.yml","repository":{"full_name":"CrocSwap/integer-mult-bounds"},"run_attempt":1,"status":"completed","updated_at":"2026-10-13T02:10:06Z"} diff --git a/research/selected626-linux-reconciliation/evidence/workflow.log.gz b/research/selected626-linux-reconciliation/evidence/workflow.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..e68c880a25dad071e2e307ff5fdadb469cae0ed2 GIT binary patch literal 8825 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 vaOU_o=%`AlOPE{D 0 for v in actual['outer'].values()), + 'Strict assembly margins changed') + require(result['bit_input_sha256'] == actual['input_sha256']['inputs/PR543-EXPECTED.json'], + 'Bit supplier binding changed') + require(complex_result['global_profile'] == actual['complex_profile'], 'Profile mismatch') + # Preserve all three differences explicitly; do not erase whole hash maps. + left, right, differences = deepcopy(actual), deepcopy(assembly), [] + for path in DIFFERING_PATHS: + a, b = left, right + for key in path[:-1]: + a, b = a[key], b[key] + av, bv = a.pop(path[-1]), b.pop(path[-1]) + differences.append({'path': list(path), 'linux': av, 'committed': bv}) + require(differences == expected['assembly_digest_differences'], + 'Recorded provenance differences changed') + require(left == right, 'Mathematical assembly fields differ') + return {'status': 'PASS_PR626_LINUX_RECONCILIATION', 'run': RUN, + 'ci_head': CI_HEAD, 'base': BASE, 'kappa': str(kappa), + 'replay_stages': len(replay_steps), 'complex_substeps': len(receipt['steps']), + 'strict_assembly_margins': len(actual['outer']), + 'assembly_digest_differences': differences} + + +def negative_controls(args): + controls = [] + + def reject(name, mutate, message): + changed = deepcopy(args) + mutate(changed) + try: + check_evidence(*changed) + except ValueError as error: + require(message in str(error), name + ': wrong rejection: ' + str(error)) + controls.append(name) + else: + raise ValueError('Invalid evidence accepted: ' + name) + + def mutate_json(data, member, mutate, rebind=False): + obj = json.loads(data[3][member]) + mutate(obj) + data[3][member] = json.dumps(obj).encode() + if rebind: + result = json.loads(data[3]['RESULT.json']) + result['complex_assembly_sha256'] = digest(data[3][member]) + receipt = json.loads(data[3]['complex/RECEIPT.json']) + receipt['artifacts']['ASSEMBLY.json'] = digest(data[3][member]) + data[3]['complex/RECEIPT.json'] = json.dumps(receipt).encode() + result['complex_receipt_sha256'] = digest(data[3]['complex/RECEIPT.json']) + data[3]['RESULT.json'] = json.dumps(result).encode() + + reject('wrong_ci_head', lambda a: a[0].update(head_sha=BASE), 'Wrong run') + reject('wrong_attempt', lambda a: a[0].update(run_attempt=2), 'Wrong run') + reject('queued_run', lambda a: a[0].update(status='queued'), 'did not complete') + reject('skipped_workflow_step', lambda a: a[1]['jobs'][0]['steps'][5].update(conclusion='skipped'), 'Failed or skipped') + reject('artifact_other_run', lambda a: a[2]['artifacts'][0]['workflow_run'].update(id=RUN + 1), 'detached') + reject('artifact_bad_digest', lambda a: a[2]['artifacts'][0].update(digest='sha256:' + '0' * 64), 'archive digest') + reject('missing_helper_log', lambda a: a[3].pop('helper-interface.log'), 'missing artifact') + reject('corrupt_owner_log', lambda a: a[3].update({'independent-owner.log': b'PASS fake'}), 'log digest') + reject('missing_helper_stage', lambda a: mutate_json(a, 'STEPS.json', lambda o: o.pop(4)), 'stage coverage') + reject('failed_bit_stage', lambda a: mutate_json(a, 'STEPS.json', lambda o: o[0].update(exit_code=1)), 'Failed replay') + reject('wrong_kappa', lambda a: mutate_json(a, 'RESULT.json', lambda o: o.update(kappa='1/100')), 'Exact selected') + reject('broken_receipt_link', lambda a: mutate_json(a, 'RESULT.json', lambda o: o.update(complex_receipt_sha256='0' * 64)), 'receipt binding') + reject('changed_positive_margin', lambda a: mutate_json(a, 'complex/ASSEMBLY.json', lambda o: o['outer'].update({next(iter(o['outer'])): '1'}), True), 'Mathematical assembly') + reject('changed_source_engine_digest', lambda a: mutate_json(a, 'complex/ASSEMBLY.json', lambda o: o['input_sha256'].update({'engines/moment.py': '0' * 64}), True), 'Mathematical assembly') + reject('changed_recorded_digest_difference', lambda a: mutate_json(a, 'complex/ASSEMBLY.json', lambda o: o.update(template_sha256='0' * 64), True), 'provenance differences') + return controls + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--out', type=Path, help='write deterministic report outside evidence inputs') + options = parser.parse_args() + expected = read_json(HERE / 'EXPECTED.json') + for name, pin in expected['evidence_sha256'].items(): + require(digest((HERE / 'evidence' / name).read_bytes()) == pin, + 'Frozen evidence bytes changed: ' + name) + require(digest(gzip.decompress((HERE / 'evidence/workflow.log.gz').read_bytes())) + == expected['workflow_log_sha256'], 'Original workflow log bytes changed') + pins = read_json(HERE / 'SOURCE-PINS.json') + selected = json.loads(git('show', BASE + ':certificates/selected-result.json')) + manifest = json.loads(git('show', BASE + ':' + selected['source_manifest'])) + paths = sorted(set(manifest['package_roots'] + list(selected['proof_supplements']) + + ['scripts', 'Makefile', '.github/workflows/frontier626.yml', + 'certificates/selected-result.json', selected['source_manifest'], + selected['certificate']])) + require(sorted(pins) == paths, 'Source comparison coverage changed') + compare_sources(source_objects(CI_HEAD, paths), source_objects(BASE, paths), pins) + assembly = json.loads(git('show', BASE + ':' + selected['certificate'])) + files = archive_members((HERE / 'evidence/artifact.zip').read_bytes()) + receipt = json.loads(files['complex/RECEIPT.json']) + package = 'research/complex-k492-owner-repair/' + require(receipt['manifest_sha256'] == digest(git('show', BASE + ':' + package + 'MANIFEST.json')) + and receipt['spec_sha256'] == digest(git('show', BASE + ':' + package + 'data/SPEC.json')), + 'Complex receipt source/spec differs from tested base') + spec = json.loads(git('show', BASE + ':' + package + 'data/SPEC.json')) + require(set(receipt['source_manifest_sha256']) == set(spec['build']['sources']), + 'Complex receipt source inventory changed') + for name, pin in receipt['source_manifest_sha256'].items(): + require(pin == digest(git('show', BASE + ':' + package + 'vendor/' + name + '/MANIFEST.json')), + 'Complex receipt dependency differs from tested base: ' + name) + args = [read_json(HERE / 'evidence' / (name + '.json')) for name in ('run', 'jobs', 'artifacts')] + args += [files, selected, assembly, expected] + report = check_evidence(*args) + report['source_objects_matched'] = len(paths) + report['negative_controls'] = negative_controls(args) + try: + compare_sources({'source': 'changed'}, {'source': 'base'}, {'source': 'base'}) + except ValueError: + report['negative_controls'].append('changed_tested_source') + else: + raise ValueError('Changed tested source accepted') + if options.out: + options.out.write_text(json.dumps(report, indent=2) + '\n') + print(report['status'], '6 stages, 64 substeps, 47 strict margins,', + str(len(report['negative_controls'])) + ' rejection controls') + + +if __name__ == '__main__': + main() From e322f2f1d9cc0f830cb3a50c6e928e0a1a32383c Mon Sep 17 00:00:00 2001 From: Joshua Snider Date: Tue, 13 Oct 2026 00:20:41 -0400 Subject: [PATCH 2/2] Record sprint result and PR handoff --- research/selected626-linux-reconciliation/CLAIM.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/research/selected626-linux-reconciliation/CLAIM.md b/research/selected626-linux-reconciliation/CLAIM.md index f22e443070..8af7324759 100644 --- a/research/selected626-linux-reconciliation/CLAIM.md +++ b/research/selected626-linux-reconciliation/CLAIM.md @@ -22,3 +22,17 @@ Prepared by Josh Snider (`jsnider3`) with substantial OpenAI Codex assistance. Apache-2.0. This claim is local because no sprint coordination issue exists. + +## Result — 2026-10-13 04:21 UTC + +Submitted [PR #695](https://github.com/CrocSwap/integer-mult-bounds/pull/695): +preserved the completed Linux evidence and checked 39 source objects, six replay +stages, 64 complex receipt substeps and 47 positive assembly margins. All 16 +rejection controls passed, including normal/optimized isolated runs from a +separate committed-files-only worktree. Selected-record and ledger checks passed. +The three differing generated provenance digests and unavailable CI payloads +are documented explicitly; no new kappa or full theorem is claimed. + +Final overlap check through #693 found no matching run reconciliation; upstream +main remained at the recorded base. No pinned sprint issue was available, so +this is the single local claim update with the result and handoff link.