noqt commited on
Commit
8e35e04
·
verified ·
1 Parent(s): 84c7706

Sync GitHub source c58505a47c36d09bda106addf7a584efff47dabd

Browse files

Canonical source: https://github.com/noqt/Lumi-Eggcracker/commit/c58505a47c36d09bda106addf7a584efff47dabd

HUGGINGFACE_MANIFEST.json CHANGED
@@ -37,8 +37,8 @@
37
  "size": 10537
38
  },
39
  "README.md": {
40
- "sha256": "1b8d7f3b174f049632caf75bfd5078a38675f62e9435280333b23e0b3228c25a",
41
- "size": 47072
42
  },
43
  "RELEASE_NOTES.md": {
44
  "sha256": "64d330d0f297b15720fc65e6347ececc1b99a917a597d405ebfac04baf3222ea",
@@ -189,7 +189,7 @@
189
  "size": 4101
190
  },
191
  "index.html": {
192
- "sha256": "761e39042d3a7bc2e7c860f6a2713f4a25a2ccbfc2ad7935e8b2e2aba00d6a51",
193
  "size": 22790
194
  },
195
  "integrations/prometheus/eggcracker.rules.yml": {
@@ -257,8 +257,8 @@
257
  "size": 4746
258
  },
259
  "scripts/collect_supported_path_receipt.py": {
260
- "sha256": "096ecbc59e57112ecbc4e8a62c3ab1278494d941a883923009dd32f9dd730d26",
261
- "size": 38862
262
  },
263
  "scripts/containment_probe.py": {
264
  "sha256": "104009c1c3f758633012826f3192d3c1f6433977f96b4c80b4f8f8ddfacc26e4",
@@ -601,8 +601,8 @@
601
  "size": 6820
602
  },
603
  "tests/test_collect_supported_path_receipt.py": {
604
- "sha256": "b7835ba053678a83e9470ffa2c59cc80882dc024957a132436962760d3ee7258",
605
- "size": 49483
606
  },
607
  "tests/test_containment.py": {
608
  "sha256": "168e840c8928ed5521a1f11080b4bb5679c145f66635c8b3785a2fca60f19f06",
@@ -839,6 +839,6 @@
839
  },
840
  "schema": "noqt.huggingface_manifest.v1",
841
  "source_repository": "https://github.com/noqt/Lumi-Eggcracker",
842
- "source_revision": "e2dd36acb4ab45506dc2a82ea8bce0c37e235deb",
843
- "source_url": "https://github.com/noqt/Lumi-Eggcracker/commit/e2dd36acb4ab45506dc2a82ea8bce0c37e235deb"
844
  }
 
37
  "size": 10537
38
  },
39
  "README.md": {
40
+ "sha256": "5865613a0fc9459ceb966df471c6554ea52f850ae1aca28ff4801b64f40136c2",
41
+ "size": 48062
42
  },
43
  "RELEASE_NOTES.md": {
44
  "sha256": "64d330d0f297b15720fc65e6347ececc1b99a917a597d405ebfac04baf3222ea",
 
189
  "size": 4101
190
  },
191
  "index.html": {
192
+ "sha256": "47513ce608bbf202b9375a299f73b7a4d87c5b619aa0548d3e38bcc1ad062c3a",
193
  "size": 22790
194
  },
195
  "integrations/prometheus/eggcracker.rules.yml": {
 
257
  "size": 4746
258
  },
259
  "scripts/collect_supported_path_receipt.py": {
260
+ "sha256": "2b03bf35898df0e4246f502be619debb6ac2c04c9c5857273845436fcdf79c6e",
261
+ "size": 39406
262
  },
263
  "scripts/containment_probe.py": {
264
  "sha256": "104009c1c3f758633012826f3192d3c1f6433977f96b4c80b4f8f8ddfacc26e4",
 
601
  "size": 6820
602
  },
603
  "tests/test_collect_supported_path_receipt.py": {
604
+ "sha256": "039089e8149f556e0ebe2038490ceba27f6570eece5379ce4cbd9c533e0e34f9",
605
+ "size": 55187
606
  },
607
  "tests/test_containment.py": {
608
  "sha256": "168e840c8928ed5521a1f11080b4bb5679c145f66635c8b3785a2fca60f19f06",
 
839
  },
