orbitquant 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. {orbitquant-0.1.2 → orbitquant-0.1.3}/.github/workflows/publish-pypi.yml +1 -1
  2. {orbitquant-0.1.2 → orbitquant-0.1.3}/PKG-INFO +38 -2
  3. {orbitquant-0.1.2 → orbitquant-0.1.3}/README.md +36 -0
  4. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/kernel-audit.md +10 -3
  5. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/kernel-hub-approval-request.md +10 -0
  6. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/release-gates.md +70 -5
  7. {orbitquant-0.1.2 → orbitquant-0.1.3}/pyproject.toml +2 -2
  8. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/run_cuda_kernel_checks.sh +2 -2
  9. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/run_mps_kernel_checks.sh +1 -1
  10. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/__init__.py +1 -1
  11. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/cli/main.py +614 -1
  12. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/kernels/native_packed_matmul.py +4 -6
  13. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/layers.py +11 -1
  14. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_cli.py +545 -0
  15. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_native_packed_matmul.py +81 -3
  16. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_optional_dependencies.py +11 -0
  17. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_orbit_linear.py +30 -0
  18. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_readme.py +3 -0
  19. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_release_gates.py +52 -1
  20. {orbitquant-0.1.2 → orbitquant-0.1.3}/uv.lock +3 -3
  21. {orbitquant-0.1.2 → orbitquant-0.1.3}/.github/workflows/ci.yml +0 -0
  22. {orbitquant-0.1.2 → orbitquant-0.1.3}/.gitignore +0 -0
  23. {orbitquant-0.1.2 → orbitquant-0.1.3}/LICENSE +0 -0
  24. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/paper-methodology-audit.md +0 -0
  25. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/publication-checklist.md +0 -0
  26. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/release-0.1.0.md +0 -0
  27. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/release-0.1.1.md +0 -0
  28. {orbitquant-0.1.2 → orbitquant-0.1.3}/docs/release-0.1.2.md +0 -0
  29. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/CARD.md +0 -0
  30. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/benchmarks/benchmark.py +0 -0
  31. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/build.toml +0 -0
  32. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/example.py +0 -0
  33. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/flake.lock +0 -0
  34. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/flake.nix +0 -0
  35. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/orbitquant_packed_matmul_cuda/packed_matmul.cu +0 -0
  36. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/orbitquant_packed_matmul_metal/packed_matmul.metal +0 -0
  37. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/orbitquant_packed_matmul_metal/packed_matmul.mm +0 -0
  38. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/tests/__init__.py +0 -0
  39. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/tests/test_packed_matmul.py +0 -0
  40. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/torch-ext/orbitquant_packed_matmul/__init__.py +0 -0
  41. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/torch-ext/torch_binding.cpp +0 -0
  42. {orbitquant-0.1.2 → orbitquant-0.1.3}/native-kernels/orbitquant-packed-matmul/torch-ext/torch_binding.h +0 -0
  43. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/run_hf_compat_checks.sh +0 -0
  44. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/run_paper_methodology_checks.sh +0 -0
  45. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/runpod_ssh_health.sh +0 -0
  46. {orbitquant-0.1.2 → orbitquant-0.1.3}/scripts/verify_hf_kernel_model_artifact.py +0 -0
  47. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/adaln.py +0 -0
  48. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/__init__.py +0 -0
  49. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/assets.py +0 -0
  50. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/benchmark.py +0 -0
  51. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/checksums.py +0 -0
  52. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/comparisons.py +0 -0
  53. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/loader.py +0 -0
  54. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/manifest.py +0 -0
  55. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/model_card.py +0 -0
  56. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/refresh.py +0 -0
  57. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/repair.py +0 -0
  58. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/validator.py +0 -0
  59. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/artifacts/writer.py +0 -0
  60. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/benchmarks.py +0 -0
  61. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/cli/__init__.py +0 -0
  62. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/codebooks/__init__.py +0 -0
  63. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/codebooks/lloyd_max.py +0 -0
  64. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/config.py +0 -0
  65. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/errors.py +0 -0
  66. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/__init__.py +0 -0
  67. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/assets.py +0 -0
  68. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/external_export.py +0 -0
  69. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/external_metrics.py +0 -0
  70. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/external_plan.py +0 -0
  71. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/metrics.py +0 -0
  72. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/native_plan.py +0 -0
  73. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/native_runner.py +0 -0
  74. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/native_settings.py +0 -0
  75. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/prompts.py +0 -0
  76. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/eval/report.py +0 -0
  77. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/functional.py +0 -0
  78. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/hub.py +0 -0
  79. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/kernels/__init__.py +0 -0
  80. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/kernels/dispatch.py +0 -0
  81. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/kernels/mps.py +0 -0
  82. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/kernels/triton_cuda.py +0 -0
  83. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/modeling.py +0 -0
  84. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/packing/__init__.py +0 -0
  85. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/packing/bitpack.py +0 -0
  86. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/pipeline.py +0 -0
  87. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/__init__.py +0 -0
  88. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/flux.py +0 -0
  89. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/flux2.py +0 -0
  90. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/generic_dit.py +0 -0
  91. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/wan.py +0 -0
  92. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/policies/z_image.py +0 -0
  93. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/quantizer.py +0 -0
  94. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/rotations/__init__.py +0 -0
  95. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/rotations/fwht.py +0 -0
  96. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/rotations/rpbh.py +0 -0
  97. {orbitquant-0.1.2 → orbitquant-0.1.3}/src/orbitquant/transformers_ops.py +0 -0
  98. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_adaln_rtn.py +0 -0
  99. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_artifact_writer.py +0 -0
  100. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_benchmarks.py +0 -0
  101. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_bitpack.py +0 -0
  102. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_ci.py +0 -0
  103. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_cli_report.py +0 -0
  104. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_codebooks.py +0 -0
  105. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_config.py +0 -0
  106. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_diffusers_modelmixin_integration.py +0 -0
  107. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_distribution.py +0 -0
  108. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_eval_assets.py +0 -0
  109. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_eval_prompts.py +0 -0
  110. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_eval_report.py +0 -0
  111. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_external_eval_plan.py +0 -0
  112. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_external_export.py +0 -0
  113. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_hub.py +0 -0
  114. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_kernel_model_verifier.py +0 -0
  115. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_kernels.py +0 -0
  116. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_manifest.py +0 -0
  117. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_model_card.py +0 -0
  118. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_model_quantization.py +0 -0
  119. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_native_kernel_package.py +0 -0
  120. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_native_runner.py +0 -0
  121. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_native_settings.py +0 -0
  122. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_paper_alignment.py +0 -0
  123. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_paper_methodology.py +0 -0
  124. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_pipeline_helpers.py +0 -0
  125. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_policies.py +0 -0
  126. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_prompt_jobs.py +0 -0
  127. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_prompt_selection.py +0 -0
  128. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_quantizer_adapter.py +0 -0
  129. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_rpbh.py +0 -0
  130. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_target_policies.py +0 -0
  131. {orbitquant-0.1.2 → orbitquant-0.1.3}/tests/test_transformers_pretrained_integration.py +0 -0
