From 01014cbe772ea5a59ccbc55266222433944c7368 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:59:51 -0500 Subject: [PATCH 1/4] test: retain frozen research routes across priority revisions (cherry picked from commit ba8a9e640e1983f3c29993fefa3f46e8ed03313a) --- tests/fixtures/README.md | 41 ++++++ tests/fixtures/research-routing-v7.json | 87 ++++++++++++ tests/test_research_current_assignment.py | 164 +++++++++++++++------- 3 files changed, 242 insertions(+), 50 deletions(-) create mode 100644 tests/fixtures/README.md create mode 100644 tests/fixtures/research-routing-v7.json diff --git a/tests/fixtures/README.md b/tests/fixtures/README.md new file mode 100644 index 0000000000..472a6a502f --- /dev/null +++ b/tests/fixtures/README.md @@ -0,0 +1,41 @@ +# Frozen research routing fixture + +`research-routing-v7.json` retains two exact task cards from priority revision 7: +`portable-replay` and `centre-path-sharing`. They exercise the generic-baseline +and historical-ceiling routes in `choose_current_research_task.py`. The fixture +records the source commit, path and SHA256. The card objects are unchanged. + +The source is commit `553d26d796fde9871ff2661a49ac7732e945410f`, file +`docs/research/agent-task-catalog.json`. The test places these cards in a small +catalogue with one track of weight 100. This carrier is test data, not a change +to research priorities. Current cards are checked separately from the live +catalogue. Every live card must preserve its other fields; each distinct direct +command also passes through both real CLIs. + +The CLI fixture copies the two real scripts. It creates inert reference files +for path validation and copies the current selected record for receipt fields. +It does not execute those references or verify a mathematical claim. Missing +references, sparse omissions, deleted files and staged replacements have separate +negative tests. No Git history, network request or change to the live catalogue +is needed to run the fixture. + +```sh +python3 -B -m unittest discover -s tests -p test_research_current_assignment.py -v +python3 -B -m unittest discover -s tests -p test_research_assignment.py -v +``` + +This fixture repairs the CI handoff in +[Discussion 5722](https://github.com/CrocSwap/integer-mult-bounds/discussions/5722). +The [investigation](https://github.com/CrocSwap/integer-mult-bounds/discussions/5758) +records the failure, checks and publication status. The original scripts, task +catalogue and selected frontier are unchanged. + +On base `de5ec2e7a6074068452f45b1a191b5c72832df4a`, the old suite has eight +failures and two errors. After the repair, all 12 current-assignment tests pass +under Python 3.14.7 and Python 3.12.14, including an isolated optimized run. +All 16 related assignment tests pass under Python 3.12.14. This is test coverage, +not a mathematical replay. See the investigation for hosted-plan status. + +Retain the original catalogue, routing and test authors, including Douglas +Colkitt, Ali Romman and Mihir Srivastava. New fixture and test repair: Ali Romman +with substantial OpenAI Codex assistance. No subagents. Apache-2.0. diff --git a/tests/fixtures/research-routing-v7.json b/tests/fixtures/research-routing-v7.json new file mode 100644 index 0000000000..f5d52ac21d --- /dev/null +++ b/tests/fixtures/research-routing-v7.json @@ -0,0 +1,87 @@ +{ + "source_commit": "553d26d796fde9871ff2661a49ac7732e945410f", + "source_path": "docs/research/agent-task-catalog.json", + "source_sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72", + "scope": "Two exact revision-7 cards. The test carrier is not a research allocation.", + "cards": [ + { + "id": "centre-path-sharing", + "question": "Can the 64-per-call centre path (eight rank-8 COPY/ERASE totals through the private temporary) be shared across calls or shrunk?", + "starting_points": [ + "docs/research/research-family-status.md", + "research/complex-local-word-ceiling/README.md", + "research/split-centres-global/proofs/PR386-BIT-GEOMETRY.txt", + "certificates/selected-result.json" + ], + "methods": [ + "Derive a fully charged favorable relaxation for sharing one centre path across k calls, including restoration, hosting and precision.", + "Prove a lower bound on copied information per call for the selected decoder contract." + ], + "acceptance_gate": "Show the changed centre charge and copy profile per call with every added restoration or hosting cost charged, and its ceiling via ceiling.ceiling(centre=...). A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "research/complex-local-word-ceiling/verify.py" + ], + "expected": "PASS_COMPLEX_LOCAL_WORD_CEILING", + "inspect": "Read the selected word's per-call local profile, its packing ceiling and the lever table; run levers.py for the ideal budget of the lever you target.", + "scope": "Positive control and planning budget only; this is not a new construction or full cold replay." + }, + "first_experiment": "Write the per-call centre charge and copy children for sharing across k = 2 calls, charge the sharing overhead, and screen it; stop this route if even the ideal sharing gains under 10%. Ideal budgets: free 2.80x, shared by two 1.90x (levers.py).", + "bottleneck_link": "The centre path consumes 64 of about 99.6 unpaid coordinates per call, i.e. about 64% of the raw deficit.", + "allowed_variations": [ + "One sharing pattern across a fixed number of calls.", + "One reduced copied-total contract for the existing decoder.", + "If the coverage law, template or guard changes, derive an applicable fully charged replacement bound instead of applying the incumbent ceiling outside its scope." + ], + "scope_change_triggers": [ + "Removing copies without a replacement contract for the decoder's copied totals.", + "Continuing a partial cost improvement while leaving the same unpriced consumer, restoration or central-readout obligation unresolved; refresh the family expansion decision first. Local product-retiming evidence has a narrow scope and is not a ban on changed graphs or contracts." + ], + "overlap_terms": [ + "centre path", + "copied totals", + "private temporary", + "shared centre", + "batching" + ] + }, + { + "id": "portable-replay", + "question": "Can one reproducible environment or artifact-comparison failure be repaired?", + "starting_points": [ + "research/gzip-container-reproducibility/README.md", + "docs/ci-verification.md" + ], + "methods": [ + "Reproduce one portability failure and add a minimal cross-environment fix.", + "Audit one canonical-payload comparison for omitted proof-relevant fields." + ], + "acceptance_gate": "Preserve immutable source hashes and proof-relevant content; a different compressed byte stream alone is not a mathematical mismatch.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read the gzip-container reproducibility examples and distinguish frozen source bytes from regenerated payloads.", + "scope": "Positive control / source-bound orientation only; this is not a new construction or full cold replay." + }, + "first_experiment": "Reproduce one specific mismatch or audit one canonical comparison for omitted proof-relevant fields.", + "bottleneck_link": "Portable exact checks prevent environment failures from blocking valid contributions.", + "allowed_variations": [ + "One interpreter/version mismatch or one payload field comparison." + ], + "scope_change_triggers": [ + "Removing immutable-source pins because generated compressed bytes differ." + ], + "overlap_terms": [ + "gzip container", + "reproducibility", + "canonical payload" + ] + } + ] +} diff --git a/tests/test_research_current_assignment.py b/tests/test_research_current_assignment.py index 860f6b9b9e..c524c0037f 100644 --- a/tests/test_research_current_assignment.py +++ b/tests/test_research_current_assignment.py @@ -1,9 +1,15 @@ -"""Current orientation must preserve frozen task-selection evidence.""" +"""Current orientation must preserve frozen task-selection evidence. + +Frozen fixtures and live-catalog coverage: Ali Romman with OpenAI Codex +assistance. Retain the original routing and test authors. Apache-2.0. +""" import copy +from contextlib import contextmanager import importlib.util import json from pathlib import Path import subprocess +import shutil import sys import tempfile import unittest @@ -15,16 +21,49 @@ LEGACY = current.LEGACY legacy = current.runpy.run_path(str(LEGACY)) CATALOG = json.loads((ROOT / legacy["CATALOG"]).read_text(encoding="utf-8")) +FROZEN = json.loads((ROOT / "tests/fixtures/research-routing-v7.json").read_text()) +FROZEN_CATALOG = { + "schema_version": 1, "priority_revision": 7, + "priority_log": "docs/research/routing-fixture.md", + "tracks": [{"id": "routing-fixtures", "weight": 100, "tasks": FROZEN["cards"]}], +} + + +@contextmanager +def frozen_cli_tree(): + """Run the real scripts with exact old cards and inert reference files.""" + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + required = {FROZEN_CATALOG["priority_log"], + "scripts/research_selected_baseline.py", "scripts/research_package.py", + "research/historical-complex-ceiling-replay/VERIFY.json", + "research/historical-complex-ceiling-replay/verify.py"} + for card in FROZEN["cards"]: + required.update(card["starting_points"]) + required.add(card["first_step"]["command"][-1]) + for name in required: + path = root / name + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("Inert reference for CLI validation only.\n") + for name in ("choose_research_task.py", "choose_current_research_task.py"): + shutil.copyfile(ROOT / "scripts" / name, root / "scripts" / name) + path = root / legacy["CATALOG"] + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(json.dumps(FROZEN_CATALOG)) + path = root / "certificates/selected-result.json" + path.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(ROOT / "certificates/selected-result.json", path) + yield root class CurrentResearchAssignmentTests(unittest.TestCase): - def test_every_frozen_card_and_other_fields_stay_exact(self): - before = copy.deepcopy(CATALOG) + def check_card_round_trips(self, catalog): + before = copy.deepcopy(catalog) resolved = 0 historical = 0 - for track in CATALOG["tracks"]: + for track in catalog["tracks"]: for task in track["tasks"]: - result = legacy["select"](CATALOG, "a1" * 16, task_id=task["id"]) + result = legacy["select"](catalog, "a1" * 16, task_id=task["id"]) original = copy.deepcopy(result) current.resolve_current_first_steps(result, ROOT) card = result["suggestions"][0] @@ -55,19 +94,25 @@ def test_every_frozen_card_and_other_fields_stay_exact(self): self.assertTrue(card.pop("first_step_resolution")) card["first_step"] = card.pop("catalog_first_step") self.assertEqual(result, original) - self.assertEqual(resolved, 16) - self.assertEqual(historical, 4) - self.assertEqual(CATALOG, before) + self.assertEqual(catalog, before) + return resolved, historical + + def test_frozen_routes_and_other_fields_stay_exact(self): + self.assertEqual(self.check_card_round_trips(FROZEN_CATALOG), (1, 1)) + + def test_every_live_card_and_other_fields_stay_exact(self): + self.assertTrue(CATALOG["tracks"]) + self.check_card_round_trips(CATALOG) def test_only_exact_generic_command_is_resolved(self): - result = copy.deepcopy(legacy["select"](CATALOG, "0" * 32, task_id="portable-replay")) + result = copy.deepcopy(legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="portable-replay")) result["suggestions"][0]["first_step"]["command"].append("--historical-fixture") original = copy.deepcopy(result) self.assertEqual(current.resolve_current_first_steps(result, ROOT), []) self.assertEqual(result, original) def test_missing_current_helper_does_not_change_receipt(self): - result = legacy["select"](CATALOG, "0" * 32, task_id="portable-replay") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="portable-replay") original = copy.deepcopy(result) with tempfile.TemporaryDirectory() as directory: with self.assertRaisesRegex(ValueError, "missing current first-step script"): @@ -82,7 +127,7 @@ def test_nonexact_scientific_commands_are_not_reinterpreted(self): ): with self.subTest(command=command): result = copy.deepcopy(legacy["select"]( - CATALOG, "0" * 32, task_id="centre-path-sharing")) + FROZEN_CATALOG, "0" * 32, task_id="centre-path-sharing")) result["suggestions"][0]["first_step"]["command"] = command original = copy.deepcopy(result) self.assertEqual(current.resolve_current_first_steps(result, ROOT), []) @@ -102,34 +147,52 @@ def test_missing_historical_reference_leaves_all_cards_unchanged(self): path = root / name path.parent.mkdir(parents=True, exist_ok=True) path.write_text("fixture\n") - result = legacy["select"](CATALOG, "0" * 32, task_id="portable-replay") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="portable-replay") result["suggestions"] += legacy["select"]( - CATALOG, "0" * 32, task_id="centre-path-sharing")["suggestions"] + FROZEN_CATALOG, "0" * 32, task_id="centre-path-sharing")["suggestions"] original = copy.deepcopy(result) with self.assertRaises(ValueError) as raised: current.resolve_current_first_steps(result, root) self.assertIn(absent, str(raised.exception)) self.assertEqual(result, original) - def cli(self, script, args): - return subprocess.run([sys.executable, "-B", str(script), *args], cwd=ROOT, + def cli(self, script, args, root=ROOT): + return subprocess.run([sys.executable, "-B", str(root / "scripts" / Path(script).name), *args], cwd=root, capture_output=True, text=True, encoding="utf-8") def test_cli_preserves_legacy_output_and_emits_both_commands(self): - args = ["--seed", "0" * 32, "--task", "portable-replay"] - original = self.cli(LEGACY, args) - output = self.cli(ROOT / "scripts/choose_current_research_task.py", args) - self.assertEqual(original.returncode, 0) - self.assertEqual(output.returncode, 0) - old, new = json.loads(original.stdout), json.loads(output.stdout) - card = new["suggestions"][0] - self.assertEqual(card["first_step"]["command"], - ["python3", "-B", "scripts/research_selected_baseline.py"]) - self.assertEqual(card.pop("catalog_first_step"), old["suggestions"][0]["first_step"]) - self.assertTrue(card.pop("first_step_resolution")) - card["first_step"] = old["suggestions"][0]["first_step"] - self.assertEqual(new, old) - self.assertEqual(self.cli(LEGACY, args).stdout, original.stdout) + with frozen_cli_tree() as root: + args = ["--seed", "0" * 32, "--task", "portable-replay"] + original = self.cli(LEGACY, args, root) + output = self.cli(ROOT / "scripts/choose_current_research_task.py", args, root) + self.assertEqual(original.returncode, 0) + self.assertEqual(output.returncode, 0) + old, new = json.loads(original.stdout), json.loads(output.stdout) + card = new["suggestions"][0] + self.assertEqual(card["first_step"]["command"], + ["python3", "-B", "scripts/research_selected_baseline.py"]) + self.assertEqual(card.pop("catalog_first_step"), old["suggestions"][0]["first_step"]) + self.assertTrue(card.pop("first_step_resolution")) + card["first_step"] = old["suggestions"][0]["first_step"] + self.assertEqual(new, old) + self.assertEqual(self.cli(LEGACY, args, root).stdout, original.stdout) + + def test_live_cli_preserves_each_unmapped_command(self): + checked = {tuple(card["first_step"]["command"]) for card in FROZEN["cards"]} + for track in CATALOG["tracks"]: + for task in track["tasks"]: + command = tuple(task["first_step"]["command"]) + if command in checked: + continue + checked.add(command) + with self.subTest(task=task["id"]): + args = ["--seed", "0" * 32, "--task", task["id"]] + original = self.cli(LEGACY, args) + output = self.cli(ROOT / "scripts/choose_current_research_task.py", args) + self.assertEqual(original.returncode, 0, original.stderr) + self.assertEqual(output.returncode, 0, output.stderr) + self.assertEqual(json.loads(output.stdout), json.loads(original.stdout)) + self.assertEqual(self.cli(LEGACY, args).stdout, original.stdout) def test_help_and_error_preserve_child_status_and_output(self): for args, code in ((["--help"], 0), (["--unknown-option"], 2), (["--seed", "bad"], 2)): @@ -139,23 +202,24 @@ def test_help_and_error_preserve_child_status_and_output(self): self.assertEqual((output.stdout, output.stderr), (original.stdout, original.stderr)) def test_cli_distinguishes_current_orientation_from_historical_control(self): - args = ["--seed", "0" * 32, "--task", "complex-new-helper-inventory"] - original = self.cli(LEGACY, args) - output = self.cli(ROOT / "scripts/choose_current_research_task.py", args) - self.assertEqual(original.returncode, 0, original.stderr) - self.assertEqual(output.returncode, 0, output.stderr) - old, new = json.loads(original.stdout), json.loads(output.stdout) - card = new["suggestions"][0] - self.assertEqual(card["first_step"]["command"][2], "scripts/research_selected_baseline.py") - self.assertEqual(card["first_step"]["expected"], "PASS_RESEARCH_BASELINE_BINDINGS_ONLY") - follow_up, = card.pop("follow_up_steps") - self.assertEqual(follow_up["command"][-1], "research/historical-complex-ceiling-replay") - self.assertIn("historical", follow_up["scope"].lower()) - self.assertIn("cost law", follow_up["inspect"]) - self.assertTrue(card.pop("first_step_resolution")) - card["first_step"] = card.pop("catalog_first_step") - self.assertEqual(new, old) - self.assertEqual(self.cli(LEGACY, args).stdout, original.stdout) + with frozen_cli_tree() as root: + args = ["--seed", "0" * 32, "--task", "centre-path-sharing"] + original = self.cli(LEGACY, args, root) + output = self.cli(ROOT / "scripts/choose_current_research_task.py", args, root) + self.assertEqual(original.returncode, 0, original.stderr) + self.assertEqual(output.returncode, 0, output.stderr) + old, new = json.loads(original.stdout), json.loads(output.stdout) + card = new["suggestions"][0] + self.assertEqual(card["first_step"]["command"][2], "scripts/research_selected_baseline.py") + self.assertEqual(card["first_step"]["expected"], "PASS_RESEARCH_BASELINE_BINDINGS_ONLY") + follow_up, = card.pop("follow_up_steps") + self.assertEqual(follow_up["command"][-1], "research/historical-complex-ceiling-replay") + self.assertIn("historical", follow_up["scope"].lower()) + self.assertIn("cost law", follow_up["inspect"]) + self.assertTrue(card.pop("first_step_resolution")) + card["first_step"] = card.pop("catalog_first_step") + self.assertEqual(new, old) + self.assertEqual(self.cli(LEGACY, args, root).stdout, original.stdout) def test_sparse_historical_references_require_unchanged_head_entries(self): with tempfile.TemporaryDirectory() as directory: @@ -178,12 +242,12 @@ def git(*args): git("update-index", "--skip-worktree", *omitted) for name in omitted: (root / name).unlink() - result = legacy["select"](CATALOG, "0" * 32, task_id="coverage-law-change") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="centre-path-sharing") self.assertEqual(current.resolve_current_first_steps(result, root), sorted(omitted)) # Ordinary deletion must not acquire the deliberate-sparse exemption. changed = omitted[-1] git("update-index", "--no-skip-worktree", changed) - result = legacy["select"](CATALOG, "0" * 32, task_id="coverage-law-change") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="centre-path-sharing") original = copy.deepcopy(result) with self.assertRaises(ValueError): current.resolve_current_first_steps(result, root) @@ -208,9 +272,9 @@ def git(*args): git("-c", "user.name=Fixture", "-c", "user.email=fixture@example.invalid", "-c", "core.hooksPath=/dev/null", "commit", "-qm", "helper") git("update-index", "--skip-worktree", name); path.unlink() - result = legacy["select"](CATALOG, "0" * 32, task_id="portable-replay") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="portable-replay") self.assertEqual(current.resolve_current_first_steps(result, root), [name]) git("update-index", "--no-skip-worktree", name) - result = legacy["select"](CATALOG, "0" * 32, task_id="portable-replay") + result = legacy["select"](FROZEN_CATALOG, "0" * 32, task_id="portable-replay") with self.assertRaisesRegex(ValueError, "missing current first-step script"): current.resolve_current_first_steps(result, root) From 61f76fd9b3772b1b38981ea1d5b332d73a80e73b Mon Sep 17 00:00:00 2001 From: d3lerium Date: Tue, 27 Oct 2026 15:15:50 +1100 Subject: [PATCH 2/4] Retain exact PR5831 export for independent Linux qualification --- .../inputs/PR5831.tar | Bin 0 -> 389120 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 research/p104-integer-linux-validation/inputs/PR5831.tar diff --git a/research/p104-integer-linux-validation/inputs/PR5831.tar b/research/p104-integer-linux-validation/inputs/PR5831.tar new file mode 100644 index 0000000000000000000000000000000000000000..eddee1f6a956d1c4d0008bf75fc66a0a36ad56a2 GIT binary patch literal 389120 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