840
  "schema": "noqt.huggingface_manifest.v1",
841
  "source_repository": "https://github.com/noqt/Lumi-Eggcracker",
842
+ "source_revision": "c58505a47c36d09bda106addf7a584efff47dabd",
843
+ "source_url": "https://github.com/noqt/Lumi-Eggcracker/commit/c58505a47c36d09bda106addf7a584efff47dabd"
844
  }
HUGGINGFACE_SYNC.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "manifest": "HUGGINGFACE_MANIFEST.json",
3
- "manifest_sha256": "b13c931844a56bc153a9e276f0b0ebca8ce16c44f62732bfc0f1161553abe57e",
4
  "mirrored_files": 194,
5
  "mode": "DERIVED_READ_ONLY_MIRROR",
6
  "release_reference": {
@@ -65,7 +65,7 @@
65
  },
66
  "schema": "noqt.huggingface_sync.v1",
67
  "source_repository": "https://github.com/noqt/Lumi-Eggcracker",
68
- "source_revision": "e2dd36acb4ab45506dc2a82ea8bce0c37e235deb",
69
- "source_url": "https://github.com/noqt/Lumi-Eggcracker/commit/e2dd36acb4ab45506dc2a82ea8bce0c37e235deb",
70
  "target": "https://huggingface.co/spaces/noqt/eggcracker"
71
  }
 
1
  {
2
  "manifest": "HUGGINGFACE_MANIFEST.json",
3
+ "manifest_sha256": "996cd357f7cf84ddcbf18012bfa634ebbf5bdc517363d119143bac484595de29",
4
  "mirrored_files": 194,
5
  "mode": "DERIVED_READ_ONLY_MIRROR",
6
  "release_reference": {
 
65
  },
66
  "schema": "noqt.huggingface_sync.v1",
67
  "source_repository": "https://github.com/noqt/Lumi-Eggcracker",
68
+ "source_revision": "c58505a47c36d09bda106addf7a584efff47dabd",
69
+ "source_url": "https://github.com/noqt/Lumi-Eggcracker/commit/c58505a47c36d09bda106addf7a584efff47dabd",
70
  "target": "https://huggingface.co/spaces/noqt/eggcracker"
71
  }
README.md CHANGED
@@ -11,7 +11,7 @@ short_description: Native Linux kill switch for supported local-AI workloads
11
  ---
12
 
13
  > Official noqt Hugging Face distribution, generated from GitHub commit