@@ -6,7 +6,7 @@ on:
6
6
  version:
7
7
  description: Version to publish
8
8
  required: true
9
- default: "0.1.2"
9
+ default: "0.1.3"
10
10
 
11
11
  jobs:
12
12
  build:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orbitquant
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Clean-room OrbitQuant implementation for diffusion transformers
5
5
  Project-URL: Homepage, https://github.com/iamwavecut/OrbitQuant
6
6
  Project-URL: Repository, https://github.com/iamwavecut/OrbitQuant
@@ -39,7 +39,7 @@ Requires-Dist: diffusers>=0.35; extra == 'hf'
39
39
  Requires-Dist: transformers>=4.53; extra == 'hf'
40
40
  Provides-Extra: kernels
41
41
  Requires-Dist: kernels>=0.16; extra == 'kernels'
42
- Requires-Dist: triton>=3.5; extra == 'kernels'
42
+ Requires-Dist: triton>=3.5; (platform_system == 'Linux') and extra == 'kernels'
43
43
  Description-Content-Type: text/markdown
44
44
 
45
45
  # OrbitQuant
@@ -402,6 +402,42 @@ reproduction targets:
402
402
  User-facing comparison assets are generated at the native settings above. Small
403
403
  low-resolution checks are not accepted as published quality evidence.