=p3w{xRszftT!dQ6Fzi8BjG(od!eV+Z79e+%)X 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

2elaU5-=;q!qvW=RGH@Ya^} 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 literal 0 HcmV?d00001 From 48479b602545f27e9a35742938be2d5f2bd8459e Mon Sep 17 00:00:00 2001 From: d3lerium Date: Tue, 27 Oct 2026 15:26:07 +1100 Subject: [PATCH 3/4] Qualify complete PR5831 precision replay and retain Linux measurements --- .../BENCHMARK.json | 156 ++++++++++++++++++ .../COVERAGE.json | 29 ++++ research/p104-integer-linux-validation/NOTICE | 24 +++ .../PROOF-REVIEW.md | 35 ++++ .../p104-integer-linux-validation/README.md | 62 +++++++ .../SOURCES.json | 34 ++++ .../p104-integer-linux-validation/TASK.json | 66 ++++++++ .../p104-integer-linux-validation/VERIFY.json | 29 ++++ .../p104-integer-linux-validation/baseline.py | 9 + .../benchmark.py | 82 +++++++++ .../candidate.py | 9 + .../p104-integer-linux-validation/custody.py | 67 ++++++++ .../evidence/CUSTODY-NORMAL.txt | 1 + .../evidence/CUSTODY-OPTIMIZED.txt | 1 + .../evidence/PLAN.json | 33 ++++ .../evidence/SOURCE-BINDINGS.json | 47 ++++++ .../evidence/SOURCE-METADATA.txt | 1 + .../evidence/SOURCE-SPARSE-NOTE.txt | 1 + .../qualification-normal/SCIENTIFIC.json | 22 +++ .../qualification-normal/receipt.json | 26 +++ .../evidence/qualification-normal/stderr.txt | 0 .../evidence/qualification-normal/stdout.txt | 2 + .../evidence/qualification-normal/usage.json | 1 + .../evidence/sample-1-baseline/receipt.json | 26 +++ .../evidence/sample-1-baseline/stderr.txt | 0 .../evidence/sample-1-baseline/stdout.txt | 2 + .../evidence/sample-1-baseline/usage.json | 1 + .../evidence/sample-2-candidate/receipt.json | 26 +++ .../evidence/sample-2-candidate/stderr.txt | 0 .../evidence/sample-2-candidate/stdout.txt | 2 + .../evidence/sample-2-candidate/usage.json | 1 + .../evidence/sample-3-candidate/receipt.json | 26 +++ .../evidence/sample-3-candidate/stderr.txt | 0 .../evidence/sample-3-candidate/stdout.txt | 2 + .../evidence/sample-3-candidate/usage.json | 1 + .../evidence/sample-4-baseline/receipt.json | 26 +++ .../evidence/sample-4-baseline/stderr.txt | 0 .../evidence/sample-4-baseline/stdout.txt | 2 + .../evidence/sample-4-baseline/usage.json | 1 + .../evidence/sample-5-baseline/receipt.json | 26 +++ .../evidence/sample-5-baseline/stderr.txt | 0 .../evidence/sample-5-baseline/stdout.txt | 2 + .../evidence/sample-5-baseline/usage.json | 1 + .../evidence/sample-6-candidate/receipt.json | 26 +++ .../evidence/sample-6-candidate/stderr.txt | 0 .../evidence/sample-6-candidate/stdout.txt | 2 + .../evidence/sample-6-candidate/usage.json | 1 + .../p104-integer-linux-validation/guard.py | 119 +++++++++++++ .../p104-integer-linux-validation/replay.py | 31 ++++ .../p104-integer-linux-validation/source.py | 67 ++++++++ .../p104-integer-linux-validation/verify.py | 9 + 51 files changed, 1137 insertions(+) create mode 100644 research/p104-integer-linux-validation/BENCHMARK.json create mode 100644 research/p104-integer-linux-validation/COVERAGE.json create mode 100644 research/p104-integer-linux-validation/NOTICE create mode 100644 research/p104-integer-linux-validation/PROOF-REVIEW.md create mode 100644 research/p104-integer-linux-validation/README.md create mode 100644 research/p104-integer-linux-validation/SOURCES.json create mode 100644 research/p104-integer-linux-validation/TASK.json create mode 100644 research/p104-integer-linux-validation/VERIFY.json create mode 100644 research/p104-integer-linux-validation/baseline.py create mode 100644 research/p104-integer-linux-validation/benchmark.py create mode 100644 research/p104-integer-linux-validation/candidate.py create mode 100644 research/p104-integer-linux-validation/custody.py create mode 100644 research/p104-integer-linux-validation/evidence/CUSTODY-NORMAL.txt create mode 100644 research/p104-integer-linux-validation/evidence/CUSTODY-OPTIMIZED.txt create mode 100644 research/p104-integer-linux-validation/evidence/PLAN.json create mode 100644 research/p104-integer-linux-validation/evidence/SOURCE-BINDINGS.json create mode 100644 research/p104-integer-linux-validation/evidence/SOURCE-METADATA.txt create mode 100644 research/p104-integer-linux-validation/evidence/SOURCE-SPARSE-NOTE.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-normal/SCIENTIFIC.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-normal/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-normal/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-normal/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-1-baseline/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-1-baseline/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-1-baseline/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-2-candidate/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-2-candidate/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-2-candidate/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-3-candidate/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-3-candidate/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-3-candidate/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-4-baseline/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-4-baseline/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-4-baseline/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-5-baseline/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-5-baseline/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-5-baseline/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/sample-6-candidate/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-6-candidate/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/sample-6-candidate/usage.json create mode 100644 research/p104-integer-linux-validation/guard.py create mode 100644 research/p104-integer-linux-validation/replay.py create mode 100644 research/p104-integer-linux-validation/source.py create mode 100644 research/p104-integer-linux-validation/verify.py diff --git a/research/p104-integer-linux-validation/BENCHMARK.json b/research/p104-integer-linux-validation/BENCHMARK.json new file mode 100644 index 0000000000..cab5617551 --- /dev/null +++ b/research/p104-integer-linux-validation/BENCHMARK.json @@ -0,0 +1,156 @@ +{ + "complete_scientific_receipts_equal": true, + "fraction_saved": { + "cpu_seconds": 0.772791519434629, + "wall_seconds": 0.7729588951780773 + }, + "gate_passed": true, + "limitations": "Fresh processes on an unreserved Linux host, unflushed OS caches, three samples per arm at most; no universal speed claim. Qualification is separate.", + "limits": { + "automatic_retries": 0, + "cumulative_seconds": 900, + "per_command_seconds": 180, + "sampled_group_rss_bytes": 1073741824 + }, + "medians": { + "baseline": { + "cpu_seconds": 28.299999999999997, + "wall_seconds": 28.363380322989542 + }, + "candidate": { + "cpu_seconds": 6.43, + "wall_seconds": 6.439653205015929 + } + }, + "order": [ + "baseline", + "candidate", + "candidate", + "baseline", + "baseline", + "candidate" + ], + "runs": [ + { + "cpu_seconds": 28.669999999999998, + "internal_seconds": 28.448774, + "kernel_max_rss_kib": 101508, + "label": "sample-1-baseline", + "mode": "baseline", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 105431040, + "wall_seconds": 28.715565735998098 + }, + { + "cpu_seconds": 6.35, + "internal_seconds": 6.11869, + "kernel_max_rss_kib": 100548, + "label": "sample-2-candidate", + "mode": "candidate", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 104448000, + "wall_seconds": 6.385658305982361 + }, + { + "cpu_seconds": 6.4399999999999995, + "internal_seconds": 6.231335, + "kernel_max_rss_kib": 100472, + "label": "sample-3-candidate", + "mode": "candidate", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 104370176, + "wall_seconds": 6.488194212986855 + }, + { + "cpu_seconds": 28.299999999999997, + "internal_seconds": 28.102562, + "kernel_max_rss_kib": 101760, + "label": "sample-4-baseline", + "mode": "baseline", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 105689088, + "wall_seconds": 28.363380322989542 + }, + { + "cpu_seconds": 28.16, + "internal_seconds": 27.952935, + "kernel_max_rss_kib": 101736, + "label": "sample-5-baseline", + "mode": "baseline", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 105664512, + "wall_seconds": 28.216742029995658 + }, + { + "cpu_seconds": 6.43, + "internal_seconds": 6.203333, + "kernel_max_rss_kib": 101104, + "label": "sample-6-candidate", + "mode": "candidate", + "receipt": { + "coordinates": 799, + "events": 25984, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" + }, + "sampled_group_rss_bytes": 105017344, + "wall_seconds": 6.439653205015929 + } + ], + "speedup_wall": 4.40448878534281 +} diff --git a/research/p104-integer-linux-validation/COVERAGE.json b/research/p104-integer-linux-validation/COVERAGE.json new file mode 100644 index 0000000000..22135c6c1e --- /dev/null +++ b/research/p104-integer-linux-validation/COVERAGE.json @@ -0,0 +1,29 @@ +{ + "source_head": "7c5eb98e7439d778141d63e801e53d4cd7e1d587", + "events": 25984, + "coordinates": 799, + "all_actual_signed_witness_rows_equal": true, + "coefficient_scale_bits": 55, + "guards": { + "prefix": 26, + "public": 23, + "owned": 22 + }, + "original_rejections": 6, + "extra_dyadic_cases": 120, + "extra_dyadic_events": 4240, + "integer_rejections": [ + "nondyadic scalar", + "inexact scale division", + "nondyadic weight" + ], + "scope": "Unchanged complete original default or full --qualify, with exact authenticated export. Timing uses default baseline/candidate; full --qualify additionally compares reference, witnesses and finite corpus. No reduced source or sampled coverage.", + "new_custody_controls": [ + "official export byte", + "inner source archive", + "contract bytes", + "declared seam" + ], + "modes": "Normal, optimized and sealed qualification checked separately.", + "physical_limits": "Native gauges, reset implementation/fees, exact owned return and inherited five assumptions are not discharged." +} diff --git a/research/p104-integer-linux-validation/NOTICE b/research/p104-integer-linux-validation/NOTICE new file mode 100644 index 0000000000..d34635dcf6 --- /dev/null +++ b/research/p104-integer-linux-validation/NOTICE @@ -0,0 +1,24 @@ +Linux validation of PR5831 +========================== +Exact integer engine, proof, explicit contract adaptation and original qualification: Ali Romman, with substantial OpenAI Codex assistance. Source PR5826/5819, Adam Gall, ywz65, PR2878, Mason Hale/PR5811 and all retained P104/native/compiler lineage keep their attribution and Apache-2.0 terms. Full source archives remain unchanged. + +New Linux source/coverage review, guarded measurements, custody controls, portable reproduction and reporting: Chris R / Clear1nsight, with substantial OpenAI Codex assistance; no subagents or independent human/kernel acceptance. The guard and export-custody pattern follow PR5816/5818/5832. Apache-2.0. No new kappa or supplier admission. + +Retained research/p104-noisy-copy-reset/inputs/caller-NOTICE +Composition of accumulated native updates and two released P104 blocks. +New integration, compatibility checks and complete price: Mason Hale with substantial OpenAI Codex assistance, including separate agent checks. Apache-2.0. No independent human acceptance is claimed. + +The accumulation and retained-source lineage is credited verbatim in vendor/accumulated/NOTICE. The block constructions and composition lineage are credited verbatim in vendor/blocks/NOTICE. These notices and every retained source byte are unchanged. Ali Romman supplied PR5802 and PR5795; Joel Pulikkan/GamingPuzzled supplied the R22 mechanism; Ali Romman supplied the second block PR5796 and the provisional role92 plan. All native/helper/controller/compiler/BIT/analytic credit remains in the retained notices. + +Dugongue (@Dugongue), PR5806 at 20e7289b63d240715aa96006571ae38a46291d97, supplied a concurrent informal proof of the same three-accumulation/two-block baseline join. The fourth role92 realization is additional to that shared composition. + + +Retained research/p104-noisy-copy-reset/inputs/prior-NOTICE +Copyright 2026 Ali Romman. +Prepared with substantial OpenAI Codex assistance in research, proof, code and checks. +Licensed under Apache-2.0. + +Source files are unchanged. See source/NOTICE and ORIGINS.json. +The completed-error method credits Adam Gall, ywz65 and PR2878. +PR5802 and its retained predecessors supply the native word and compiler premises. +No independent scientific acceptance is claimed. diff --git a/research/p104-integer-linux-validation/PROOF-REVIEW.md b/research/p104-integer-linux-validation/PROOF-REVIEW.md new file mode 100644 index 0000000000..d36e7a56b3 --- /dev/null +++ b/research/p104-integer-linux-validation/PROOF-REVIEW.md @@ -0,0 +1,35 @@ +# Source-bound coverage and arithmetic review + +This review concerns Ali Romman's PR #5831 at `7c5eb98e7439d778141d63e801e53d4cd7e1d587`, package `research/p104-integer-error-replay`, consuming PR #5826 at `58f93cf41751920f3d6766a39caccc2974ce18b0`. It checks verification computations and Linux portability. It changes no precision theorem, native word, reset allowance, physical implementation, selected record or kappa. + +## Exact arithmetic mechanism + +For each row maintain a conservative denominator exponent. INIT/CLEAR reset it to zero, MOVE preserves it, SCALE by `a/2^k` adds k, and ADD/COPY take the maximum of the destination exponent and source exponent plus k. The corresponding reversed rule updates the transposed source from the destination. The maximum encountered in both traversals supplies a single positive power-of-two scale S. Unit defect injection needs exponent zero and is covered. Ignoring cancellation and numerator powers of two enlarges the bound safely. On this actual word the qualification reports 55 scale bits; this is a coefficient representation bound, not an implemented physical precision allowance. + +Induction over each traversal shows every stored coefficient lies in `(1/S) Z`. The integer backend multiplies before shifting and explicitly checks divisibility; Python's right shift of a negative exactly divisible integer therefore returns the exact quotient too. Nondyadic values and insufficient divisibility reject. There is no rounding or modular acceptance. Ideal rows, error rows and transposed columns keep their signed values. Original Fraction conversion and canonical reduced encodings remain at result/hash boundaries. + +Separate positive global dyadic scales for local operand and feedback weights give common positive units for the three score coordinates. At each ADD/COPY the update is `abs(new_signed_coefficient)-abs(old_signed_coefficient)`, including negative score changes from cancellation. It is not absolute-value propagation. Global positive rescaling preserves comparisons, ties, peak choices and Pareto ordering; each coordinate retains its own fixed unit. The original literal execution and reverse-cut oracles are supplied unchanged to the integer Engine. + +The explicit adapted contract is reconstructed from the original text using all four uniquely matching declared edits, then the obsolete original CLI is removed. The exact reconstructed bytes must equal `contract.py` before the original scientific modules load. The changes parameterize the source directory and backend; the original calculate body, complete comparisons, guards, attained fixtures and six semantic controls remain. No arithmetic implementation, import hook or mutable global is patched by this Linux validation. + +## What complete qualification checks + +Every normal fast baseline/candidate replay executes the complete 25,984-event, 799-coordinate contract and compares its entire result to the frozen original RESULT, not just the short printed summary. This includes ideal endpoint/frame/owner metadata, original local-weight hash, all final scores and signed coefficient hashes, prefix and final guards, original attaining fixtures and six rejection controls. The independent literal scalar and reverse-cut oracles remain active. + +The unchanged `--qualify` additionally executes the full Fraction baseline and compares the complete candidate result directly; compares the actual ideal metadata and every exact local weight; compares all actual signed witness dictionaries used by the source; and checks 120 varied dyadic words / 4,240 events in both directions. It retains nondyadic-scalar, nondyadic-weight and inexact-division rejection controls. Its expected qualification receipt is also compared in full. Normal and optimized execution use explicit `need`/`require` failures, not disabled assertions. + +Our wrapper authenticates the entire official 13-file PR5831 export before imports: whole tar hash, unique regular member inventory, exact source head, each file's size/hash and declared regular mode. It materializes the 14-member export privately, read-only and Git-free, checks bytes/modes and absence of links after success, then removes the temporary copy. The frozen verifier separately authenticates its unchanged nested source archive and exact declared adaptations. That nested archive is extracted into the original verifier's writable temporary scratch; this contribution does not add or claim immutable enforcement for that private scratch. The immutable archive and outer export remain fixed. + +Four small custody controls reject corruption of the official bundle, nested source archive, adapted contract and declared seam before any scientific module import. They run normally and under optimization. These complement the original six semantic and three integer controls; they are not substituted for a full replay. + +## Measurement and admission boundaries + +Linux measurements run complete baseline/candidate commands in the original B,C,C,B,B,C order, each in a fresh process. The same authenticated-export materialization is charged to both arms. Full qualification is a separate measured cost. Every raw output and resource receipt is retained; only the volatile runtime field differs between complete baseline/candidate outputs. The complete scientific receipt must match exactly. No persistent state/PASS cache, sampling, omitted event or changed expected result is used. + +The source's 180-second command limit is preserved. The local round also applies 900 seconds cumulative full scientific wall time, 1 GiB sampled process-group RSS, bounded output and no retries, with full runs serialized under one lock. Sampling can miss short peaks; kernel peak RSS is reported separately. The host is not reserved, OS caches are not flushed, and three observations per arm do not establish a universal performance factor. Original macOS timings and our Linux timings are distinct observations. + +The five framework assumptions, native unitary gauges, physical reset implementation/fees, exact owned zero return, compiler and analytic admission retain their status. The frozen sufficient guards are prefix 26 / public 23 / owned 22; they are not optimal physical precision claims. Same-agent assisted review and different-host replay do not constitute independent human or proof-kernel acceptance. Source custody, local qualification, hosted CI, publication, merging and mathematical admission remain separate. + +## Attribution + +Ali Romman supplied the exact integer backend, dyadic scale proof, explicit parameter adaptation, original qualification and macOS measurements. Preserve PR5826/5819, Adam Gall, ywz65, PR2878, Mason Hale/PR5811 and the entire retained P104/native/compiler/precision lineage and original notices. New Linux review, custody controls, guard adaptation, measurements and reporting: Chris R / Clear1nsight, with substantial OpenAI Codex assistance; no subagents. Guard/custody mechanics follow PR5816/5818/5832. Apache-2.0. diff --git a/research/p104-integer-linux-validation/README.md b/research/p104-integer-linux-validation/README.md new file mode 100644 index 0000000000..ec9da83b75 --- /dev/null +++ b/research/p104-integer-linux-validation/README.md @@ -0,0 +1,62 @@ +# Linux validation of the complete PR #5831 precision replay + +This focused audit independently reproduces Ali Romman's [PR #5831](https://github.com/CrocSwap/integer-mult-bounds/pull/5831) exact-integer precision replay on Linux, retaining the complete original package and nested source archive unchanged. It supplies a source/coverage review, bounded wall/CPU/memory measurements, corruption controls and portable full qualification. It adds no backend optimization or new kappa. + +The predeclared success and stop criteria require exact complete results and witness coverage, all original controls, normal/optimized and sealed read-only Git-free qualification, and at least 15% lower median wall **and CPU** time for a useful Linux speed claim. A failing source, receipt, control, stderr or resource condition stops without retry. The 180-second source command limit is preserved, with an additional 900-second cumulative local scientific budget, 1 GiB sampled process-group RSS and bounded output. All full runs are serialized. + +## Linux measurements + +One unreserved Ubuntu 24.04.5 LTS / Linux x86_64 host, CPython 3.12.3, Intel Core i7-4790. Six serial fresh processes in the original B,C,C,B,B,C order; all samples retained: + +| Complete original precision replay | Wall median | CPU median | Wall range | +| --- | ---: | ---: | ---: | +| Fraction reference | 28.363 s | 28.300 s | 28.217–28.716 s | +| Exact integer candidate | 6.440 s | 6.430 s | 6.386–6.488 s | +| Reduction | **77.30%** | **77.28%** | **4.40x wall speedup** | + +Kernel peak RSS maxima are 99.38 MiB for the reference and 98.73 MiB for the candidate; sampled process-group peaks are recorded separately. Each fast replay executes every original event/coordinate, complete expected result and all six original controls. Full reference/witness/finite qualification is a separate cost: the first Linux normal run takes **60.47 seconds**, about 101.14 MiB kernel peak RSS. Its extra cost is not folded into the 4.40x production-replay claim. The author's 5.60x macOS observation and this 4.40x Linux observation are distinct; no universal factor follows. + +## Coverage before measurement + +The original qualification passes first: all 25,984 events / 799 coordinates, complete original/candidate result, actual signed witness dictionaries, ideal metadata and local weights, final signed coefficient and score checks, guards, literal attaining fixtures, six original controls, 120 extra dyadic programs / 4,240 events and three integer rejection controls. It reports scale exponent 55 and the unchanged sufficient guards 26/23/22 (prefix/public/owned). Four additional custody controls reject whole-export, nested-archive, contract and declared-seam corruption before scientific imports, normally and under optimization. + +[PROOF-REVIEW.md](PROOF-REVIEW.md) maps the exact arithmetic and every retained check. [COVERAGE.json](COVERAGE.json) records the source-bound scope. Measurement and qualification receipts are reported separately in BENCHMARK.json, VALIDATION.json and evidence/; a fast candidate replay is not mislabeled as full reference qualification. + +## Reproduce a fresh complete qualification + +Python 3.12, standard library: + +```sh +python3 -B scripts/research_package.py --package research/p104-integer-linux-validation +``` + +This runs source-custody controls and then the **unchanged full `--qualify` scientific computation**, including the Fraction reference and all extra witness/finite checks. It is not a recorded-evidence-only check. Expect `PASS_PRECISION_LINUX_SOURCE_CONTROLS` and `PASS_P104_INTEGER_ERROR_REPLAY` with the complete qualification receipt. The original 180-second timeout is retained. Original normal Linux qualification took about one minute here; timings depend on host/load. + +The official complete 13-file export of PR #5831 at `7c5eb98e7439d778141d63e801e53d4cd7e1d587` is retained as `inputs/PR5831.tar`, SHA256 `6ad8d8e0463e8e6ea8d503610c3f9ec38108f16092bc479bc1cb6f48683f6ab6`. Its nested PR #5826 source `58f93cf41751920f3d6766a39caccc2974ce18b0` remains unchanged. No network, Git, third-party dependency, unmerged provenance-object cache or edited frozen input is required at runtime. All outer export bytes/modes are checked after success. The original verifier's nested temporary scratch retains its original writable behavior; this audit does not claim otherwise. + +To repeat the complete six-process comparison on Linux with `/usr/bin/python3.12`, GNU `/usr/bin/time` and `/proc`, first pass full qualification at the same source, then choose a fresh work directory: + +```sh +python3 -B research/p104-integer-linux-validation/benchmark.py pair --workdir /tmp/precision-linux-fresh +python3 -B research/p104-integer-linux-validation/benchmark.py remaining --workdir /tmp/precision-linux-fresh +``` + +The first pair must preserve the complete scientific receipt and save at least 15% wall and CPU before the remaining four original-order runs are allowed. Existing run directories are never overwritten; every sample is kept. These commands measure complete baseline/candidate production replays, with identical outer authentication/extraction charged to both arms. They do not time the extra full-reference qualification as the fast path. The Linux development round's qualification and all six samples share the same cumulative guard; reproduction's standalone qualification and new benchmark directory have separately stated costs. + +## Source and overlap scope + +Canonical main is `de5ec2e7a6074068452f45b1a191b5c72832df4a`, priority revision 8. The donor assigned Linux validation directly; the task card is refined accordingly. [The source claim](https://github.com/CrocSwap/integer-mult-bounds/pull/5831#issuecomment-6433618407) precedes execution. Targeted PR/body and source-comment checks found no competing Linux follow-up. The author's [released handoff](https://github.com/CrocSwap/integer-mult-bounds/discussions/2750#discussioncomment-19209571) explicitly requests Linux reproduction; the neighbouring rounded-gauge transport claim is a different word and scope. Coverage is bounded and does not establish exhaustive novelty or unpublished-work availability. + +The initial shallow checkout lacked several declared provenance objects; exact commits/blobs were fetched and all seven declared source hashes and unchanged original metadata checks passed before execution. No frozen manifest was weakened. Full-history preflight remains unavailable; final committed bytes/modes, own-input immediate ancestry and official export/input integrity are checked separately. + +The branch retains the same exact [PR #5761](https://github.com/CrocSwap/integer-mult-bounds/pull/5761) test-only dependency used by the source, preserving Ali Romman's authorship and cherry-pick reference. It changes no scientific artifact. This package does not transfer the integer backend to a new word or silently broaden the source operation/scale contract. + +## Open next questions + +- Does the complete-check gain hold on another Linux host? Authenticate the same source and repeat full qualification plus all six bounded samples. Three samples per arm on an unreserved host are not a universal factor. +- Does a changed word satisfy the dyadic representation contract? Prove its complete source-specific scale and operations before finite feasibility or any full implementation. This validation does not admit successors. +- Does the physical caller meet the retained gauge/reset/owned-return allowances? That is separate research, outside this verification-only task. No kappa work, peer thread, feed, worker or automation is resumed here. + +## Credit and limits + +Ali Romman supplied the integer backend, exact-scale proof, original adaptation, qualification and macOS measurements. Preserve [PR #5826](https://github.com/CrocSwap/integer-mult-bounds/pull/5826), [PR #5819](https://github.com/CrocSwap/integer-mult-bounds/pull/5819), Adam Gall, ywz65, [PR #2878](https://github.com/CrocSwap/integer-mult-bounds/pull/2878), Mason Hale/[PR #5811](https://github.com/CrocSwap/integer-mult-bounds/pull/5811) and all native/compiler/precision notices in the unchanged archive and NOTICE. New Linux validation for Chris R / Clear1nsight with substantial OpenAI Codex assistance; no subagents. Guard/custody mechanics follow PR5816/5818/5832. Apache-2.0. Same-agent assisted review and hosted CI are not independent human/kernel acceptance. Five framework assumptions, physical reset/owned-return and selected status remain unchanged; kappa research stays paused. diff --git a/research/p104-integer-linux-validation/SOURCES.json b/research/p104-integer-linux-validation/SOURCES.json new file mode 100644 index 0000000000..163a69d203 --- /dev/null +++ b/research/p104-integer-linux-validation/SOURCES.json @@ -0,0 +1,34 @@ +{ + "schema_version": 1, + "base_commit": "de5ec2e7a6074068452f45b1a191b5c72832df4a", + "files": [ + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81" + }, + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "581f8d87008354eb5b869f7ed9de1317ad837ce8", + "sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + }, + { + "path": "research/p104-integer-linux-validation/inputs/PR5831.tar", + "usage": "input", + "git_blob": "eddee1f6a956d1c4d0008bf75fc66a0a36ad56a2", + "sha256": "6ad8d8e0463e8e6ea8d503610c3f9ec38108f16092bc479bc1cb6f48683f6ab6", + "pin": "head:61f76fd9b3772b1b38981ea1d5b332d73a80e73b:research/p104-integer-linux-validation/inputs/PR5831.tar" + } + ], + "external_origin": { + "pr": 5831, + "head": "7c5eb98e7439d778141d63e801e53d4cd7e1d587", + "package": "research/p104-integer-error-replay", + "files": 13, + "source_pr": 5826, + "source_head": "58f93cf41751920f3d6766a39caccc2974ce18b0", + "note": "Complete official package export retained unchanged. Original pending provenance objects are authenticated at intake but not runtime dependencies." + } +} diff --git a/research/p104-integer-linux-validation/TASK.json b/research/p104-integer-linux-validation/TASK.json new file mode 100644 index 0000000000..dee35408cc --- /dev/null +++ b/research/p104-integer-linux-validation/TASK.json @@ -0,0 +1,66 @@ +{ + "schema_version": 1, + "task_id": "replay-runtime", + "original_card": { + "id": "replay-runtime", + "question": "Can one measured replay bottleneck be sped up without dropping coverage?", + "starting_points": [ + "scripts/run_isolated_tests.py", + "scripts/verify_replay_coverage.py", + "certificates/selected-result.json" + ], + "methods": [ + "Profile one isolated replay and optimize the measured bottleneck.", + "Design source-bound reuse with explicit dependency invalidation and negative controls." + ], + "acceptance_gate": "Report before/after wall time on the same fixture, retained checks and invalidation behavior.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Resolve the current selected review, separate complex/ordinary BIT/admitted BIT/outer budgets, and compare the card against live handoffs before starting. Historical ceilings require exact source/model equivalence.", + "scope": "Source-binding orientation only; not a scientific replay or all-size proof. Materialize selected inputs if this checkout is sparse." + }, + "first_experiment": "Measure one unchanged fixture, preserve check coverage, and test one optimization with invalidation controls.", + "bottleneck_link": "Faster trustworthy replays increase review throughput and let mechanism candidates be checked sooner.", + "allowed_variations": [ + "Profile one stage or design one source-bound cache boundary." + ], + "scope_change_triggers": [ + "Skipping coverage or comparing different fixtures to claim speedup." + ], + "overlap_terms": [ + "replay runtime", + "cache invalidation", + "isolated tests" + ] + }, + "scope_status": "refined", + "scope_change_reason": "Explicit donor request to independently reproduce the existing exact-integer precision backend on Linux, preserving every original check and reporting qualification cost separately; no backend or mathematical construction change.", + "actual_scope": "PR5831/frozen-7c5eb98/Linux-complete-precision-qualification-and-six-process-runtime", + "bottleneck_link": "Faster trustworthy replays increase review throughput and let mechanism candidates be checked sooner.", + "stop_rule": "Stop without retry on source/inventory/mode drift, receipt/witness/control mismatch, stderr or resource failure. Original 180-second per-command limit, 1 GiB sampled process-group RSS, 900 seconds cumulative full local science. Require >=15% lower first-pair wall and CPU before timing expansion; report medians of all original-order six runs. No original timeout/source/expected result repair.", + "time_budget_minutes": 90, + "outcome": "completed", + "evidence": "PROOF-REVIEW.md, COVERAGE.json, BENCHMARK.json, VALIDATION.json and evidence/ retain exact sources, all Linux measurements, full scientific receipts, custody controls and bounded normal/optimized/export qualification.", + "author": "Chris R / Clear1nsight", + "ai_assistance": "Substantial OpenAI Codex assistance for source review, execution, tooling and report; no subagents, independent human or proof-kernel acceptance.", + "open_questions": [ + { + "question": "Does a second Linux host reproduce the same complete-check gain?", + "why_it_matters": "One unreserved host and three observations per arm do not establish a universal speedup.", + "first_step": "Authenticate the same head, run full qualification and retain all six B,C,C,B,B,C samples under bounded caps.", + "blocked_by": "A separately authorized host measurement, not a kappa experiment." + }, + { + "question": "Can a changed word use this dyadic backend?", + "why_it_matters": "Coverage and common-scale hypotheses are source-specific.", + "first_step": "Authenticate the changed word and prove the scale/operation contract before a bounded finite qualification.", + "blocked_by": "New source, ownership and coverage gates; no automatic transfer from this audit." + } + ], + "base_commit": "de5ec2e7a6074068452f45b1a191b5c72832df4a" +} diff --git a/research/p104-integer-linux-validation/VERIFY.json b/research/p104-integer-linux-validation/VERIFY.json new file mode 100644 index 0000000000..aa067771e1 --- /dev/null +++ b/research/p104-integer-linux-validation/VERIFY.json @@ -0,0 +1,29 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-integer-linux-validation/inputs/PR5831.tar" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/custody.py" + ], + "timeout_seconds": 30, + "checks": "Four source-bound actual corruptions reject before scientific imports: whole official bundle, nested source archive, adapted contract, declared seam." + }, + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 180, + "checks": "Fresh complete unchanged PR5831 qualification: all 25984 events/799 coordinates, full reference/candidate results and signed witnesses/weights, 120 dyadic words/4240 events, all six original plus three integer controls; immutable outer export checked." + } + ] +} diff --git a/research/p104-integer-linux-validation/baseline.py b/research/p104-integer-linux-validation/baseline.py new file mode 100644 index 0000000000..a647f0e669 --- /dev/null +++ b/research/p104-integer-linux-validation/baseline.py @@ -0,0 +1,9 @@ +"""Complete unchanged PR5831 baseline command.""" +import sys +from replay import main +from source import require + +if __name__ == '__main__': + require(len(sys.argv) == 1, 'No wrapper arguments') + sys.argv = [sys.argv[0], '--baseline'] + main() diff --git a/research/p104-integer-linux-validation/benchmark.py b/research/p104-integer-linux-validation/benchmark.py new file mode 100644 index 0000000000..b876f096f2 --- /dev/null +++ b/research/p104-integer-linux-validation/benchmark.py @@ -0,0 +1,82 @@ +"""Bounded original B,C,C,B,B,C order, retaining every Linux sample.""" +import argparse +import fcntl +from hashlib import sha256 +import json +from pathlib import Path +import statistics + +import guard +from replay import EXPECTED +from source import require + +PACKAGE = Path(__file__).resolve().parent +ORDER = ('baseline', 'candidate', 'candidate', 'baseline', 'baseline', 'candidate') + + +def scientific(folder, label, mode): + raw = (folder / 'runs' / label / 'stdout.txt').read_bytes() + lines = raw.decode().splitlines() + require(len(lines) == 2 and lines[0] == 'PASS_P104_INTEGER_ERROR_REPLAY', 'Complete original output') + data = json.loads(lines[1]) + require(set(data) == {'mode', 'receipt', 'seconds'} and data['mode'] == mode, + 'Complete original output schema and mode') + require(data['receipt'] == EXPECTED, 'Every original scientific receipt field') + return data + + +def summary(folder, labels, threshold=True): + rows = [] + for number, mode in labels: + label = f'sample-{number}-{mode}' + receipt = json.loads((folder / 'runs' / label / 'receipt.json').read_bytes()) + require(receipt['status'] == 'PASS', 'Every measurement passed') + data = scientific(folder, label, mode) + rows.append({'label': label, 'mode': mode, 'wall_seconds': receipt['wall_seconds'], + 'cpu_seconds': receipt['usage']['user_seconds'] + receipt['usage']['system_seconds'], + 'kernel_max_rss_kib': receipt['usage']['kernel_max_rss_kib'], + 'sampled_group_rss_bytes': receipt['sampled_process_group_rss_bytes'], + 'internal_seconds': data['seconds'], 'receipt': data['receipt']}) + medians = {mode: {kind: statistics.median(r[kind] for r in rows if r['mode'] == mode) + for kind in ('wall_seconds', 'cpu_seconds')} for mode in ('baseline', 'candidate')} + saving = {kind: 1 - medians['candidate'][kind] / medians['baseline'][kind] + for kind in ('wall_seconds', 'cpu_seconds')} + result = {'order': [r['mode'] for r in rows], 'runs': rows, 'medians': medians, + 'fraction_saved': saving, 'speedup_wall': medians['baseline']['wall_seconds'] / + medians['candidate']['wall_seconds'], 'complete_scientific_receipts_equal': True, + 'gate_passed': min(saving.values()) >= .15, + 'limits': {'per_command_seconds': 180, 'cumulative_seconds': 900, + 'sampled_group_rss_bytes': 1073741824, 'automatic_retries': 0}, + 'limitations': 'Fresh processes on an unreserved Linux host, unflushed OS caches, three samples per arm at most; no universal speed claim. Qualification is separate.'} + target = 'FIRST-PAIR.json' if len(rows) == 2 else 'BENCHMARK.json' + (folder / target).write_text(json.dumps(result, indent=2, sort_keys=True) + '\n') + if threshold: + require(result['gate_passed'], 'At least 15 percent wall and CPU saving before expansion') + print('PASS_PRECISION_LINUX_COMPARISON', json.dumps(result, sort_keys=True), flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('phase', choices=('pair', 'remaining')) + parser.add_argument('--workdir', type=Path, required=True) + args = parser.parse_args() + folder = args.workdir.resolve() + if args.phase == 'pair': + folder.mkdir(parents=True) + require(folder.is_dir(), 'Existing comparison directory') + with (folder / 'execution.lock').open('a') as lock: + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + guard.HERE = folder + if args.phase == 'remaining': + first = json.loads((folder / 'FIRST-PAIR.json').read_bytes()) + require(first['gate_passed'] and first['complete_scientific_receipts_equal'], 'First pair gate') + selected = list(enumerate(ORDER, 1))[:2] if args.phase == 'pair' else list(enumerate(ORDER, 1))[2:] + for number, mode in selected: + label = f'sample-{number}-{mode}' + guard.run(label, mode + '.py') + scientific(folder, label, mode) + summary(folder, list(enumerate(ORDER, 1))[:2] if args.phase == 'pair' else list(enumerate(ORDER, 1))) + + +if __name__ == '__main__': + main() diff --git a/research/p104-integer-linux-validation/candidate.py b/research/p104-integer-linux-validation/candidate.py new file mode 100644 index 0000000000..c0c1376610 --- /dev/null +++ b/research/p104-integer-linux-validation/candidate.py @@ -0,0 +1,9 @@ +"""Complete unchanged PR5831 candidate command.""" +import sys +from replay import main +from source import require + +if __name__ == '__main__': + require(len(sys.argv) == 1, 'No wrapper arguments') + sys.argv = [sys.argv[0], '--candidate'] + main() diff --git a/research/p104-integer-linux-validation/custody.py b/research/p104-integer-linux-validation/custody.py new file mode 100644 index 0000000000..f1fd37b644 --- /dev/null +++ b/research/p104-integer-linux-validation/custody.py @@ -0,0 +1,67 @@ +"""Reject corrupt source boundaries before scientific imports or execution.""" +import importlib.util +import json +from pathlib import Path +import shutil +import sys +import tempfile + +from source import baseline, payload, require, HERE + + +def reject(action, expected): + try: + action() + except ValueError as error: + require(str(error) == expected, 'Exact custody rejection predicate') + else: + raise ValueError('Corrupt source accepted') + + +def main(): + require(not sys.argv[1:], 'No custody arguments') + science = {'frozen_contract', 'frozen_precision', 'explicit_contract', 'integer_backend'} + before = set(sys.modules) & science + results = {} + with tempfile.TemporaryDirectory(prefix='precision-custody-') as temporary: + temporary = Path(temporary) + raw = bytearray((HERE / 'inputs/PR5831.tar').read_bytes()) + raw[len(raw) // 2] ^= 1 + damaged = temporary / 'damaged.tar' + damaged.write_bytes(raw) + reject(lambda: payload(damaged), 'Exact PR5831 bundle') + results['official_export_byte'] = 'Exact PR5831 bundle' + with baseline() as package: + for label in ('inner_archive', 'contract', 'declared_edit'): + root = temporary / label + copy = root / 'research/p104-integer-error-replay' + shutil.copytree(package, copy) + for path in [root, *root.rglob('*')]: + path.chmod(0o755 if path.is_dir() else 0o644) + if label == 'inner_archive': + file = copy / 'inputs/source.tar' + raw = bytearray(file.read_bytes()); raw[len(raw) // 2] ^= 1 + file.write_bytes(raw) + expected = 'source hash' + elif label == 'contract': + file = copy / 'contract.py' + file.write_bytes(file.read_bytes() + b'\n# changed contract\n') + expected = 'declared contract edits' + else: + file = copy / 'CONTRACT-EDITS.json' + edits = json.loads(file.read_bytes()); edits[0][0] = 'missing_backend_seam' + file.write_text(json.dumps(edits)) + expected = 'unique backend seam' + spec = importlib.util.spec_from_file_location('custody_entry_' + label, copy / 'verify.py') + module = importlib.util.module_from_spec(spec); spec.loader.exec_module(module) + def enter(): + with module.source(): + raise ValueError('Unexpected scientific admission') + reject(enter, expected) + require(set(sys.modules) & science == before, 'No scientific imports before rejection') + results[label] = expected + print('PASS_PRECISION_LINUX_SOURCE_CONTROLS', json.dumps(results, sort_keys=True)) + + +if __name__ == '__main__': + main() diff --git a/research/p104-integer-linux-validation/evidence/CUSTODY-NORMAL.txt b/research/p104-integer-linux-validation/evidence/CUSTODY-NORMAL.txt new file mode 100644 index 0000000000..97e935f817 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/CUSTODY-NORMAL.txt @@ -0,0 +1 @@ +PASS_PRECISION_LINUX_SOURCE_CONTROLS {"contract": "declared contract edits", "declared_edit": "unique backend seam", "inner_archive": "source hash", "official_export_byte": "Exact PR5831 bundle"} diff --git a/research/p104-integer-linux-validation/evidence/CUSTODY-OPTIMIZED.txt b/research/p104-integer-linux-validation/evidence/CUSTODY-OPTIMIZED.txt new file mode 100644 index 0000000000..97e935f817 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/CUSTODY-OPTIMIZED.txt @@ -0,0 +1 @@ +PASS_PRECISION_LINUX_SOURCE_CONTROLS {"contract": "declared contract edits", "declared_edit": "unique backend seam", "inner_archive": "source hash", "official_export_byte": "Exact PR5831 bundle"} diff --git a/research/p104-integer-linux-validation/evidence/PLAN.json b/research/p104-integer-linux-validation/evidence/PLAN.json new file mode 100644 index 0000000000..349f1bb266 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/PLAN.json @@ -0,0 +1,33 @@ +{ + "task": "Linux validation of exact PR5831, preserving full precision qualification", + "source_head": "7c5eb98e7439d778141d63e801e53d4cd7e1d587", + "source_package": "research/p104-integer-error-replay", + "source_export_sha256": "6ad8d8e0463e8e6ea8d503610c3f9ec38108f16092bc479bc1cb6f48683f6ab6", + "main": "de5ec2e7a6074068452f45b1a191b5c72832df4a", + "kappa_research": "PAUSED", + "workers": 0, + "success": [ + "All 25984 original events and 799 coordinates, complete source result, final signed coefficients, guards, attaining fixtures, six original rejection controls preserved.", + "Full qualification compares all actual signed witness rows, ideal metadata/local weights, original reference result, 120 dyadic programs / 4240 events, three integer rejection controls.", + "Normal, optimized and sealed read-only Git-free full qualification agree on complete scientific receipt; exported bytes/modes and immutable sources unchanged.", + "A useful Linux performance reproduction requires >=15% lower median wall AND CPU time over three baseline and three candidate fresh processes in the original B,C,C,B,B,C order. Report raw runs and RSS. Qualification is a separate cost.", + "Publish useful exact scoped evidence, including a non-speed result if correct coverage survives but performance does not. No kappa claim." + ], + "stages": [ + "Authenticate head, all declared pins, official export, source proof/edits and bounded overlap; post public claim.", + "Run source-custody controls then one complete guarded normal qualification before performance expansion.", + "One first pair; stop measurement expansion if either wall or CPU saving <15%, retaining the result.", + "If first pair passes, complete remaining four original-order measurements with no retries; report all samples and medians.", + "Run full optimized qualification and sealed export qualification once, preserving complete coverage; publish focused package and seven-field handoffs; exact-head hosted CI last." + ], + "stop": [ + "Any source/head/hash/inventory/mode drift, output/receipt/witness/control discrepancy, unexpected stderr or guard termination: stop without automatic retry.", + "Source --qualify must finish within its original 180-second manifest limit. Each measured command capped at 180 seconds, 1 GiB sampled aggregate process-group RSS, 2 MiB output; all local full scientific runs cumulative <=900 seconds; serialize full runs with one lock.", + "No timeout increase, sampling, omitted events or skipped reference checks, source/expected-result repair, source/backend optimization, new kappa research or automatic successor task." + ], + "limitations": [ + "Same-agent assisted code review and different-host replay are not independent human or formal-kernel acceptance.", + "Local host not reserved, OS caches unflushed; fresh processes do not mean cold OS cache.", + "Original source extracts nested scratch writable; frozen archive and outer official package export are independently authenticated and unchanged, without claiming new immutable nested scratch enforcement." + ] +} diff --git a/research/p104-integer-linux-validation/evidence/SOURCE-BINDINGS.json b/research/p104-integer-linux-validation/evidence/SOURCE-BINDINGS.json new file mode 100644 index 0000000000..d4067107f7 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/SOURCE-BINDINGS.json @@ -0,0 +1,47 @@ +{ + "files": [ + { + "path": "certificates/selected-result.json", + "pin": "de5ec2e7a6074068452f45b1a191b5c72832df4a:certificates/selected-result.json", + "sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5", + "bytes": 6419 + }, + { + "path": "docs/research/agent-task-catalog.json", + "pin": "de5ec2e7a6074068452f45b1a191b5c72832df4a:docs/research/agent-task-catalog.json", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81", + "bytes": 82822 + }, + { + "path": "research/p104-integer-error-replay/inputs/source.tar", + "pin": "55394bd623bc9db68ac5d49999481185ba9b82dd:research/p104-integer-error-replay/inputs/source.tar", + "sha256": "f8252a90dc504ce8a77d781e558691fe8d21014b0f3f720d8dfd5274b5e8aadc", + "bytes": 327680 + }, + { + "path": "research/p104-noisy-copy-reset/SOURCES.json", + "pin": "58f93cf41751920f3d6766a39caccc2974ce18b0:research/p104-noisy-copy-reset/SOURCES.json", + "sha256": "da233c5ea2b28a58d6026cebbd266ea373716afd11b2013f655265d536b8b787", + "bytes": 5023 + }, + { + "path": "research/p104-noisy-copy-reset/VERIFY.json", + "pin": "58f93cf41751920f3d6766a39caccc2974ce18b0:research/p104-noisy-copy-reset/VERIFY.json", + "sha256": "b84a00c78d77b82e87050516ef19199fc30a5bae50846f588e09dd5f2a5ed52d", + "bytes": 720 + }, + { + "path": "research/p104-noisy-copy-reset/RESULT.json", + "pin": "58f93cf41751920f3d6766a39caccc2974ce18b0:research/p104-noisy-copy-reset/RESULT.json", + "sha256": "ac7f1922f777667f51bf666538eb36bdca97f55cb0313210c60ffe29fef77cd2", + "bytes": 121740 + }, + { + "path": "research/p104-noisy-copy-reset/verify.py", + "pin": "58f93cf41751920f3d6766a39caccc2974ce18b0:research/p104-noisy-copy-reset/verify.py", + "sha256": "4896c85513f0e15e96fdcb9df9245055bf252dc6be99be5e2a037420a795bb34", + "bytes": 7047 + } + ], + "initial_sparse_check": "Unavailable provenance commit/blob objects were fetched before claiming metadata success; no scientific execution or source repair occurred." +} diff --git a/research/p104-integer-linux-validation/evidence/SOURCE-METADATA.txt b/research/p104-integer-linux-validation/evidence/SOURCE-METADATA.txt new file mode 100644 index 0000000000..a6c9fb298a --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/SOURCE-METADATA.txt @@ -0,0 +1 @@ +PASS_PACKAGE_METADATA_AND_PINS (not a mathematical acceptance check) diff --git a/research/p104-integer-linux-validation/evidence/SOURCE-SPARSE-NOTE.txt b/research/p104-integer-linux-validation/evidence/SOURCE-SPARSE-NOTE.txt new file mode 100644 index 0000000000..e76ab3847d --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/SOURCE-SPARSE-NOTE.txt @@ -0,0 +1 @@ +Initial metadata checks could not resolve frozen original provenance commits/blobs in the shallow checkout. Both declared commits and exact source blobs were fetched, all seven hashes verified, and unchanged source metadata then passed. No scientific command ran on an incomplete source closure and no manifest/source/timeout was weakened. Full-history preflight remains unavailable; only exact bindings and later immediate own-input ancestry are claimed. diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/SCIENTIFIC.json b/research/p104-integer-linux-validation/evidence/qualification-normal/SCIENTIFIC.json new file mode 100644 index 0000000000..1952424ccc --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-normal/SCIENTIFIC.json @@ -0,0 +1,22 @@ +{ + "all_actual_witness_rows_equal": true, + "coefficient_scale_bits": 55, + "coordinates": 799, + "events": 25984, + "finite_fixtures": { + "cases": 120, + "controls": [ + "nondyadic scalar", + "inexact scale division", + "nondyadic weight" + ], + "events": 4240 + }, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json b/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json new file mode 100644 index 0000000000..381cd6559d --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "qualification-normal", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 107540480, + "script": "verify.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 490, + "stdout_sha256": "d31b2d05aade4a7df0abaf0b51f78c9ff3b4c742b8a5e31f8e77a1c4db39d8ba", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 103568, + "system_seconds": 0.1, + "user_seconds": 60.27 + }, + "wall_seconds": 60.46646667202003 +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/stderr.txt b/research/p104-integer-linux-validation/evidence/qualification-normal/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/stdout.txt b/research/p104-integer-linux-validation/evidence/qualification-normal/stdout.txt new file mode 100644 index 0000000000..e9737d582f --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-normal/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "qualify", "receipt": {"all_actual_witness_rows_equal": true, "coefficient_scale_bits": 55, "coordinates": 799, "events": 25984, "finite_fixtures": {"cases": 120, "controls": ["nondyadic scalar", "inexact scale division", "nondyadic weight"], "events": 4240}, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 60.186138} diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/usage.json b/research/p104-integer-linux-validation/evidence/qualification-normal/usage.json new file mode 100644 index 0000000000..fba458f6bd --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-normal/usage.json @@ -0,0 +1 @@ +{"user_seconds":60.27,"system_seconds":0.10,"kernel_max_rss_kib":103568,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json new file mode 100644 index 0000000000..ab31206dc0 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-1-baseline", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 105431040, + "script": "baseline.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 291, + "stdout_sha256": "ee8600c5a6cfa56d0ae1490fcf6b4baa867279f44111193223918b1030e6e19f", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 101508, + "system_seconds": 0.09, + "user_seconds": 28.58 + }, + "wall_seconds": 28.715565735998098 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-1-baseline/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-1-baseline/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-1-baseline/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-1-baseline/stdout.txt new file mode 100644 index 0000000000..ce75c99b18 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-1-baseline/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "baseline", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 28.448774} diff --git a/research/p104-integer-linux-validation/evidence/sample-1-baseline/usage.json b/research/p104-integer-linux-validation/evidence/sample-1-baseline/usage.json new file mode 100644 index 0000000000..e88640cf4a --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-1-baseline/usage.json @@ -0,0 +1 @@ +{"user_seconds":28.58,"system_seconds":0.09,"kernel_max_rss_kib":101508,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json new file mode 100644 index 0000000000..de01cb499a --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-2-candidate", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 104448000, + "script": "candidate.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 290, + "stdout_sha256": "578668cb78b54bea58f5db8b162909d0d6ebd348c8ad1c444c3df39521294194", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 100548, + "system_seconds": 0.05, + "user_seconds": 6.3 + }, + "wall_seconds": 6.385658305982361 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-2-candidate/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-2-candidate/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-2-candidate/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-2-candidate/stdout.txt new file mode 100644 index 0000000000..f15dbc443e --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-2-candidate/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "candidate", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 6.11869} diff --git a/research/p104-integer-linux-validation/evidence/sample-2-candidate/usage.json b/research/p104-integer-linux-validation/evidence/sample-2-candidate/usage.json new file mode 100644 index 0000000000..77b267528c --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-2-candidate/usage.json @@ -0,0 +1 @@ +{"user_seconds":6.30,"system_seconds":0.05,"kernel_max_rss_kib":100548,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json new file mode 100644 index 0000000000..29f0fcca50 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-3-candidate", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 104370176, + "script": "candidate.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 291, + "stdout_sha256": "1bdd62b27a510ca1effd49a0dc623d296bb2cff20baf65bb51f5b6df74d06973", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 100472, + "system_seconds": 0.05, + "user_seconds": 6.39 + }, + "wall_seconds": 6.488194212986855 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-3-candidate/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-3-candidate/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-3-candidate/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-3-candidate/stdout.txt new file mode 100644 index 0000000000..1d38769321 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-3-candidate/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "candidate", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 6.231335} diff --git a/research/p104-integer-linux-validation/evidence/sample-3-candidate/usage.json b/research/p104-integer-linux-validation/evidence/sample-3-candidate/usage.json new file mode 100644 index 0000000000..e306605e10 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-3-candidate/usage.json @@ -0,0 +1 @@ +{"user_seconds":6.39,"system_seconds":0.05,"kernel_max_rss_kib":100472,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json new file mode 100644 index 0000000000..9e3930b4f5 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-4-baseline", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 105689088, + "script": "baseline.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 291, + "stdout_sha256": "717569a5d82349bf0035efc59c72f8cdb18e3dc4617cb54944e86c9cd3e9e22c", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 101760, + "system_seconds": 0.06, + "user_seconds": 28.24 + }, + "wall_seconds": 28.363380322989542 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-4-baseline/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-4-baseline/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-4-baseline/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-4-baseline/stdout.txt new file mode 100644 index 0000000000..34e3a2a0f1 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-4-baseline/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "baseline", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 28.102562} diff --git a/research/p104-integer-linux-validation/evidence/sample-4-baseline/usage.json b/research/p104-integer-linux-validation/evidence/sample-4-baseline/usage.json new file mode 100644 index 0000000000..0a399b17db --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-4-baseline/usage.json @@ -0,0 +1 @@ +{"user_seconds":28.24,"system_seconds":0.06,"kernel_max_rss_kib":101760,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json new file mode 100644 index 0000000000..a08cf1274f --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-5-baseline", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 105664512, + "script": "baseline.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 291, + "stdout_sha256": "cafce08314e828b645e6ed5c24806de3c78bcf42057b90c38c35802e57772746", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 101736, + "system_seconds": 0.06, + "user_seconds": 28.1 + }, + "wall_seconds": 28.216742029995658 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-5-baseline/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-5-baseline/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-5-baseline/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-5-baseline/stdout.txt new file mode 100644 index 0000000000..4416d27a3c --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-5-baseline/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "baseline", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 27.952935} diff --git a/research/p104-integer-linux-validation/evidence/sample-5-baseline/usage.json b/research/p104-integer-linux-validation/evidence/sample-5-baseline/usage.json new file mode 100644 index 0000000000..1f648cffb7 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-5-baseline/usage.json @@ -0,0 +1 @@ +{"user_seconds":28.10,"system_seconds":0.06,"kernel_max_rss_kib":101736,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json new file mode 100644 index 0000000000..1dfddd3f90 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json @@ -0,0 +1,26 @@ +{ + "exit": 0, + "label": "sample-6-candidate", + "optimized": false, + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 105017344, + "script": "candidate.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 291, + "stdout_sha256": "bb2852ed9fcddcabcb256ad493dba49b192aa2cdf957a17c2a92f2b83409a0f6", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 101104, + "system_seconds": 0.05, + "user_seconds": 6.38 + }, + "wall_seconds": 6.439653205015929 +} diff --git a/research/p104-integer-linux-validation/evidence/sample-6-candidate/stderr.txt b/research/p104-integer-linux-validation/evidence/sample-6-candidate/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/sample-6-candidate/stdout.txt b/research/p104-integer-linux-validation/evidence/sample-6-candidate/stdout.txt new file mode 100644 index 0000000000..87ddd6b402 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-6-candidate/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "candidate", "receipt": {"coordinates": 799, "events": 25984, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 6.203333} diff --git a/research/p104-integer-linux-validation/evidence/sample-6-candidate/usage.json b/research/p104-integer-linux-validation/evidence/sample-6-candidate/usage.json new file mode 100644 index 0000000000..0a919d3e4d --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/sample-6-candidate/usage.json @@ -0,0 +1 @@ +{"user_seconds":6.38,"system_seconds":0.05,"kernel_max_rss_kib":101104,"exit":0} diff --git a/research/p104-integer-linux-validation/guard.py b/research/p104-integer-linux-validation/guard.py new file mode 100644 index 0000000000..3d40e2237d --- /dev/null +++ b/research/p104-integer-linux-validation/guard.py @@ -0,0 +1,119 @@ +"""Serial bounded Linux measurements; preserve the complete frozen precision contract.""" +import argparse +import fcntl +import hashlib +import json +import os +from pathlib import Path +import platform +import signal +import statistics +import subprocess +import sys +import tempfile +import time + +HERE = Path(__file__).resolve().parent +SOURCE = HERE +CLOSURE = ('source.py','replay.py','baseline.py','candidate.py','verify.py','guard.py','benchmark.py','inputs/PR5831.tar') +TIMEOUT = 180 +RSS_CAP = 1024**3 +OUTPUT_CAP = 2*1024**2 +AGGREGATE = 900 + +def sha(raw): + return hashlib.sha256(raw).hexdigest() + +def inventory(): + result = {} + for name in CLOSURE: + path = SOURCE / name + if path.is_symlink() or not path.is_file(): + raise ValueError('Regular complete runtime file: ' + name) + result[name] = [sha(path.read_bytes()), path.stat().st_mode & 0o777] + return result + +def group_rss(group): + total = 0 + count = 0 + for p in Path('/proc').iterdir(): + if not p.name.isdigit(): + continue + try: + raw = (p/'stat').read_text() + fields = raw[raw.rfind(')')+2:].split() + if int(fields[2]) == group: + total += int(fields[21])*os.sysconf('SC_PAGE_SIZE') + count += 1 + except (FileNotFoundError, ProcessLookupError, PermissionError): + pass + return total, count + +def run(label, script, optimized=False): + records = HERE/'runs' + records.mkdir(exist_ok=True) + prior = list(records.glob('*/receipt.json')) + spent = sum(json.loads(p.read_bytes())['wall_seconds'] for p in prior) + if spent >= AGGREGATE: + raise ValueError('Aggregate budget consumed') + folder = records/label + folder.mkdir() + before = inventory() + env = os.environ.copy() + for key in ('PYTHONPATH','PYTHONOPTIMIZE','PYTHONINSPECT','PYTHONSTARTUP','PYTHONPYCACHEPREFIX'): + env.pop(key,None) + env.update(PYTHONHASHSEED='0', LC_ALL='C.UTF-8', TZ='UTC') + usage = folder/'usage.json' + with tempfile.TemporaryDirectory(prefix='linux5757-bytecode-') as cache: + command = ['/usr/bin/python3.12', '-B', '-X', 'pycache_prefix='+cache] + if optimized: + command.append('-O') + command.append(str(SOURCE/script)) + timed = ['/usr/bin/time','-f','{"user_seconds":%U,"system_seconds":%S,"kernel_max_rss_kib":%M,"exit":%x}', '-o', str(usage),'--',*command] + start = time.monotonic() + peak = 0 + stop = None + with (folder/'stdout.txt').open('wb') as out, (folder/'stderr.txt').open('wb') as err: + p = subprocess.Popen(timed, cwd=SOURCE, env=env, stdout=out, stderr=err, start_new_session=True) + try: + while p.poll() is None: + rss, _ = group_rss(p.pid) + peak = max(peak,rss) + elapsed = time.monotonic()-start + if rss > RSS_CAP: + stop='sampled_group_rss_cap' + elif elapsed > min(TIMEOUT,AGGREGATE-spent): + stop='wall_or_aggregate_cap' + elif max((folder/'stdout.txt').stat().st_size,(folder/'stderr.txt').stat().st_size)>OUTPUT_CAP: + stop='output_cap' + if stop: + os.killpg(p.pid,signal.SIGKILL) + break + time.sleep(0.05) + code=p.wait() + finally: + try: os.killpg(p.pid,signal.SIGKILL) + except ProcessLookupError: pass + p.wait() + elapsed = time.monotonic()-start + stdout=(folder/'stdout.txt').read_bytes() + stderr=(folder/'stderr.txt').read_bytes() + after=inventory() + measurement=None + if usage.exists(): + try: measurement=json.loads(usage.read_bytes()) + except json.JSONDecodeError: measurement={'raw':usage.read_text()} + receipt={'label':label,'script':script,'optimized':optimized,'wall_seconds':elapsed, + 'exit':code,'termination':stop,'sampled_process_group_rss_bytes':peak, + 'usage':measurement,'stdout_sha256':sha(stdout),'stdout_bytes':len(stdout), + 'stderr_sha256':sha(stderr),'stderr_bytes':len(stderr), + 'source_inventory_sha256':sha(json.dumps(before,sort_keys=True,separators=(',',':')).encode()), + 'source_bytes_and_modes_unchanged':before==after, + 'python':sys.version,'platform':platform.platform(), + 'runner_sha256':sha(Path(__file__).read_bytes()),'runtime_policy_sha256':sha(json.dumps(CLOSURE).encode())} + receipt['status']='PASS' if code==0 and stop is None and not stderr and before==after else 'STOP' + (folder/'receipt.json').write_text(json.dumps(receipt,indent=2,sort_keys=True)+'\n') + print(json.dumps(receipt,sort_keys=True),flush=True) + if receipt['status']!='PASS': + raise SystemExit(1) + return receipt diff --git a/research/p104-integer-linux-validation/replay.py b/research/p104-integer-linux-validation/replay.py new file mode 100644 index 0000000000..aeb9296816 --- /dev/null +++ b/research/p104-integer-linux-validation/replay.py @@ -0,0 +1,31 @@ +"""Run an unchanged complete PR5831 entry point from its authenticated export.""" +import json +import runpy +import sys + +from source import baseline, require + +EXPECTED = { + 'source_result_sha256': 'cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98', + 'events': 25984, 'coordinates': 799, 'source_controls': 6, + 'guards': {'owned': 22, 'prefix': 26, 'public': 23}, +} + + +def main(): + mode = 'qualify' if not sys.argv[1:] else sys.argv[1].removeprefix('--') + require(len(sys.argv) <= 2 and mode in ('baseline', 'candidate', 'qualify'), 'Exact replay mode') + with baseline() as package: + expected = json.loads((package / 'RESULT.json').read_bytes()) if mode == 'qualify' else EXPECTED + previous = sys.argv + try: + sys.argv = [str(package / 'verify.py'), '--' + mode] + result = runpy.run_path(sys.argv[0], run_name='__main__') + finally: + sys.argv = previous + require(result['mode'] == mode and result['receipt'] == expected, + 'Complete frozen scientific receipt') + + +if __name__ == '__main__': + main() diff --git a/research/p104-integer-linux-validation/source.py b/research/p104-integer-linux-validation/source.py new file mode 100644 index 0000000000..6e1f036ed0 --- /dev/null +++ b/research/p104-integer-linux-validation/source.py @@ -0,0 +1,67 @@ +"""Authenticate the unchanged complete PR5831 export before importing it.""" +from contextlib import contextmanager +from hashlib import sha256 +import json +from pathlib import Path +import tarfile +import tempfile + +HERE = Path(__file__).resolve().parent +BUNDLE_SHA256 = '6ad8d8e0463e8e6ea8d503610c3f9ec38108f16092bc479bc1cb6f48683f6ab6' +SOURCE_HEAD = '7c5eb98e7439d778141d63e801e53d4cd7e1d587' + + +def require(ok, why): + if not ok: + raise ValueError(why) + + +def payload(archive=None): + archive = HERE / 'inputs/PR5831.tar' if archive is None else archive + require(sha256(archive.read_bytes()).hexdigest() == BUNDLE_SHA256, 'Exact PR5831 bundle') + with tarfile.open(archive, 'r:') as stream: + members = stream.getmembers() + require(len(members) == 14 and len({m.name for m in members}) == 14, 'Complete unique baseline bundle') + require(all(m.isfile() and 0 <= m.size <= 8 * 1024**2 for m in members), 'Regular bounded baseline members') + receipt = json.loads(stream.extractfile('.research-export.json').read()) + require(receipt['commit'] == SOURCE_HEAD, 'Exact baseline export head') + rows = {r['path']: r for r in receipt['files']} + require(len(rows) == len(receipt['files']) == 13, 'Complete baseline file census') + require({m.name for m in members} == set(rows) | {'.research-export.json'}, 'Exact baseline member set') + contents = {} + for member in members: + path = Path(member.name) + require(not path.is_absolute() and '..' not in path.parts and path.parts, 'Safe baseline path') + raw = stream.extractfile(member).read() + if member.name in rows: + row = rows[member.name] + require(len(raw) == row['size'] and sha256(raw).hexdigest() == row['sha256'], 'Exact baseline file bytes') + require(row['mode'] in (0o644, 0o755), 'Regular baseline file mode') + contents[member.name] = raw + return contents + + +@contextmanager +def baseline(): + contents = payload() + with tempfile.TemporaryDirectory(prefix='precision-linux-source-') as temporary: + root = Path(temporary) + try: + for name, raw in contents.items(): + path = root / name + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(raw) + path.chmod(0o444) + for path in root.rglob('*'): + if path.is_dir(): + path.chmod(0o555) + before = {str(p.relative_to(root)): [sha256(p.read_bytes()).hexdigest(), p.stat().st_mode & 0o777] + for p in root.rglob('*') if p.is_file()} + yield root / 'research/p104-integer-error-replay' + after = {str(p.relative_to(root)): [sha256(p.read_bytes()).hexdigest(), p.stat().st_mode & 0o777] + for p in root.rglob('*') if p.is_file() and not p.is_symlink()} + require(after == before and not any(p.is_symlink() for p in root.rglob('*')), 'Baseline export unchanged') + finally: + for path in [root, *root.rglob('*')]: + if path.is_dir(): + path.chmod(0o755) diff --git a/research/p104-integer-linux-validation/verify.py b/research/p104-integer-linux-validation/verify.py new file mode 100644 index 0000000000..e9a585e279 --- /dev/null +++ b/research/p104-integer-linux-validation/verify.py @@ -0,0 +1,9 @@ +"""Complete unchanged PR5831 qualify command.""" +import sys +from replay import main +from source import require + +if __name__ == '__main__': + require(len(sys.argv) == 1, 'No wrapper arguments') + sys.argv = [sys.argv[0], '--qualify'] + main() From 3e5c1beb92e967d79b26728c31432c718b9d3e25 Mon Sep 17 00:00:00 2001 From: d3lerium Date: Tue, 27 Oct 2026 15:32:27 +1100 Subject: [PATCH 4/4] Record optimized and sealed Linux qualification with preserved launch diagnosis --- .../p104-integer-linux-validation/README.md | 8 ++++ .../VALIDATION.json | 41 +++++++++++++++++++ .../evidence/CLAIM.md | 1 + .../evidence/LAUNCHER-DIAGNOSIS.json | 10 +++++ .../evidence/LAUNCHER-PROGRESS.md | 1 + .../qualification-normal/receipt.json | 1 + .../qualification-optimized/SCIENTIFIC.json | 22 ++++++++++ .../qualification-optimized/receipt.json | 27 ++++++++++++ .../qualification-optimized/stderr.txt | 0 .../qualification-optimized/stdout.txt | 2 + .../qualification-optimized/usage.json | 1 + .../SCIENTIFIC.json | 22 ++++++++++ .../receipt.json | 27 ++++++++++++ .../qualification-sealed-absolute/stderr.txt | 0 .../qualification-sealed-absolute/stdout.txt | 2 + .../qualification-sealed-absolute/usage.json | 1 + .../qualification-sealed/receipt.json | 27 ++++++++++++ .../evidence/qualification-sealed/stderr.txt | 1 + .../evidence/qualification-sealed/stdout.txt | 0 .../evidence/qualification-sealed/usage.json | 2 + .../evidence/sample-1-baseline/receipt.json | 1 + .../evidence/sample-2-candidate/receipt.json | 1 + .../evidence/sample-3-candidate/receipt.json | 1 + .../evidence/sample-4-baseline/receipt.json | 1 + .../evidence/sample-5-baseline/receipt.json | 1 + .../evidence/sample-6-candidate/receipt.json | 1 + 26 files changed, 202 insertions(+) create mode 100644 research/p104-integer-linux-validation/VALIDATION.json create mode 100644 research/p104-integer-linux-validation/evidence/CLAIM.md create mode 100644 research/p104-integer-linux-validation/evidence/LAUNCHER-DIAGNOSIS.json create mode 100644 research/p104-integer-linux-validation/evidence/LAUNCHER-PROGRESS.md create mode 100644 research/p104-integer-linux-validation/evidence/qualification-optimized/SCIENTIFIC.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-optimized/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-optimized/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-optimized/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-optimized/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/SCIENTIFIC.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/usage.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed/receipt.json create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed/stderr.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed/stdout.txt create mode 100644 research/p104-integer-linux-validation/evidence/qualification-sealed/usage.json diff --git a/research/p104-integer-linux-validation/README.md b/research/p104-integer-linux-validation/README.md index ec9da83b75..12d93be167 100644 --- a/research/p104-integer-linux-validation/README.md +++ b/research/p104-integer-linux-validation/README.md @@ -43,6 +43,14 @@ python3 -B research/p104-integer-linux-validation/benchmark.py remaining --workd The first pair must preserve the complete scientific receipt and save at least 15% wall and CPU before the remaining four original-order runs are allowed. Existing run directories are never overwritten; every sample is kept. These commands measure complete baseline/candidate production replays, with identical outer authentication/extraction charged to both arms. They do not time the extra full-reference qualification as the fast path. The Linux development round's qualification and all six samples share the same cumulative guard; reproduction's standalone qualification and new benchmark directory have separately stated costs. +## Mode and export qualification + +Full normal, optimized and read-only Git-free isolated optimized qualification pass in **60.47 / 63.86 / 60.26 seconds**. The scientific receipts agree exactly; raw output retains its varying runtime field. The sealed implementation `48479b602545f27e9a35742938be2d5f2bd8459e` runs with `-I -O -B`, empty PATH and an explicit authenticated import root; all **53 exported files** stay unchanged. + +One relative-path launcher invocation failed before target entry. Its zero-output exit-2 receipt and exact diagnosis are retained. The absolute-path correction is separately labelled, manually justified and uses unchanged source/expected records/limits; it is not an automatic retry, scientific repair or discarded timing sample. Nine full scientific commands pass; the additional pre-target launch failure is charged. All ten local attempts total **289.30 seconds**, below 900 seconds cumulative. Qualification and export costs are outside the fast-path speed claim. + +Public receipts remove only local absolute script paths; the one failed stderr replaces the local workspace prefix, retaining original receipt/stderr hashes and public redaction details. Scientific stdout is unfiltered. Final committed bytes/modes, immediate input ancestry, official export/input integrity and hosted CI are reported separately; later additions change evidence/reporting only. + ## Source and overlap scope Canonical main is `de5ec2e7a6074068452f45b1a191b5c72832df4a`, priority revision 8. The donor assigned Linux validation directly; the task card is refined accordingly. [The source claim](https://github.com/CrocSwap/integer-mult-bounds/pull/5831#issuecomment-6433618407) precedes execution. Targeted PR/body and source-comment checks found no competing Linux follow-up. The author's [released handoff](https://github.com/CrocSwap/integer-mult-bounds/discussions/2750#discussioncomment-19209571) explicitly requests Linux reproduction; the neighbouring rounded-gauge transport claim is a different word and scope. Coverage is bounded and does not establish exhaustive novelty or unpublished-work availability. diff --git a/research/p104-integer-linux-validation/VALIDATION.json b/research/p104-integer-linux-validation/VALIDATION.json new file mode 100644 index 0000000000..c02b42eb2d --- /dev/null +++ b/research/p104-integer-linux-validation/VALIDATION.json @@ -0,0 +1,41 @@ +{ + "status": "PASS_EXACT_FROZEN_LINUX_QUALIFICATION_ONLY", + "source_pr": 5831, + "source_head": "7c5eb98e7439d778141d63e801e53d4cd7e1d587", + "source_pr5826_head": "58f93cf41751920f3d6766a39caccc2974ce18b0", + "implementation_commit": "48479b602545f27e9a35742938be2d5f2bd8459e", + "retention_commit": "61f76fd9b3772b1b38981ea1d5b332d73a80e73b", + "main": "de5ec2e7a6074068452f45b1a191b5c72832df4a", + "production_wall_speedup": 4.40448878534281, + "production_wall_fraction_saved": 0.7729588951780773, + "production_cpu_fraction_saved": 0.772791519434629, + "baseline_wall_median": 28.363380322989542, + "candidate_wall_median": 6.439653205015929, + "qualification_normal_seconds": 60.46646667202003, + "qualification_optimized_seconds": 63.859208991983905, + "qualification_sealed_seconds": 60.26154273899738, + "science_commands_passed": 9, + "pre_target_launch_failures_preserved": 1, + "all_local_attempts_wall_seconds": 289.2987882719608, + "aggregate_cap_seconds": 900, + "command_cap_seconds": 180, + "sampled_process_group_rss_cap_bytes": 1073741824, + "automatic_retries": 0, + "diagnosed_manual_launcher_correction": "One separate absolute-path launch after proving the relative-path error prevented target entry; full failed receipt retained and time charged.", + "full_qualified_scientific_receipts_equal": true, + "timing_field_not_part_of_scientific_receipt": true, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98", + "mode": "Normal, -O, sealed -I -O -B with explicit authenticated import root and empty PATH", + "sealed_export_files_unchanged": 53, + "outer_official_source_export": "13 files plus transport receipt authenticated/read-only/unchanged for each successful command", + "nested_scratch": "Original verifier extracts nested source into writable private scratch; no new enforcement claimed.", + "custody_controls": 4, + "custody_modes": "Normal and optimized pass before science imports", + "coverage": "25984 events; 799 coordinates; complete original/candidate result; actual signed witnesses; ideal metadata/weights; final signed coefficients and scores; guards and attaining fixtures; six original controls; 120 programs/4240 events; three integer controls.", + "performance_limitations": "Three observations per arm on one unreserved host; fresh processes, unflushed OS caches, no universal or statistical guarantee. Full qualification cost is separate.", + "source_transport": "Initial shallow provenance objects unavailable; exact declared commits/blobs fetched and all seven bindings + unchanged metadata passed before execution.", + "history": "Full-history preflight unavailable; immediate own-input pin ancestry checked separately.", + "hosted_ci": "Separate exact-head check recorded in public handoff", + "kappa_research": "PAUSED", + "subagents": 0 +} diff --git a/research/p104-integer-linux-validation/evidence/CLAIM.md b/research/p104-integer-linux-validation/evidence/CLAIM.md new file mode 100644 index 0000000000..1465ac8f22 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/CLAIM.md @@ -0,0 +1 @@ +CLAIM — bounded Linux validation of [PR #5831](https://github.com/CrocSwap/integer-mult-bounds/pull/5831), frozen head `7c5eb98e7439d778141d63e801e53d4cd7e1d587`, following its explicit Linux reproduction request. Scope: source/proof and complete-coverage review; full baseline/candidate precision qualification; original six-process B,C,C,B,B,C timing order with wall, CPU and memory; normal/optimized and sealed read-only Git-free checks. Preserve all 25,984 events, 799 coordinates, complete signed results/witnesses/weights/guards and original six plus three arithmetic controls; qualification cost reported separately. Success for a Linux speed claim requires at least 15% lower wall and CPU median, after a passing first pair. Stop without retry on mismatch, source drift, stderr or resource failure: original 180-second command limit, 1 GiB sampled process-group RSS, 900 seconds cumulative full scientific work, serial execution. No original source, expected result or timeout is changed. Canonical main `de5ec2e7a6074068452f45b1a191b5c72832df4a`; targeted PR/body and source-comment overlap found no competing Linux follow-up, with non-exhaustive coverage. Claim expires 27 October 2026 at 17:00 AEDT. Kappa research, Work 1/2, feeds and automations remain paused. Credit Ali Romman and all PR5826/5819/5811/2878/native/compiler/precision predecessors; validation for Chris R / Clear1nsight with substantial OpenAI Codex assistance, no subagents. diff --git a/research/p104-integer-linux-validation/evidence/LAUNCHER-DIAGNOSIS.json b/research/p104-integer-linux-validation/evidence/LAUNCHER-DIAGNOSIS.json new file mode 100644 index 0000000000..e4f3a2cf77 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/LAUNCHER-DIAGNOSIS.json @@ -0,0 +1,10 @@ +{ + "failed_label": "qualification-sealed", + "status": "PRE_TARGET_LAUNCH_FAILURE_PRESERVED", + "cause": "Relative driver argument was resolved under the package directory; Python could not open that nonexistent path.", + "evidence": "exit 2, empty stdout, explicit cannot-open-file stderr before target script entry", + "scientific_execution_started": false, + "wall_seconds_charged": 0.10237605599104427, + "response": "One manually diagnosed corrected-absolute-path qualification, distinct new label; no automatic retry, source or expected-result edit, timeout/cap change.", + "corrected_driver": "[workspace]/outputs/precision-linux-validation-20261027/sealed-driver.py" +} diff --git a/research/p104-integer-linux-validation/evidence/LAUNCHER-PROGRESS.md b/research/p104-integer-linux-validation/evidence/LAUNCHER-PROGRESS.md new file mode 100644 index 0000000000..40a3576536 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/LAUNCHER-PROGRESS.md @@ -0,0 +1 @@ +PROGRESS — complete Linux qualification of frozen PR #5831 passes normally (60.47 s) and under optimization (63.86 s). All six original-order measurements pass with 4.40x wall speedup and 77.30% wall / 77.28% CPU reduction, preserving complete scientific receipts. A sealed-export launcher invocation failed before target entry because its relative path resolved under the package directory; its exit-2/empty-output/error receipt is retained. This is a pre-execution harness diagnosis, not a scientific or coverage failure. I will make one bounded corrected-absolute-path export qualification, preserving the failed receipt and charging its time to the same 900-second cumulative cap. No source, expected result or 180-second timeout changes; no automatic retries or kappa research. diff --git a/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json b/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json index 381cd6559d..f76f7ebd7c 100644 --- a/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json +++ b/research/p104-integer-linux-validation/evidence/qualification-normal/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "qualification-normal", "optimized": false, + "original_local_receipt_sha256": "3c122b660710e878ec3f03127b5fba114671ced6a1ef64d3c3f9893ecaa1577e", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/qualification-optimized/SCIENTIFIC.json b/research/p104-integer-linux-validation/evidence/qualification-optimized/SCIENTIFIC.json new file mode 100644 index 0000000000..1952424ccc --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-optimized/SCIENTIFIC.json @@ -0,0 +1,22 @@ +{ + "all_actual_witness_rows_equal": true, + "coefficient_scale_bits": 55, + "coordinates": 799, + "events": 25984, + "finite_fixtures": { + "cases": 120, + "controls": [ + "nondyadic scalar", + "inexact scale division", + "nondyadic weight" + ], + "events": 4240 + }, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-optimized/receipt.json b/research/p104-integer-linux-validation/evidence/qualification-optimized/receipt.json new file mode 100644 index 0000000000..747e848e9b --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-optimized/receipt.json @@ -0,0 +1,27 @@ +{ + "exit": 0, + "label": "qualification-optimized", + "optimized": true, + "original_local_receipt_sha256": "509dade22ef8726f2e4655fbe88473c1e3dda0bb85d8b85b9f3298e53b21f011", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 107126784, + "script": "verify.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 490, + "stdout_sha256": "86225d1b4b1667db1b8dbb356e601583ea8b6270304d0a3fc88f967ed5fb29b4", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 103164, + "system_seconds": 0.11, + "user_seconds": 63.35 + }, + "wall_seconds": 63.859208991983905 +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-optimized/stderr.txt b/research/p104-integer-linux-validation/evidence/qualification-optimized/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/qualification-optimized/stdout.txt b/research/p104-integer-linux-validation/evidence/qualification-optimized/stdout.txt new file mode 100644 index 0000000000..d9bed0332d --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-optimized/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "qualify", "receipt": {"all_actual_witness_rows_equal": true, "coefficient_scale_bits": 55, "coordinates": 799, "events": 25984, "finite_fixtures": {"cases": 120, "controls": ["nondyadic scalar", "inexact scale division", "nondyadic weight"], "events": 4240}, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 63.604694} diff --git a/research/p104-integer-linux-validation/evidence/qualification-optimized/usage.json b/research/p104-integer-linux-validation/evidence/qualification-optimized/usage.json new file mode 100644 index 0000000000..727a2197d4 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-optimized/usage.json @@ -0,0 +1 @@ +{"user_seconds":63.35,"system_seconds":0.11,"kernel_max_rss_kib":103164,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/SCIENTIFIC.json b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/SCIENTIFIC.json new file mode 100644 index 0000000000..1952424ccc --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/SCIENTIFIC.json @@ -0,0 +1,22 @@ +{ + "all_actual_witness_rows_equal": true, + "coefficient_scale_bits": 55, + "coordinates": 799, + "events": 25984, + "finite_fixtures": { + "cases": 120, + "controls": [ + "nondyadic scalar", + "inexact scale division", + "nondyadic weight" + ], + "events": 4240 + }, + "guards": { + "owned": 22, + "prefix": 26, + "public": 23 + }, + "source_controls": 6, + "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98" +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/receipt.json b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/receipt.json new file mode 100644 index 0000000000..309e03bff0 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/receipt.json @@ -0,0 +1,27 @@ +{ + "exit": 0, + "label": "qualification-sealed-absolute", + "optimized": true, + "original_local_receipt_sha256": "ec3e6f6eb331f1c8c285115371dbb34105b2ca47167c78ea2bfa81589b139ae9", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 107384832, + "script": "[local absolute script path removed]/sealed-driver.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "PASS", + "stderr_bytes": 0, + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stdout_bytes": 490, + "stdout_sha256": "514623e3263ee41457e9ba4c323500a46ef4a3d38685ad5950b8ab602f498790", + "termination": null, + "usage": { + "exit": 0, + "kernel_max_rss_kib": 103416, + "system_seconds": 0.12, + "user_seconds": 60.08 + }, + "wall_seconds": 60.26154273899738 +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stderr.txt b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stderr.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stdout.txt b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stdout.txt new file mode 100644 index 0000000000..51891f665f --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/stdout.txt @@ -0,0 +1,2 @@ +PASS_P104_INTEGER_ERROR_REPLAY +{"mode": "qualify", "receipt": {"all_actual_witness_rows_equal": true, "coefficient_scale_bits": 55, "coordinates": 799, "events": 25984, "finite_fixtures": {"cases": 120, "controls": ["nondyadic scalar", "inexact scale division", "nondyadic weight"], "events": 4240}, "guards": {"owned": 22, "prefix": 26, "public": 23}, "source_controls": 6, "source_result_sha256": "cc7739703ed23532d187949c8507d09c13ac4c152e07a930f0087cde0d7a3d98"}, "seconds": 59.879463} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/usage.json b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/usage.json new file mode 100644 index 0000000000..02f02efd23 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed-absolute/usage.json @@ -0,0 +1 @@ +{"user_seconds":60.08,"system_seconds":0.12,"kernel_max_rss_kib":103416,"exit":0} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed/receipt.json b/research/p104-integer-linux-validation/evidence/qualification-sealed/receipt.json new file mode 100644 index 0000000000..9509b95b36 --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed/receipt.json @@ -0,0 +1,27 @@ +{ + "exit": 2, + "label": "qualification-sealed", + "optimized": true, + "original_local_receipt_sha256": "3230a6e576a9261b4be12ab165d16c3dc67097a904b4d8f8412e1c3b087650c4", + "original_local_stderr_sha256": "d33f3653c05ac225e23ac36e6b4974db94906dce6158fe5ab8e4944edd7a8994", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", + "public_stderr_sha256": "d208b8eaa320565d28a6f7565aa4f72ee9b3dff1a04ebd8af6bee9cbab795836", + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", + "runtime_policy_sha256": "b1e0a2d26463f44264166e993d69b334687eb9277142f7640c6891912befed25", + "sampled_process_group_rss_bytes": 15642624, + "script": "outputs/precision-linux-validation-20261027/sealed-driver.py", + "source_bytes_and_modes_unchanged": true, + "source_inventory_sha256": "88379652129d6c954032c0db309899c6d871f92215222e2c6ee3eb3dce5118a5", + "status": "STOP", + "stderr_bytes": 302, + "stderr_redaction": "Only local absolute workspace prefix replaced; scientific stdout unchanged.", + "stderr_sha256": "d33f3653c05ac225e23ac36e6b4974db94906dce6158fe5ab8e4944edd7a8994", + "stdout_bytes": 0, + "stdout_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "termination": null, + "usage": { + "raw": "Command exited with non-zero status 2\n{\"user_seconds\":0.04,\"system_seconds\":0.00,\"kernel_max_rss_kib\":14272,\"exit\":2}\n" + }, + "wall_seconds": 0.10237605599104427 +} diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed/stderr.txt b/research/p104-integer-linux-validation/evidence/qualification-sealed/stderr.txt new file mode 100644 index 0000000000..d2ed4f8e0f --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed/stderr.txt @@ -0,0 +1 @@ +/usr/bin/python3.12: can't open file '[workspace]/outputs/precision-linux-validation-20261027/repo/research/p104-integer-linux-validation/outputs/precision-linux-validation-20261027/sealed-driver.py': [Errno 2] No such file or directory diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed/stdout.txt b/research/p104-integer-linux-validation/evidence/qualification-sealed/stdout.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/p104-integer-linux-validation/evidence/qualification-sealed/usage.json b/research/p104-integer-linux-validation/evidence/qualification-sealed/usage.json new file mode 100644 index 0000000000..b00633344e --- /dev/null +++ b/research/p104-integer-linux-validation/evidence/qualification-sealed/usage.json @@ -0,0 +1,2 @@ +Command exited with non-zero status 2 +{"user_seconds":0.04,"system_seconds":0.00,"kernel_max_rss_kib":14272,"exit":2} diff --git a/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json index ab31206dc0..f63613aed4 100644 --- a/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-1-baseline/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-1-baseline", "optimized": false, + "original_local_receipt_sha256": "001a11db4c0c8691087d2d74d0f3155543fe2def25416ddb89d5d341d6367b1d", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json index de01cb499a..7e0451db69 100644 --- a/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-2-candidate/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-2-candidate", "optimized": false, + "original_local_receipt_sha256": "fe38d8d911b830a2b86c4cd0ee28271d9a7395ead58f487b67bc8a654da10d2b", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json index 29f0fcca50..ed2650a73b 100644 --- a/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-3-candidate/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-3-candidate", "optimized": false, + "original_local_receipt_sha256": "bf2978ced2b6cfba05a39c0d4ca0566fc70eba5c2f68a4ca690185c8c59461ce", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json index 9e3930b4f5..389a1c47ed 100644 --- a/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-4-baseline/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-4-baseline", "optimized": false, + "original_local_receipt_sha256": "ca45ffa4d3acb1d44424b03b1e0771a8fda91fbe3885cb483d4e32bfea3d039e", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json b/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json index a08cf1274f..dd9c064c77 100644 --- a/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-5-baseline/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-5-baseline", "optimized": false, + "original_local_receipt_sha256": "41aff901651d5f838630b85625b8454881923a4e4cf218aedf6b2ed5eca53945", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78", diff --git a/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json b/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json index 1dfddd3f90..a6ff1ee97a 100644 --- a/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json +++ b/research/p104-integer-linux-validation/evidence/sample-6-candidate/receipt.json @@ -2,6 +2,7 @@ "exit": 0, "label": "sample-6-candidate", "optimized": false, + "original_local_receipt_sha256": "82fd7fa16a9cb04a04ec29f00be74c1798c88f2fa7d1541b101f77701f7f7d5a", "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39", "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", "runner_sha256": "0d31f04f500a81de8fb8653ddb5eda8a6b9d37dec9a0b6e666a1fe648d8d3e78",