14
- > [`e2dd36acb4ab`](https://github.com/noqt/Lumi-Eggcracker/commit/e2dd36acb4ab45506dc2a82ea8bce0c37e235deb). This Space distributes the source for
15
  > discovery and cloning; Eggcracker itself runs on a supported native Linux
16
  > host, not on Hugging Face. A snapshot is called current only after the
17
  > release-linked sync job verifies its returned Hub commit and full manifest.
@@ -486,6 +486,22 @@ python3 scripts/collect_supported_path_receipt.py \
486
  --manifest receipt-set.json
487
  ```
488
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
  Every manifest entry is checked through the same bounded final-receipt reader
490
  used by single-file verification. Each receipt is limited to 8 KiB and must be
491
  a regular, non-link file with valid UTF-8 JSON and the expected source IDs.
 
11
  ---
12
 
13
  > Official noqt Hugging Face distribution, generated from GitHub commit
14
+ > [`c58505a47c36`](https://github.com/noqt/Lumi-Eggcracker/commit/c58505a47c36d09bda106addf7a584efff47dabd). This Space distributes the source for
15
  > discovery and cloning; Eggcracker itself runs on a supported native Linux
16
  > host, not on Hugging Face. A snapshot is called current only after the
17
  > release-linked sync job verifies its returned Hub commit and full manifest.
 
486
  --manifest receipt-set.json
487
  ```
488
 
489
+ For a shell or CI decision, add `--require-all-supported` to that exact
490
+ summary-only command. This flag is accepted only when both the summary mode
491
+ and its explicit summary opt-in are present; it is rejected for write, verify,
492
+ compare, or any other mode before input is read or output is written. The JSON
493
+ bytes are identical with or without the flag, and a valid summary keeps stderr
494
+ empty: exit `0` means every entry is `supported-success`, exit `1` means at
495
+ least one entry is a declared `reproducible-blocker`, and exit `2` means the
496
+ manifest or a receipt is invalid with no stdout or writes. Without the flag,
497
+ summary exit statuses and bytes remain unchanged.
498
+
499
+ This optional gate is available only from a source checkout or source build
500
+ containing this change; it is not a claim that the signed v1.0.10 package
501
+ provides the flag. It remains a bounded structural/source-identity decision,
502
+ not receipt trust or authenticity, proof of execution or containment, or an
503
+ enforcement action.
504
+
505
  Every manifest entry is checked through the same bounded final-receipt reader
506
  used by single-file verification. Each receipt is limited to 8 KiB and must be
507
  a regular, non-link file with valid UTF-8 JSON and the expected source IDs.
index.html CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
  <meta name="description" content="Lumi Eggcracker is noqt's native Linux kill switch for unapproved supported local-AI workloads. Clone the complete source from Hugging Face.">
7
- <meta name="noqt-source-revision" content="e2dd36acb4ab45506dc2a82ea8bce0c37e235deb">
8
  <meta name="theme-color" content="#090a0c">
9
  <title>Lumi Eggcracker — Native Linux AI kill switch</title>
10
  <style>
@@ -649,7 +649,7 @@ sudo /usr/bin/python3 -I -S scripts/first_kill.py \
649
  <section>
650
  <div class="shell source-bar">
651
  <div>
652
- <div class="source-id">SOURCE COMMIT · e2dd36acb4ab</div>
653
  <h2>Inspect every line.</h2>
654
  <p>Complete source, tests, qualification documents and reproducible proof tooling are distributed in this repository.</p>
655
  </div>
 
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
  <meta name="description" content="Lumi Eggcracker is noqt's native Linux kill switch for unapproved supported local-AI workloads. Clone the complete source from Hugging Face.">
7
+ <meta name="noqt-source-revision" content="c58505a47c36d09bda106addf7a584efff47dabd">
8
  <meta name="theme-color" content="#090a0c">
9
  <title>Lumi Eggcracker — Native Linux AI kill switch</title>
10
  <style>
 
649
  <section>
650
  <div class="shell source-bar">
651
  <div>
652
+ <div class="source-id">SOURCE COMMIT · c58505a47c36</div>
653
  <h2>Inspect every line.</h2>
654
  <p>Complete source, tests, qualification documents and reproducible proof tooling are distributed in this repository.</p>
655
  </div>
scripts/collect_supported_path_receipt.py CHANGED
@@ -701,6 +701,7 @@ def main(argv: Sequence[str] | None = None) -> int:
701
  "--i-opt-in-to-summarize-receipts",
702
  "--i-opt-in-to-summarize-receipt-set",
703
  "--i-opt-in-to-summary",
 
704
  }
705
  for argument in raw_arguments
706
  )
@@ -742,6 +743,11 @@ def main(argv: Sequence[str] | None = None) -> int:
742
  dest="i_opt_in_to_summarize_receipts",
743
  help="explicitly allow a bounded local receipt-set summary",
744
  )
 
 
 
 
 
745
  parser.add_argument(
746
  "--expect-source-commit",
747
  help="expected exact lowercase source commit identity for verification",
@@ -822,11 +828,13 @@ def main(argv: Sequence[str] | None = None) -> int:
822
  arguments.summary_receipts
823
  or arguments.summary_manifest is not None
824
  or arguments.i_opt_in_to_summarize_receipts
 
825
  )
826
  if arguments.verify_receipt is not None:
827
  if (
828
  arguments.i_opt_in_to_write_local_receipt
829
  or arguments.i_opt_in_to_summarize_receipts
 
830
  or arguments.input is not None
831
  or arguments.output is not None
832
  or arguments.summary_manifest is not None
@@ -887,7 +895,11 @@ def main(argv: Sequence[str] | None = None) -> int:
887
  if arguments.summary_manifest is None:
888
  raise ReceiptInputError("summary mode requires --manifest")
889
  summary = summarize_receipts(arguments.summary_manifest)
890
- sys.stdout.write(_encode_summary(summary).decode("utf-8"))
 
 
 
 
891
  return 0
892
  if comparison_requested:
893
  if (
 
701
  "--i-opt-in-to-summarize-receipts",
702
  "--i-opt-in-to-summarize-receipt-set",
703
  "--i-opt-in-to-summary",
704
+ "--require-all-supported",
705
  }
706
  for argument in raw_arguments
707
  )
 