404
404
 
405
+ To create a local original-vs-OrbitQuant evidence bundle without writing raw
406
+ samples into the model artifact repository, run `compare-native` against a local
407
+ OrbitQuant artifact:
408
+
409
+ ```bash
410
+ orbitquant compare-native \
411
+ --suite flux2-native \
412
+ --artifact ./artifacts/flux2-klein-w4a4 \
413
+ --prompt-id simple-object \
414
+ --output ./reports/native/flux2-klein-w4a4-comparison \
415
+ --device cuda \
416
+ --dtype bfloat16 \
417
+ --runtime-mode auto_fused
418
+ ```
419
+
420
+ The output directory contains the BF16 sample, the OrbitQuant sample, a
421
+ side-by-side WebP comparison, per-split metadata, and `summary.json` with native
422
+ settings, wall time, peak VRAM, requested runtime mode, and available local
423
+ kernel backends. By default `compare-native` validates the completed bundle
424
+ before returning and includes the validation report in its JSON output. Use
425
+ `--skip-comparison-validation` only when you intentionally want to inspect or
426
+ repair an incomplete bundle.
427
+
428
+ Validate a copied or previously generated comparison bundle before using it as
429
+ evidence:
430
+
431
+ ```bash
432
+ orbitquant validate-comparison \
433
+ --input ./reports/native/flux2-klein-w4a4-comparison
434
+ ```
435
+
436
+ The validator accepts bundles copied from a remote GPU host, checks native
437
+ settings and metadata, resolves remote absolute paths by local filename, rejects
438
+ blank-like images, and reports timing, VRAM, and selected OrbitQuant runtime
439
+ counts when the bundle was generated by a recent `compare-native`.
440
+
405
441
  ## Release Metrics
406
442
 
407
443
  Full GenEval and VBench runs are release evidence for paper reproduction,
@@ -358,6 +358,42 @@ reproduction targets:
358
358
  User-facing comparison assets are generated at the native settings above. Small
359
359
  low-resolution checks are not accepted as published quality evidence.
360
360
 
361
+ To create a local original-vs-OrbitQuant evidence bundle without writing raw
362
+ samples into the model artifact repository, run `compare-native` against a local
363
+ OrbitQuant artifact:
364
+
365
+ ```bash
366
+ orbitquant compare-native \
367
+ --suite flux2-native \
368
+ --artifact ./artifacts/flux2-klein-w4a4 \
369
+ --prompt-id simple-object \
370
+ --output ./reports/native/flux2-klein-w4a4-comparison \
371
+ --device cuda \
372
+ --dtype bfloat16 \
373
+ --runtime-mode auto_fused
374
+ ```
375
+
376
+ The output directory contains the BF16 sample, the OrbitQuant sample, a
377
+ side-by-side WebP comparison, per-split metadata, and `summary.json` with native
378
+ settings, wall time, peak VRAM, requested runtime mode, and available local
379
+ kernel backends. By default `compare-native` validates the completed bundle
380
+ before returning and includes the validation report in its JSON output. Use
381
+ `--skip-comparison-validation` only when you intentionally want to inspect or
382
+ repair an incomplete bundle.
383
+
384
+ Validate a copied or previously generated comparison bundle before using it as
385
+ evidence:
386
+
387
+ ```bash
388
+ orbitquant validate-comparison \
389
+ --input ./reports/native/flux2-klein-w4a4-comparison
390
+ ```
391
+
392
+ The validator accepts bundles copied from a remote GPU host, checks native
393
+ settings and metadata, resolves remote absolute paths by local filename, rejects
394
+ blank-like images, and reports timing, VRAM, and selected OrbitQuant runtime
395
+ counts when the bundle was generated by a recent `compare-native`.
396
+
361
397
  ## Release Metrics
362
398
 
363
399
  Full GenEval and VBench runs are release evidence for paper reproduction,
@@ -21,9 +21,9 @@ for the current artifact format and runtime modes.
21
21
  the current environment.
22
22
  - `scripts/run_cuda_kernel_checks.sh` is the CUDA correctness and benchmark