743
  dest="i_opt_in_to_summarize_receipts",
744
  help="explicitly allow a bounded local receipt-set summary",
745
  )
746
+ parser.add_argument(
747
+ "--require-all-supported",
748
+ action="store_true",
749
+ help="exit 1 when a valid receipt-set summary contains a reproducible blocker",
750
+ )
751
  parser.add_argument(
752
  "--expect-source-commit",
753
  help="expected exact lowercase source commit identity for verification",
 
828
  arguments.summary_receipts
829
  or arguments.summary_manifest is not None
830
  or arguments.i_opt_in_to_summarize_receipts
831
+ or arguments.require_all_supported
832
  )
833
  if arguments.verify_receipt is not None:
834
  if (
835
  arguments.i_opt_in_to_write_local_receipt
836
  or arguments.i_opt_in_to_summarize_receipts
837
+ or arguments.require_all_supported
838
  or arguments.input is not None
839
  or arguments.output is not None
840
  or arguments.summary_manifest is not None
 
895
  if arguments.summary_manifest is None:
896
  raise ReceiptInputError("summary mode requires --manifest")
897
  summary = summarize_receipts(arguments.summary_manifest)
898
+ encoded = _encode_summary(summary)
899
+ sys.stdout.write(encoded.decode("utf-8"))
900
+ if arguments.require_all_supported:
901
+ outcome_counts = summary["aggregate"]["outcome_counts"]
902
+ return 1 if outcome_counts["reproducible-blocker"] else 0
903
  return 0
904
  if comparison_requested:
905
  if (
tests/test_collect_supported_path_receipt.py CHANGED
@@ -561,6 +561,125 @@ class SupportedPathReceiptTests(unittest.TestCase):
561
  self.assertEqual(8, summary["aggregate"]["outcome_counts"]["supported-success"])
562
  self.assertLessEqual(len(result.stdout.encode("utf-8")), collector.MAX_SUMMARY_OUTPUT_BYTES)
563
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
564
  def test_summary_cli_requires_distinct_opt_in(self) -> None:
565
  with TemporaryDirectory() as directory:
566
  receipt, _encoded = self.write_final_receipt(directory)
 
561
  self.assertEqual(8, summary["aggregate"]["outcome_counts"]["supported-success"])
562
  self.assertLessEqual(len(result.stdout.encode("utf-8")), collector.MAX_SUMMARY_OUTPUT_BYTES)
563
 
564
+ def test_require_all_supported_keeps_all_success_summary_bytes_and_exits_zero(self) -> None:
565
+ with TemporaryDirectory() as directory:
566
+ entries: list[dict[str, object]] = []
567
+ for index in range(8):
568
+ commit = f"{index + 1:040x}"
569
+ tree = f"{index + 1:064x}"
570
+ receipt, _encoded = self.write_final_receipt(
571
+ directory,
572
+ observed=success_observed(
573
+ source_commit=commit,
574
+ source_tree_sha256=tree,
575
+ ),
576
+ name=f"success-{index}.json",
577
+ )
578
+ entries.append(self.summary_entry(receipt, commit=commit, tree=tree))
579
+ manifest = self.write_summary_manifest(directory, entries)
580
+ unflagged = self.run_summary_cli(manifest)
581
+ flagged = self.run_summary_cli(manifest, extra=["--require-all-supported"])
582
+ self.assertEqual(0, unflagged.returncode)
583
+ self.assertEqual(0, flagged.returncode)
584
+ self.assertEqual(unflagged.stdout, flagged.stdout)
585
+ self.assertEqual("", flagged.stderr)
586
+
587
+ def test_require_all_supported_returns_one_for_blocker_with_identical_summary_bytes(self) -> None:
588
+ with TemporaryDirectory() as directory:
589
+ first, _first_encoded = self.write_final_receipt(
590
+ directory, observed=success_observed(), name="success.json"
591
+ )
592
+ blocker_commit = "c" * 40
593
+ blocker_tree = "d" * 64
594
+ second, _second_encoded = self.write_final_receipt(
595
+ directory,
596
+ observed=blocker_observed(
597
+ source_commit=blocker_commit,
598
+ source_tree_sha256=blocker_tree,
599
+ ),
600
+ name="blocker.json",
601
+ )
602
+ manifest = self.write_summary_manifest(
603
+ directory,
604
+ [
605
+ self.summary_entry(first),
606
+ self.summary_entry(second, commit=blocker_commit, tree=blocker_tree),
607
+ ],
608
+ )
609
+ unflagged = self.run_summary_cli(manifest)
610
+ flagged = self.run_summary_cli(manifest, extra=["--require-all-supported"])
611
+ self.assertEqual(0, unflagged.returncode)
612
+ self.assertEqual(1, flagged.returncode)
613
+ self.assertEqual(unflagged.stdout, flagged.stdout)
614
+ self.assertEqual("", flagged.stderr)
615
+
616
+ def test_require_all_supported_rejects_non_summary_modes_without_partial_output(self) -> None:
617
+ private_marker = "private-require-all-input"
618
+ with TemporaryDirectory() as directory:
619
+ source = Path(directory) / "input.json"
620
+ source_bytes = json.dumps({"private": private_marker}).encode("utf-8")
621
+ source.write_bytes(source_bytes)
622
+ output = Path(directory) / "receipt.json"
623
+ result = subprocess.run(
624
+ [
625
+ sys.executable,
626
+ str(SCRIPT),
627
+ "--require-all-supported",
628
+ "--i-opt-in-to-write-local-receipt",
629
+ "--input",
630
+ str(source),
631
+ "--output",
632
+ str(output),
633
+ ],
634
+ cwd=ROOT,
635
+ capture_output=True,
636
+ check=False,
637
+ text=True,
638
+ )
639
+ self.assertEqual(source_bytes, source.read_bytes())
640
+ self.assertFalse(output.exists())
641
+ self.assertEqual(2, result.returncode)
642
+ self.assertEqual("", result.stdout)
643
+ self.assertTrue(result.stderr.startswith("NOT SUMMARIZED:"))
644
+ self.assertNotIn(private_marker, result.stderr)
645
+
646
+ def test_require_all_supported_requires_summary_opt_in_without_stdout_or_writes(self) -> None:
647
+ with TemporaryDirectory() as directory:
648
+ receipt, receipt_bytes = self.write_final_receipt(directory, name="valid.json")
649
+ manifest = self.write_summary_manifest(
650
+ directory,
651
+ [self.summary_entry(receipt), self.summary_entry(receipt.with_name("missing.json"))],
652
+ )
653
+ manifest_bytes = manifest.read_bytes()
654
+ result = self.run_summary_cli(
655
+ manifest,
656
+ opt_in=False,
657
+ extra=["--require-all-supported"],
658
+ )
659
+ self.assertEqual(receipt_bytes, receipt.read_bytes())
660
+ self.assertEqual(manifest_bytes, manifest.read_bytes())
661
+ self.assertFalse((Path(directory) / "summary.json").exists())
662
+ self.assertEqual(2, result.returncode)
663
+ self.assertEqual("", result.stdout)
664
+ self.assertTrue(result.stderr.startswith("NOT SUMMARIZED:"))
665
+
666
+ def test_require_all_supported_invalid_set_has_no_partial_output_or_input_changes(self) -> None:
667
+ with TemporaryDirectory() as directory:
668
+ receipt, receipt_bytes = self.write_final_receipt(directory, name="valid.json")
669
+ missing = Path(directory) / "missing.json"
670
+ manifest = self.write_summary_manifest(
671
+ directory,
672
+ [self.summary_entry(receipt), self.summary_entry(missing)],
673
+ )
674
+ manifest_bytes = manifest.read_bytes()
675
+ result = self.run_summary_cli(manifest, extra=["--require-all-supported"])
676
+ self.assertEqual(receipt_bytes, receipt.read_bytes())
677
+ self.assertEqual(manifest_bytes, manifest.read_bytes())
678
+ self.assertFalse((Path(directory) / "summary.json").exists())
679
+ self.assertEqual(2, result.returncode)
680
+ self.assertEqual("", result.stdout)
681
+ self.assertTrue(result.stderr.startswith("NOT SUMMARIZED:"))
682
+
683
  def test_summary_cli_requires_distinct_opt_in(self) -> None:
684
  with TemporaryDirectory() as directory:
685
  receipt, _encoded = self.write_final_receipt(directory)