23
23
  gate for GPU hosts. It first tries to load a prebuilt
24
- `native_packed_matmul` package through Hugging Face `kernels`,
25
- `LOCAL_KERNELS`, or an importable package. If no compatible prebuilt package
26
- is available, it fails before starting a source build unless
24
+ `native_packed_matmul` package from an importable `orbitquant_packed_matmul`
25
+ module, then through Hugging Face `kernels`/`LOCAL_KERNELS`. If no compatible
26
+ prebuilt package is available, it fails before starting a source build unless
27
27
  `ORBITQUANT_ALLOW_NATIVE_KERNEL_BUILD=1` is set. With that explicit opt-in,
28
28
  it builds the exact
29
29
  `native-kernels/orbitquant-packed-matmul` kernel-builder redistributable
@@ -284,6 +284,13 @@ for the current artifact format and runtime modes.
284
284
  snapshot model repo resolved to commit
285
285
  `cb0ceb1a4d070556c52cfba691aba3f6647c246b`. The native loader therefore
286
286
  still requires `LOCAL_KERNELS`, an importable package, or Kernel Hub approval.
287
+ - A 2026-07-09T15:06Z live refresh found no new reviewer reply after the
288
+ 2026-07-09T14:00Z model-artifact numbers. Discussion 15 remains open,
289
+ `repo_info("WaveCut/orbitquant-packed-matmul", repo_type="model")` resolves
290
+ to commit `cb0ceb1a4d070556c52cfba691aba3f6647c246b`, and
291
+ `repo_info("WaveCut/orbitquant-packed-matmul", repo_type="kernel")` still
292
+ returns 404. Do not describe the native package as remotely loadable until a
293
+ kernel-type repository exists and `get_kernel(...)` has been verified.
287
294
 
288
295
  ## Packaging Boundary
289
296
 
@@ -170,6 +170,16 @@ approval blocker.
170
170
  On 2026-07-09T14:00Z, `WaveCut` posted those actual model artifact numbers in
171
171
  discussion 15.
172
172
 
173
+ Live status refresh:
174
+
175
+ On 2026-07-09T15:06Z, discussion 15 was still open and no newer reviewer reply
176
+ was present after the 2026-07-09T14:00Z model-artifact numbers. The public
177
+ source snapshot repo still resolved as a model repo at commit
178
+ `cb0ceb1a4d070556c52cfba691aba3f6647c246b`; the kernel-type repository still
179
+ returned 404. The remaining action is Hugging Face Kernel Hub publish approval,
180
+ followed by `kernel-builder build-and-upload` and `get_kernel(...)`
181
+ verification.
182
+
173
183
  ## Title
174
184
 
175
185
  Request Kernel Hub publish access for `WaveCut/orbitquant-packed-matmul`
@@ -196,7 +196,13 @@ URL, or signed-off audit note.
196
196
  source build unless `ORBITQUANT_ALLOW_NATIVE_KERNEL_BUILD=1` is set. A
197
197
  2026-07-09 prebuilt-only loader check still returned 404 for the Kernel Hub
198
198
  repo while the public source snapshot model repo resolved to commit
199
- `cb0ceb1a4d070556c52cfba691aba3f6647c246b`.
199
+ `cb0ceb1a4d070556c52cfba691aba3f6647c246b`. A 2026-07-09T15:06Z live
200
+ refresh confirmed discussion 15 remains open, the public source snapshot
201
+ model repo still resolves to commit
202
+ `cb0ceb1a4d070556c52cfba691aba3f6647c246b`, and
203
+ `repo_info("WaveCut/orbitquant-packed-matmul", repo_type="kernel")` still
204
+ returns 404. The loadable Kernel Hub package therefore remains an external
205
+ approval gate, not a completed release artifact.
200
206
  - [x] Final paper conformance audit is complete against arXiv 2607.02461, with
201
207
  documented deviations, implementation notes, and evidence that accepted
202
208
  deviations are intentional. The required audit checklist is
@@ -228,7 +234,11 @@ URL, or signed-off audit note.
228
234
  metadata, zero remote checksum mismatches, zero README mismatches, and zero
229
235
  forbidden remote files. It also reported `public_count=14`,
230
236
  `private_count=0`, 14/14 policy-inventory-ready, and 144 missing
231
- release-grade metrics.
237
+ release-grade metrics. A 2026-07-09T15:06Z rerun with `--summary-only` and
238
+ the same policy inventory root again passed `--fail-on-artifact-regression`
239
+ with 14/14 artifact-ready, native-smoke-ready, metadata-complete, and
240
+ policy-inventory-ready; it reported `release_eval_applicable_count=10`,
241
+ `release_eval_ready_count=0`, and `missing_required_metric_count=144`.
232
242
  - [x] Full-model module classification inventories are captured for FLUX.2
233
243
  Klein, FLUX.1-schnell, Z-Image-Turbo, and Wan2.1. Raw inventory JSON may
234
244
  remain unpublished, but each published artifact manifest must be
@@ -258,7 +268,9 @@ URL, or signed-off audit note.
258
268
  `repo_count=14`, `artifact_ready_count=14`, `metadata_complete_ready_count=14`,
259
269
  `native_smoke_ready_count=14`, `remote_checksum_mismatch_count=0`,
260
270
  `readme_mismatch_count=0`, `forbidden_file_count=0`, `public_count=14`, and
261
- `private_count=0`.
271
+ `private_count=0`. A 2026-07-09T15:06Z `--summary-only` rerun preserved the
272
+ same compact artifact counts and still reported `forbidden_file_count=0`,
273
+ `remote_checksum_mismatch_count=0`, and `readme_mismatch_count=0`.
262
274
  - [x] The GitHub repository is public, tagged, released, and includes the
263
275
  release docs, license, source distribution expectations, and reproducible
264
276
  verification commands.
@@ -289,7 +301,17 @@ URL, or signed-off audit note.
289
301
  `5972b6cfd1d89653fb9ac17668f72818c61a0e3cc5ea1cdd46e59d54405dc1ff` and
290
302
  `orbitquant-0.1.1-py3-none-any.whl` SHA256
291
303
  `b829c5df00093e697872ca24104e6ef38dbe7e7d70b2c2e33560bfaec224cde1`.
292
- - [x] The PyPI package is published as `orbitquant==0.1.1`.
304
+ Patch release notes for compact artifact audit output are
305
+ [release-0.1.2.md](release-0.1.2.md). GitHub CI for commit `f18feb9`
306
+ passed as run `29025114082`, tag `v0.1.2` points at commit
307
+ `f18feb95f7595965f046b3455997d6ce9b8e8e4a`, and GitHub Release
308
+ `https://github.com/iamwavecut/OrbitQuant/releases/tag/v0.1.2` was published
309
+ on 2026-07-09 with exact PyPI-matching assets:
310
+ `orbitquant-0.1.2.tar.gz` SHA256
311
+ `4afc15589fe713345dfa47be30dc078d943484a1f4bbd4861a413532a6ec8377` and
312
+ `orbitquant-0.1.2-py3-none-any.whl` SHA256
313
+ `3bdddebaa46f60307ed50e2ebf4b7ff4fef7817845b512ecfbb6fbf8ba71c91c`.
314
+ - [x] The PyPI package is published as `orbitquant==0.1.2`.
293
315
  Evidence: commit `ce5c232` added the manual
294
316
  `.github/workflows/publish-pypi.yml` Trusted Publishing workflow. A PyPI
295
317
  pending publisher was registered for project `orbitquant`, owner
@@ -316,6 +338,19 @@ URL, or signed-off audit note.
316
338
  `OrbitQuantConfig().runtime_mode == "auto_fused"`,
317
339
  `OrbitQuantConfig().packed_matmul_block_n == 128`, and
318
340
  `orbitquant --version == "0.1.1"`.
341
+ Patch publish run `29025225397` completed successfully on 2026-07-09 from
342
+ head SHA `f18feb95f7595965f046b3455997d6ce9b8e8e4a`, including full pytest,
343
+ `ruff check`, package build, `twine check`, wheel smoke, OIDC publication,
344
+ and PyPI digital attestations. The PyPI JSON API reports version `0.1.2` with
345
+ `orbitquant-0.1.2.tar.gz` SHA256
346
+ `4afc15589fe713345dfa47be30dc078d943484a1f4bbd4861a413532a6ec8377` and
347
+ `orbitquant-0.1.2-py3-none-any.whl` SHA256
348
+ `3bdddebaa46f60307ed50e2ebf4b7ff4fef7817845b512ecfbb6fbf8ba71c91c`; a fresh
349
+ venv installed `orbitquant==0.1.2` from PyPI and verified
350
+ `orbitquant.__version__ == "0.1.2"`,
351
+ `OrbitQuantConfig().runtime_mode == "auto_fused"`,
352
+ `orbitquant --version == "0.1.2"`, and `orbitquant audit-hf-artifacts --help`
353
+ includes `--summary-only`.
319
354
  - [x] ComfyUI compatibility is verified after the relevant schema stabilizes,
320
355
  including load, graph execution, artifact metadata behavior, and kernel extra
321
356
  install guidance for the default `auto_fused` runtime.
@@ -332,7 +367,37 @@ URL, or signed-off audit note.
332
367
  `ruff`, package build, and `twine check`, and passed GitHub CI run
333
368
  `29020564152` on 2026-07-09. A live GitHub check then reported
334
369
  `iamwavecut/ComfyUI-OrbitQuant` as `PUBLIC`, Apache-2.0 licensed, with
335
- default branch `main`.
370
+ default branch `main`. Follow-up commit `85527ee` required
371
+ `orbitquant>=0.1.1` after the packed-matmul default update and passed
372
+ GitHub CI run `29022774661`. Current commit `4832d4a` requires
373
+ `orbitquant>=0.1.2`, updates the README install commands for both
374
+ `orbitquant>=0.1.2` and `orbitquant[kernels]>=0.1.2`, refreshes `uv.lock`
375
+ to the PyPI `orbitquant` 0.1.2 release hashes, and passed GitHub CI run
376
+ `29027011708` on 2026-07-09. GitHub Release
377
+ `https://github.com/iamwavecut/ComfyUI-OrbitQuant/releases/tag/v0.1.0` was
378
+ published on 2026-07-09T15:12Z from commit
379
+ `4832d4addb39681e82f38e07627a2bb682e4332d` with assets
380
+ `comfyui_orbitquant-0.1.0.tar.gz` SHA256
381
+ `630628c56e5ed35626cd7cca6749c51056cb78a0041b7c1268cf0b5e995d28c0` and
382
+ `comfyui_orbitquant-0.1.0-py3-none-any.whl` SHA256
383
+ `0c774c20a6759bea18d5d02b598035c3446a72ee4efaa0be6c1f325f4b3e928b`.
384
+ Before release, local `uv run pytest -q`, `uv run ruff check .`, package
385
+ build, and `twine check` passed for the node pack. Follow-up commit
386
+ `ca62b7a` added the manual `.github/workflows/publish-pypi.yml` Trusted
387
+ Publishing workflow for a future `comfyui-orbitquant` PyPI release. GitHub
388
+ reported both `CI` and `Publish PyPI` workflows as active, and ComfyUI CI run
389
+ `29028857599` passed on 2026-07-09 with node-pack tests, lint, package
390
+ build, package metadata check, and wheel smoke. The GitHub `pypi`
391
+ environment was created on 2026-07-09T15:21Z. After PyPI password
392
+ confirmation, the pending publisher for `comfyui-orbitquant` was registered
393
+ and workflow run `29029534070` published `comfyui-orbitquant==0.1.0` through
394
+ Trusted Publishing on 2026-07-09. The PyPI version JSON for `0.1.0` reports
395
+ `comfyui_orbitquant-0.1.0-py3-none-any.whl` SHA256
396
+ `0c774c20a6759bea18d5d02b598035c3446a72ee4efaa0be6c1f325f4b3e928b` and
397
+ `comfyui_orbitquant-0.1.0.tar.gz` SHA256
398
+ `9a2c1e23e7c7674bb8fb7c350473c9ad636c952c5495b71d805a91996a00b51f`. A fresh
399
+ venv installed `comfyui-orbitquant==0.1.0` from PyPI and imported
400
+ `comfyui_orbitquant.NODE_CLASS_MAPPINGS`.
336
401
  - [x] MPS shader-only gate can be run independently from the native packed
337
402
  matmul package gate. Evidence: on 2026-07-09,
338
403
  `ORBITQUANT_RUN_NATIVE_KERNEL_PACKAGE_CI=0` with tiny benchmark dimensions
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "orbitquant"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "Clean-room OrbitQuant implementation for diffusion transformers"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -38,7 +38,7 @@ hf = [
38
38
  ]
39
39
  kernels = [
40
40
  "kernels>=0.16",
41
- "triton>=3.5",
41
+ "triton>=3.5; platform_system == 'Linux'",
42
42
  ]
43
43
  eval = [
44
44
  "imageio>=2.37",
@@ -237,14 +237,14 @@ PY
237
237
  printf '%s\n' \
238
238
  "native kernel package CI could not load a compatible prebuilt native packed-matmul kernel." \
239
239
  "The script will not start a kernel-builder/Nix source build unless ORBITQUANT_ALLOW_NATIVE_KERNEL_BUILD=1 is set, because uncached CUDA builds can compile the CUDA/NCCL stack on paid GPU hosts." \
240
- "Use a loadable Hugging Face Kernel Hub artifact, set LOCAL_KERNELS to a compatible built CUDA variant, or rerun with ORBITQUANT_ALLOW_NATIVE_KERNEL_BUILD=1 only on a host where the build cache/toolchain is intentional." \
240
+ "Make a compatible orbitquant_packed_matmul package importable, use a loadable Hugging Face Kernel Hub artifact, set LOCAL_KERNELS to a compatible built CUDA variant, or rerun with ORBITQUANT_ALLOW_NATIVE_KERNEL_BUILD=1 only on a host where the build cache/toolchain is intentional." \
241
241
  >&2
242
242
  exit 1
243
243
  fi
244
244
  if ! command -v nix >/dev/null 2>&1; then
245
245
  printf '%s\n' \
246
246
  "native kernel package CI requires either a loadable prebuilt native packed-matmul kernel or nix for kernel-builder." \
247
- "Install nix, use a GPU image with nix, set LOCAL_KERNELS to a compatible built variant, wait for the Hugging Face kernel repo to become loadable, or set ORBITQUANT_RUN_NATIVE_KERNEL_PACKAGE_CI=0 only when intentionally skipping native package closure." \
247
+ "Install nix, make a compatible orbitquant_packed_matmul package importable, set LOCAL_KERNELS to a compatible built variant, wait for the Hugging Face kernel repo to become loadable, or set ORBITQUANT_RUN_NATIVE_KERNEL_PACKAGE_CI=0 only when intentionally skipping native package closure." \
248
248
  >&2
249
249
  exit 1
250
250
  fi
@@ -94,7 +94,7 @@ if [[ "$RUN_NATIVE_KERNEL_PACKAGE_CI" == "1" && -z "${LOCAL_KERNELS:-}" ]]; then
94
94
  stage "native-packed-matmul-local-variant-missing status=$native_kernel_variant_status"
95
95
  printf '%s\n' \
96
96
  "native packed matmul local variant was not found for this MPS runtime." \
97
- "Set LOCAL_KERNELS=$NATIVE_KERNEL_REPO_ID=/absolute/path/to/a/built/variant containing metadata.json, build the matching kernel-builder variant, or set ORBITQUANT_RUN_NATIVE_KERNEL_PACKAGE_CI=0 to run only the inline Metal shader checks." \
97
+ "Make a compatible orbitquant_packed_matmul package importable, set LOCAL_KERNELS=$NATIVE_KERNEL_REPO_ID=/absolute/path/to/a/built/variant containing metadata.json, build the matching kernel-builder variant, or set ORBITQUANT_RUN_NATIVE_KERNEL_PACKAGE_CI=0 to run only the inline Metal shader checks." \
98
98
  >&2
99
99
  fi
100
100
  fi
@@ -12,7 +12,7 @@ from orbitquant.pipeline import (
12
12
  )
13
13
  from orbitquant.quantizer import register_hf_quantizers
14
14
 
15
- __version__ = "0.1.2"
15
+ __version__ = "0.1.3"
16
16
 
17
17
  register_hf_quantizers()
18
18