unstd 2.1.1__tar.gz → 3.1.0__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 (556) hide show
  1. unstd-3.1.0/.gitattributes +3 -0
  2. unstd-3.1.0/.github/workflows/chaos.yml +75 -0
  3. {unstd-2.1.1 → unstd-3.1.0}/.github/workflows/ci.yml +12 -5
  4. unstd-3.1.0/.github/workflows/concurrency.yml +75 -0
  5. unstd-3.1.0/.github/workflows/fuzz.yml +84 -0
  6. unstd-3.1.0/.github/workflows/release.yml +93 -0
  7. {unstd-2.1.1 → unstd-3.1.0}/.gitignore +3 -0
  8. {unstd-2.1.1 → unstd-3.1.0}/CHANGELOG.md +214 -1
  9. {unstd-2.1.1 → unstd-3.1.0}/PKG-INFO +46 -5
  10. unstd-3.1.0/README.md +92 -0
  11. unstd-3.1.0/bench/README.md +245 -0
  12. {unstd-2.1.1 → unstd-3.1.0}/bench/baseline.json +70 -10
  13. unstd-3.1.0/bench/billy-serde-legacy-results.json +3796 -0
  14. unstd-3.1.0/bench/billy-serde-optimization-results.md +162 -0
  15. unstd-3.1.0/bench/billy-serde-optimized-legacy-results.json +7856 -0
  16. unstd-3.1.0/bench/billy-serde-optimized-results.json +7804 -0
  17. unstd-3.1.0/bench/billy-serde-release-results.json +3776 -0
  18. unstd-3.1.0/bench/billy-serde-results.json +4136 -0
  19. unstd-3.1.0/bench/billy-serde-results.md +133 -0
  20. unstd-3.1.0/bench/billy_serde.py +553 -0
  21. {unstd-2.1.1 → unstd-3.1.0}/bench/cases.py +290 -7
  22. unstd-3.1.0/bench/clone-ids-results.json +3002 -0
  23. unstd-3.1.0/bench/clone-ids-results.md +138 -0
  24. unstd-3.1.0/bench/clone-ids-stdlib-results.json +559 -0
  25. unstd-3.1.0/bench/clone_ids_profile.py +650 -0
  26. unstd-3.1.0/bench/optimization-results.md +95 -0
  27. unstd-3.1.0/bench/serde-results.json +7004 -0
  28. unstd-3.1.0/bench/serde-results.md +144 -0
  29. unstd-3.1.0/bench/serde_profile.py +607 -0
  30. {unstd-2.1.1 → unstd-3.1.0}/changelog.d/README.md +1 -1
  31. unstd-3.1.0/hatch_build.py +84 -0
  32. {unstd-2.1.1 → unstd-3.1.0}/pyproject.toml +46 -4
  33. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/__init__.py +30 -7
  34. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/audio/wavx.py +21 -2
  35. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/clone/structural.py +47 -12
  36. unstd-3.1.0/src/unstd/compress/README.md +45 -0
  37. unstd-3.1.0/src/unstd/compress/__init__.py +5 -0
  38. unstd-3.1.0/src/unstd/compress/_backend.py +64 -0
  39. unstd-3.1.0/src/unstd/compress/_inflate.py +127 -0
  40. unstd-3.1.0/src/unstd/compress/gzipx.py +222 -0
  41. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/token.py +22 -3
  42. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/fs/__init__.py +54 -14
  43. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/ids/README.md +6 -0
  44. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/ids/uid.py +34 -17
  45. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/pack/binpack.py +24 -2
  46. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/proc/__init__.py +45 -10
  47. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rex/README.md +3 -0
  48. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rex/__init__.py +6 -3
  49. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rex/_faithful.py +23 -6
  50. unstd-3.1.0/src/unstd/serde/README.md +318 -0
  51. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/serde/__init__.py +5 -3
  52. unstd-3.1.0/src/unstd/serde/_json_common.py +16 -0
  53. unstd-3.1.0/src/unstd/serde/_json_decode_native.h +411 -0
  54. unstd-3.1.0/src/unstd/serde/_json_encode.py +199 -0
  55. unstd-3.1.0/src/unstd/serde/_json_encode_native.h +119 -0
  56. unstd-3.1.0/src/unstd/serde/_json_lines_native.h +99 -0
  57. unstd-3.1.0/src/unstd/serde/_json_native.c +676 -0
  58. unstd-3.1.0/src/unstd/serde/_json_native.pyi +16 -0
  59. unstd-3.1.0/src/unstd/serde/b64.py +272 -0
  60. unstd-3.1.0/src/unstd/serde/jsonx.py +411 -0
  61. unstd-3.1.0/src/unstd/serde/ndjson.py +336 -0
  62. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/text/fuzz.py +52 -2
  63. unstd-3.1.0/src/unstd/yaml/README.md +48 -0
  64. unstd-3.1.0/src/unstd/yaml/__init__.py +182 -0
  65. unstd-3.1.0/tests/COVERAGE.md +373 -0
  66. unstd-3.1.0/tests/P0.md +79 -0
  67. unstd-3.1.0/tests/README.md +142 -0
  68. unstd-3.1.0/tests/__init__.py +1 -0
  69. unstd-3.1.0/tests/conftest.py +125 -0
  70. unstd-3.1.0/tests/suites/assurance/README.md +12 -0
  71. unstd-3.1.0/tests/suites/assurance/adversarial/chaos/README.md +12 -0
  72. unstd-3.1.0/tests/suites/assurance/adversarial/chaos/conftest.py +39 -0
  73. unstd-3.1.0/tests/suites/assurance/adversarial/chaos/test_clock_entropy.py +368 -0
  74. unstd-3.1.0/tests/suites/assurance/adversarial/chaos/test_fs_process.py +269 -0
  75. unstd-3.1.0/tests/suites/assurance/adversarial/chaos/test_streams.py +511 -0
  76. unstd-3.1.0/tests/suites/assurance/adversarial/concurrency/README.md +18 -0
  77. unstd-3.1.0/tests/suites/assurance/adversarial/concurrency/conftest.py +39 -0
  78. unstd-3.1.0/tests/suites/assurance/adversarial/concurrency/test_filesystem.py +276 -0
  79. unstd-3.1.0/tests/suites/assurance/adversarial/concurrency/test_ids.py +317 -0
  80. unstd-3.1.0/tests/suites/assurance/adversarial/concurrency/test_shared_state.py +131 -0
  81. unstd-3.1.0/tests/suites/assurance/adversarial/fuzz_replay/README.md +21 -0
  82. unstd-3.1.0/tests/suites/assurance/adversarial/fuzz_replay/test_corpus_replay.py +53 -0
  83. unstd-3.1.0/tests/suites/assurance/adversarial/resources/README.md +8 -0
  84. unstd-3.1.0/tests/suites/assurance/evals/performance/README.md +8 -0
  85. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/assurance/gates/bench}/test_bench.py +72 -0
  86. unstd-3.1.0/tests/suites/assurance/gates/bench/test_billy_serde.py +155 -0
  87. unstd-3.1.0/tests/suites/assurance/gates/bench/test_clone_ids_profile.py +96 -0
  88. unstd-3.1.0/tests/suites/assurance/gates/chaos/_campaign_fixtures.py +87 -0
  89. unstd-3.1.0/tests/suites/assurance/gates/chaos/test_cli.py +415 -0
  90. unstd-3.1.0/tests/suites/assurance/gates/chaos/test_execution.py +392 -0
  91. unstd-3.1.0/tests/suites/assurance/gates/chaos/test_process_policy.py +44 -0
  92. unstd-3.1.0/tests/suites/assurance/gates/chaos/test_schedule.py +168 -0
  93. unstd-3.1.0/tests/suites/assurance/gates/chaos/test_workflow.py +132 -0
  94. unstd-3.1.0/tests/suites/assurance/gates/concurrency/test_campaign.py +397 -0
  95. unstd-3.1.0/tests/suites/assurance/gates/concurrency/test_workflow.py +123 -0
  96. unstd-3.1.0/tests/suites/assurance/gates/fuzz/_execution_fixtures.py +75 -0
  97. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_cli.py +463 -0
  98. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_execution.py +318 -0
  99. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_mutate.py +193 -0
  100. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_parser_targets.py +358 -0
  101. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_registry.py +346 -0
  102. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_serde_targets.py +362 -0
  103. unstd-3.1.0/tests/suites/assurance/gates/fuzz/test_workflow.py +144 -0
  104. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/assurance/gates/packaging}/test_package.py +5 -4
  105. unstd-3.1.0/tests/suites/assurance/gates/packaging/test_startup.py +237 -0
  106. unstd-3.1.0/tests/suites/assurance/gates/test_backend_policy.py +21 -0
  107. unstd-3.1.0/tests/suites/assurance/gates/test_optional_collection.py +29 -0
  108. unstd-3.1.0/tests/suites/assurance/gates/test_suite_runner.py +341 -0
  109. unstd-3.1.0/tests/suites/assurance/planes/integration/README.md +8 -0
  110. unstd-3.1.0/tests/suites/assurance/planes/packaging/README.md +94 -0
  111. unstd-3.1.0/tests/suites/assurance/planes/packaging/conftest.py +33 -0
  112. unstd-3.1.0/tests/suites/assurance/planes/packaging/test_artifacts.py +316 -0
  113. unstd-3.1.0/tests/suites/assurance/planes/packaging/test_consumers.py +416 -0
  114. unstd-3.1.0/tests/suites/assurance/planes/packaging/test_extras.py +349 -0
  115. unstd-3.1.0/tests/suites/assurance/planes/packaging/test_typing.py +76 -0
  116. unstd-3.1.0/tests/suites/assurance/security/pentest/README.md +31 -0
  117. unstd-3.1.0/tests/suites/assurance/security/pentest/test_tls_handshakes.py +374 -0
  118. unstd-3.1.0/tests/suites/assurance/security/structure/README.md +8 -0
  119. unstd-3.1.0/tests/suites/product/README.md +14 -0
  120. unstd-3.1.0/tests/suites/product/audio/regression/test_partial_frames.py +59 -0
  121. {unstd-2.1.1/tests/audio → unstd-3.1.0/tests/suites/product/audio/unit}/test_audio.py +41 -0
  122. {unstd-2.1.1/tests/clone → unstd-3.1.0/tests/suites/product/clone/unit}/test_clone.py +131 -0
  123. unstd-3.1.0/tests/suites/product/compress/unit/test_gzipx.py +588 -0
  124. unstd-3.1.0/tests/suites/product/compress/unit/test_gzipx_edges.py +222 -0
  125. unstd-3.1.0/tests/suites/product/crypto/regression/README.md +8 -0
  126. {unstd-2.1.1/tests/crypto → unstd-3.1.0/tests/suites/product/crypto/security}/test_adverse.py +1 -149
  127. unstd-3.1.0/tests/suites/product/crypto/security/test_tls.py +159 -0
  128. unstd-3.1.0/tests/suites/product/crypto/security/test_token_boundary.py +160 -0
  129. unstd-3.1.0/tests/suites/product/fs/integration/README.md +37 -0
  130. unstd-3.1.0/tests/suites/product/fs/integration/test_atomic_failures.py +299 -0
  131. unstd-3.1.0/tests/suites/product/fs/integration/test_atomic_interruption.py +151 -0
  132. unstd-3.1.0/tests/suites/product/fs/integration/test_filesystem_boundaries.py +322 -0
  133. unstd-3.1.0/tests/suites/product/fs/regression/README.md +8 -0
  134. unstd-3.1.0/tests/suites/product/ids/regression/README.md +13 -0
  135. unstd-3.1.0/tests/suites/product/ids/regression/test_fork.py +48 -0
  136. {unstd-2.1.1/tests/ids → unstd-3.1.0/tests/suites/product/ids/unit}/test_uid.py +30 -1
  137. {unstd-2.1.1/tests/pack → unstd-3.1.0/tests/suites/product/pack/unit}/test_pack.py +43 -0
  138. unstd-3.1.0/tests/suites/product/proc/integration/README.md +32 -0
  139. unstd-3.1.0/tests/suites/product/proc/integration/test_process_boundaries.py +330 -0
  140. unstd-3.1.0/tests/suites/product/proc/integration/test_process_lifecycle.py +199 -0
  141. unstd-3.1.0/tests/suites/product/proc/regression/README.md +9 -0
  142. unstd-3.1.0/tests/suites/product/proc/regression/test_interrupt_reaping.py +98 -0
  143. unstd-3.1.0/tests/suites/product/rex/regression/README.md +11 -0
  144. unstd-3.1.0/tests/suites/product/rex/regression/test_cache_concurrency.py +52 -0
  145. unstd-3.1.0/tests/suites/product/rex/regression/test_surrogate_region.py +108 -0
  146. unstd-3.1.0/tests/suites/product/rex/security/test_regex_boundary.py +80 -0
  147. unstd-3.1.0/tests/suites/product/serde/parity/test_b64_parity.py +642 -0
  148. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_decode_fast.py +126 -0
  149. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_decode_parity.py +477 -0
  150. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_encode_parity.py +618 -0
  151. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_fast.py +651 -0
  152. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native.py +555 -0
  153. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native_decode.py +331 -0
  154. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_native_lifecycle.py +113 -0
  155. unstd-3.1.0/tests/suites/product/serde/parity/test_jsonx_proof_boundaries.py +110 -0
  156. unstd-3.1.0/tests/suites/product/serde/properties/test_b64_parity.py +399 -0
  157. unstd-3.1.0/tests/suites/product/serde/properties/test_serde_parity.py +222 -0
  158. unstd-3.1.0/tests/suites/product/serde/regression/README.md +8 -0
  159. unstd-3.1.0/tests/suites/product/serde/security/test_parser_boundaries.py +277 -0
  160. {unstd-2.1.1/tests/serde → unstd-3.1.0/tests/suites/product/serde/unit}/test_b64.py +77 -1
  161. {unstd-2.1.1/tests/serde → unstd-3.1.0/tests/suites/product/serde/unit}/test_jsonx.py +36 -46
  162. {unstd-2.1.1/tests/serde → unstd-3.1.0/tests/suites/product/serde/unit}/test_ndjson.py +189 -0
  163. unstd-3.1.0/tests/suites/product/serde/unit/test_ndjson_typed.py +670 -0
  164. unstd-3.1.0/tests/suites/product/text/unit/test_distance.py +72 -0
  165. unstd-3.1.0/tests/suites/product/yaml/security/test_yaml_boundary.py +163 -0
  166. unstd-3.1.0/tests/suites/product/yaml/unit/test_yaml.py +355 -0
  167. unstd-3.1.0/tests/support/README.md +12 -0
  168. unstd-3.1.0/tests/support/__init__.py +1 -0
  169. unstd-3.1.0/tests/support/anchors.py +8 -0
  170. unstd-3.1.0/tests/support/backends.py +24 -0
  171. unstd-3.1.0/tests/support/chaos.py +154 -0
  172. unstd-3.1.0/tests/support/chaos_clock_entropy.py +356 -0
  173. unstd-3.1.0/tests/support/chaos_fs_process.py +403 -0
  174. unstd-3.1.0/tests/support/chaos_streams.py +183 -0
  175. unstd-3.1.0/tests/support/concurrency_filesystem.py +558 -0
  176. unstd-3.1.0/tests/support/concurrency_ids.py +438 -0
  177. unstd-3.1.0/tests/support/concurrency_shared_state.py +681 -0
  178. unstd-3.1.0/tests/support/hypothesis/README.md +38 -0
  179. unstd-3.1.0/tests/support/hypothesis/__init__.py +1 -0
  180. unstd-3.1.0/tests/support/hypothesis/profiles.py +21 -0
  181. unstd-3.1.0/tests/support/packaging.py +346 -0
  182. unstd-3.1.0/tests/support/parser_cases.py +36 -0
  183. unstd-3.1.0/tests/support/parser_worker.py +134 -0
  184. unstd-3.1.0/tests/support/process.py +104 -0
  185. unstd-3.1.0/tests/support/tls.py +292 -0
  186. unstd-3.1.0/tests/tooling/README.md +16 -0
  187. unstd-3.1.0/tests/tooling/__init__.py +1 -0
  188. unstd-3.1.0/tests/tooling/__main__.py +6 -0
  189. unstd-3.1.0/tests/tooling/bench/README.md +18 -0
  190. unstd-3.1.0/tests/tooling/chaos/README.md +112 -0
  191. unstd-3.1.0/tests/tooling/chaos/__init__.py +1 -0
  192. unstd-3.1.0/tests/tooling/chaos/__main__.py +224 -0
  193. unstd-3.1.0/tests/tooling/chaos/execution.py +502 -0
  194. unstd-3.1.0/tests/tooling/chaos/worker.py +227 -0
  195. unstd-3.1.0/tests/tooling/concurrency/README.md +101 -0
  196. unstd-3.1.0/tests/tooling/concurrency/__init__.py +1 -0
  197. unstd-3.1.0/tests/tooling/concurrency/__main__.py +12 -0
  198. unstd-3.1.0/tests/tooling/fuzz/README.md +214 -0
  199. unstd-3.1.0/tests/tooling/fuzz/__init__.py +1 -0
  200. unstd-3.1.0/tests/tooling/fuzz/__main__.py +268 -0
  201. unstd-3.1.0/tests/tooling/fuzz/atheris_driver.py +122 -0
  202. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/empty-input.bin +0 -0
  203. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/encode-altchars-long.bin +1 -0
  204. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/encode-altchars-pair.bin +1 -0
  205. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/encode-altchars-short.bin +1 -0
  206. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/encode-binary.bin +0 -0
  207. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/mime-full-line.bin +0 -0
  208. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/mime-second-line.bin +0 -0
  209. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/missing-padding.bin +0 -0
  210. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/mixed-alphabets.bin +1 -0
  211. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/native-clean-long.bin +1 -0
  212. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/native-filtered-long.bin +1 -0
  213. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/padded-standard.bin +0 -0
  214. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/padding-only.bin +1 -0
  215. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/partial-group.bin +0 -0
  216. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/raw-nontext-bytes.bin +0 -0
  217. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/seeds.json +167 -0
  218. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/text-nonascii.bin +1 -0
  219. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/text-surrogate.bin +1 -0
  220. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/unused-pad-bits.bin +0 -0
  221. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/url-alphabet.bin +1 -0
  222. unstd-3.1.0/tests/tooling/fuzz/corpus/base64/url-ignored-junk.bin +1 -0
  223. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/concatenated-expansion-budget.bin +0 -0
  224. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/declared-expansion-budget.bin +0 -0
  225. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/empty.bin +0 -0
  226. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/forged-expansion-budget.bin +0 -0
  227. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/generated-concatenation.bin +1 -0
  228. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/generated-crc-error.bin +0 -0
  229. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/generated-level-nine.bin +1 -0
  230. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/generated-stored-level-zero.bin +0 -0
  231. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/generated-truncation.bin +1 -0
  232. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-bad-signature.bin +0 -0
  233. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-concatenated.bin +0 -0
  234. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-crc-corruption.bin +0 -0
  235. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-empty-between-members.bin +0 -0
  236. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-empty-member.bin +0 -0
  237. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-garbage-second-member.bin +0 -0
  238. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-invalid-compression-method.bin +0 -0
  239. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-isize-corruption.bin +0 -0
  240. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-member.bin +0 -0
  241. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-oversized-extra-header.bin +0 -0
  242. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-truncated-deflate.bin +0 -0
  243. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-truncated-trailer.bin +0 -0
  244. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/raw-zero-padding.bin +0 -0
  245. unstd-3.1.0/tests/tooling/fuzz/corpus/gzip/seeds.json +183 -0
  246. unstd-3.1.0/tests/tooling/fuzz/corpus/json/empty-document.bin +0 -0
  247. unstd-3.1.0/tests/tooling/fuzz/corpus/json/empty-input.bin +0 -0
  248. unstd-3.1.0/tests/tooling/fuzz/corpus/json/encode-native-snapshot.bin +1 -0
  249. unstd-3.1.0/tests/tooling/fuzz/corpus/json/encode-rich-values.bin +0 -0
  250. unstd-3.1.0/tests/tooling/fuzz/corpus/json/escaped-lone-surrogate.bin +0 -0
  251. unstd-3.1.0/tests/tooling/fuzz/corpus/json/integer-digit-limit.bin +0 -0
  252. unstd-3.1.0/tests/tooling/fuzz/corpus/json/invalid-leading-zero.bin +0 -0
  253. unstd-3.1.0/tests/tooling/fuzz/corpus/json/invalid-utf8.bin +0 -0
  254. unstd-3.1.0/tests/tooling/fuzz/corpus/json/nesting-limit.bin +0 -0
  255. unstd-3.1.0/tests/tooling/fuzz/corpus/json/nesting-outside-domain.bin +0 -0
  256. unstd-3.1.0/tests/tooling/fuzz/corpus/json/nonfinite-extensions.bin +0 -0
  257. unstd-3.1.0/tests/tooling/fuzz/corpus/json/ordered-duplicate-keys.bin +0 -0
  258. unstd-3.1.0/tests/tooling/fuzz/corpus/json/parsed-encode-surrogate.bin +1 -0
  259. unstd-3.1.0/tests/tooling/fuzz/corpus/json/seeds.json +167 -0
  260. unstd-3.1.0/tests/tooling/fuzz/corpus/json/signed-zero.bin +0 -0
  261. unstd-3.1.0/tests/tooling/fuzz/corpus/json/text-lone-surrogate.bin +1 -0
  262. unstd-3.1.0/tests/tooling/fuzz/corpus/json/truncated-object.bin +0 -0
  263. unstd-3.1.0/tests/tooling/fuzz/corpus/json/utf16-big-endian.bin +0 -0
  264. unstd-3.1.0/tests/tooling/fuzz/corpus/json/utf16-bom.bin +0 -0
  265. unstd-3.1.0/tests/tooling/fuzz/corpus/json/utf32-bom.bin +0 -0
  266. unstd-3.1.0/tests/tooling/fuzz/corpus/json/utf8-unicode.bin +0 -0
  267. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/ascii-exotic-padding.bin +0 -0
  268. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/blank-rows.bin +0 -0
  269. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/crlf-rows.bin +0 -0
  270. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/empty-input.bin +0 -0
  271. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/encode-full-record-set.bin +0 -0
  272. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/escaped-newline-value.bin +0 -0
  273. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/invalid-utf8-row.bin +0 -0
  274. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/maximum-physical-lines.bin +0 -0
  275. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/mixed-invalid-rows.bin +0 -0
  276. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/physical-lines-outside-domain.bin +0 -0
  277. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/quoted-depth-guard.bin +2 -0
  278. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/seeds.json +159 -0
  279. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/text-lone-surrogate.bin +1 -0
  280. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/truncated-final-row.bin +0 -0
  281. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/unicode-exotic-padding.bin +3 -0
  282. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/unicode-line-separators.bin +1 -0
  283. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/utf16-single-row.bin +0 -0
  284. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/utf32-single-row.bin +0 -0
  285. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/valid-final-newline.bin +0 -0
  286. unstd-3.1.0/tests/tooling/fuzz/corpus/ndjson/valid-no-final-newline.bin +0 -0
  287. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/alias-float16.bin +0 -0
  288. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/alias-float64.bin +0 -0
  289. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/alias-int16.bin +0 -0
  290. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/alias-uint64.bin +1 -0
  291. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/decode-double-specials-pipe.bin +0 -0
  292. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/decode-half-specials.bin +0 -0
  293. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/decode-single-specials-big.bin +0 -0
  294. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/empty-multibyte-decode.bin +1 -0
  295. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/empty.bin +0 -0
  296. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-f2-finite.bin +0 -0
  297. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-f4-finite.bin +0 -0
  298. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-f8-finite.bin +0 -0
  299. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-i1-little.bin +0 -0
  300. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-i2-native.bin +0 -0
  301. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-i4-little.bin +0 -0
  302. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-i8-native.bin +0 -0
  303. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-u1-big.bin +0 -0
  304. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-u2-pipe.bin +0 -0
  305. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-u4-big.bin +0 -0
  306. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/encode-u8-pipe.bin +0 -0
  307. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/partial-float32.bin +0 -0
  308. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/partial-float64.bin +0 -0
  309. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/partial-int16.bin +0 -0
  310. unstd-3.1.0/tests/tooling/fuzz/corpus/pack/seeds.json +191 -0
  311. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-bad-backreference.bin +0 -0
  312. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-bad-repeat.bin +0 -0
  313. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-dollar-divergence.bin +0 -0
  314. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-duplicate-name.bin +0 -0
  315. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-lone-surrogate.bin +0 -0
  316. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-nested-repeat.bin +0 -0
  317. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-posix-divergence.bin +0 -0
  318. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/compile-unclosed-class.bin +0 -0
  319. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/empty.bin +0 -0
  320. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-backreference.bin +0 -0
  321. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-lookahead.bin +0 -0
  322. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-nullable-repeat.bin +0 -0
  323. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-nullable.bin +0 -0
  324. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-unicode-ignorecase.bin +0 -0
  325. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/fallback-unicode-subject.bin +0 -0
  326. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/literal-metacharacters.bin +0 -0
  327. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/literal-octet-boundary.bin +0 -0
  328. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-absolute-anchor.bin +0 -0
  329. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-alternation.bin +0 -0
  330. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-bytes-word.bin +0 -0
  331. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-digit-width.bin +0 -0
  332. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-literal-class.bin +0 -0
  333. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-named-word.bin +0 -0
  334. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/native-optional-capture.bin +0 -0
  335. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/seeds.json +215 -0
  336. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/surrogate-region-finding.bin +0 -0
  337. unstd-3.1.0/tests/tooling/fuzz/corpus/rex/surrogate-region-minimized.bin +0 -0
  338. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/deterministic-order.bin +1 -0
  339. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/empty-input.bin +0 -0
  340. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/escaped-lone-surrogate.bin +0 -0
  341. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/escaped-surrogate-pair.bin +0 -0
  342. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/index-maximum.bin +0 -0
  343. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/index-overflow.bin +0 -0
  344. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/label-limit.bin +0 -0
  345. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/label-over-limit.bin +0 -0
  346. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/negative-index.bin +0 -0
  347. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/relaxed-numeric-strings.bin +1 -0
  348. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/row-list-limit.bin +1 -0
  349. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/row-list-over-limit.bin +1 -0
  350. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/row-list.bin +1 -0
  351. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/seeds.json +207 -0
  352. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/sorted-order.bin +1 -0
  353. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/strict-row.bin +0 -0
  354. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/tagged-delete.bin +1 -0
  355. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/tagged-put.bin +1 -0
  356. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/tagged-unknown.bin +1 -0
  357. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/truncated-row.bin +0 -0
  358. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/unknown-field.bin +0 -0
  359. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/utf16-rejected.bin +0 -0
  360. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/utf32-rejected.bin +0 -0
  361. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/utf8-key-error.bin +0 -0
  362. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/utf8-value-error.bin +0 -0
  363. unstd-3.1.0/tests/tooling/fuzz/corpus/structs/wrong-field-type.bin +0 -0
  364. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/arbitrary-invalid-utf8.bin +0 -0
  365. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/authentic-no-json-policy.bin +0 -0
  366. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/authentic-opaque-token.bin +0 -0
  367. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/changed-claims.bin +0 -0
  368. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/claims-generation-limit.bin +1 -0
  369. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/derive-authentic-tampering.bin +0 -0
  370. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/derive-signed-malformed.bin +0 -0
  371. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/empty-input.bin +0 -0
  372. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/extra-separator.bin +0 -0
  373. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/missing-separator.bin +0 -0
  374. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/seeds.json +167 -0
  375. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/signature-pad-bit-alias.bin +0 -0
  376. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/signed-payload-alias.bin +0 -0
  377. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/signed-payload-junk.bin +0 -0
  378. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/signed-payload-padding.bin +0 -0
  379. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/signed-standard-alphabet.bin +0 -0
  380. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/text-lone-surrogate.bin +0 -0
  381. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/text-nonascii.bin +0 -0
  382. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/truncated-signature.bin +0 -0
  383. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/utf16-shaped-token.bin +0 -0
  384. unstd-3.1.0/tests/tooling/fuzz/corpus/tokens/utf32-shaped-token.bin +0 -0
  385. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/empty.bin +0 -0
  386. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/model-boolean-false.bin +1 -0
  387. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/model-boolean-true.bin +1 -0
  388. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/model-empty.bin +1 -0
  389. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/model-escapes.bin +0 -0
  390. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/model-integer-boundary.bin +1 -0
  391. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-array-of-tables.bin +0 -0
  392. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-arrays-tables.bin +0 -0
  393. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-basic.bin +0 -0
  394. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-datetimes.bin +0 -0
  395. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-dotted-key-redefinition.bin +0 -0
  396. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-duplicate-key.bin +0 -0
  397. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-empty.bin +0 -0
  398. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-float-specials.bin +0 -0
  399. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-invalid-utf8.bin +0 -0
  400. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-nested-budget.bin +0 -0
  401. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-nul.bin +0 -0
  402. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-numeric-extrema.bin +0 -0
  403. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-quoted-unicode-key.bin +0 -0
  404. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-string-escapes.bin +0 -0
  405. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/raw-unterminated-array.bin +0 -0
  406. unstd-3.1.0/tests/tooling/fuzz/corpus/toml/seeds.json +175 -0
  407. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/declared-channel-overflow.bin +0 -0
  408. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/declared-data-overflow.bin +0 -0
  409. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/declared-riff-overflow.bin +0 -0
  410. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/empty.bin +0 -0
  411. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-invalid-truncated-riff.bin +0 -0
  412. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-invalid-wrong-magic.bin +0 -0
  413. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-invalid-zero-channels.bin +0 -0
  414. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-mono-48000.bin +0 -0
  415. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-mono-8000.bin +0 -0
  416. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-quad-44100.bin +0 -0
  417. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-stereo-16000.bin +0 -0
  418. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/generated-three-channel-22050.bin +0 -0
  419. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-empty-stereo.bin +0 -0
  420. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-foreign-flac.bin +0 -0
  421. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-missing-format.bin +0 -0
  422. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-mono-extrema.bin +0 -0
  423. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-quad-interleaved.bin +0 -0
  424. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-short-riff.bin +0 -0
  425. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-stereo-interleaved.bin +0 -0
  426. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/raw-truncated-pcm.bin +0 -0
  427. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/regression-declared-partial-pcm-sample.bin +0 -0
  428. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/regression-fmt-extent-outside-riff.bin +0 -0
  429. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/regression-inconsistent-pcm-byte-rate.bin +0 -0
  430. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/regression-truncated-quad-frame.bin +0 -0
  431. unstd-3.1.0/tests/tooling/fuzz/corpus/wav/seeds.json +199 -0
  432. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/alias-expansion-budget.bin +1 -0
  433. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/alias-minimum.bin +0 -0
  434. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/empty.bin +0 -0
  435. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/generated-tag-python-apply.bin +1 -0
  436. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/generated-tag-python-new.bin +1 -0
  437. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/generated-tag-unknown.bin +0 -0
  438. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/known-model-binary.bin +0 -0
  439. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/known-model.bin +1 -0
  440. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-alias-expansion-budget.bin +0 -0
  441. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-basic.bin +0 -0
  442. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-binary-timestamp.bin +0 -0
  443. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-duplicate-key.bin +0 -0
  444. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-float-specials.bin +0 -0
  445. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-invalid-date-finding.bin +0 -0
  446. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-invalid-utf16.bin +0 -0
  447. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-merge-overrides.bin +0 -0
  448. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-multiple-documents.bin +0 -0
  449. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-nul.bin +0 -0
  450. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-python-tag.bin +0 -0
  451. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-recursive-alias.bin +0 -0
  452. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-safe-aliases.bin +0 -0
  453. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-semantic-key-collision.bin +0 -0
  454. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-unclosed-flow.bin +0 -0
  455. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/raw-unknown-tag.bin +0 -0
  456. unstd-3.1.0/tests/tooling/fuzz/corpus/yaml/seeds.json +199 -0
  457. unstd-3.1.0/tests/tooling/fuzz/execution.py +626 -0
  458. unstd-3.1.0/tests/tooling/fuzz/mutate.py +105 -0
  459. unstd-3.1.0/tests/tooling/fuzz/registry.py +310 -0
  460. unstd-3.1.0/tests/tooling/fuzz/registry.toml +111 -0
  461. unstd-3.1.0/tests/tooling/fuzz/targets/__init__.py +1 -0
  462. unstd-3.1.0/tests/tooling/fuzz/targets/base64.py +145 -0
  463. unstd-3.1.0/tests/tooling/fuzz/targets/gzip.py +112 -0
  464. unstd-3.1.0/tests/tooling/fuzz/targets/json.py +208 -0
  465. unstd-3.1.0/tests/tooling/fuzz/targets/ndjson.py +183 -0
  466. unstd-3.1.0/tests/tooling/fuzz/targets/pack.py +84 -0
  467. unstd-3.1.0/tests/tooling/fuzz/targets/rex.py +139 -0
  468. unstd-3.1.0/tests/tooling/fuzz/targets/structs.py +156 -0
  469. unstd-3.1.0/tests/tooling/fuzz/targets/tokens.py +156 -0
  470. unstd-3.1.0/tests/tooling/fuzz/targets/toml.py +69 -0
  471. unstd-3.1.0/tests/tooling/fuzz/targets/wav.py +205 -0
  472. unstd-3.1.0/tests/tooling/fuzz/targets/yaml.py +158 -0
  473. unstd-3.1.0/tests/tooling/fuzz/worker.py +212 -0
  474. unstd-3.1.0/tests/tooling/inventory.toml +172 -0
  475. unstd-3.1.0/tests/tooling/mutation/README.md +68 -0
  476. unstd-3.1.0/tests/tooling/runner.py +250 -0
  477. {unstd-2.1.1 → unstd-3.1.0}/uv.lock +70 -3
  478. unstd-2.1.1/.github/workflows/release.yml +0 -48
  479. unstd-2.1.1/README.md +0 -55
  480. unstd-2.1.1/bench/README.md +0 -124
  481. unstd-2.1.1/src/unstd/serde/README.md +0 -157
  482. unstd-2.1.1/src/unstd/serde/b64.py +0 -127
  483. unstd-2.1.1/src/unstd/serde/jsonx.py +0 -344
  484. unstd-2.1.1/src/unstd/serde/ndjson.py +0 -159
  485. unstd-2.1.1/tests/conftest.py +0 -80
  486. unstd-2.1.1/tests/properties/README.md +0 -13
  487. unstd-2.1.1/tests/properties/test_serde_parity.py +0 -88
  488. {unstd-2.1.1 → unstd-3.1.0}/LICENSE +0 -0
  489. {unstd-2.1.1 → unstd-3.1.0}/NOTICE +0 -0
  490. {unstd-2.1.1 → unstd-3.1.0}/bench/__init__.py +0 -0
  491. {unstd-2.1.1 → unstd-3.1.0}/bench/__main__.py +0 -0
  492. {unstd-2.1.1 → unstd-3.1.0}/bench/report.py +0 -0
  493. {unstd-2.1.1 → unstd-3.1.0}/bench/timing.py +0 -0
  494. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/_extra.py +0 -0
  495. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/audio/README.md +0 -0
  496. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/audio/__init__.py +0 -0
  497. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/clone/README.md +0 -0
  498. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/clone/__init__.py +0 -0
  499. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/containers/README.md +0 -0
  500. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/containers/__init__.py +0 -0
  501. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/containers/persistent.py +0 -0
  502. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/containers/sorted.py +0 -0
  503. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/README.md +0 -0
  504. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/__init__.py +0 -0
  505. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/_blake3.py +0 -0
  506. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/digest.py +0 -0
  507. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/crypto/tls.py +0 -0
  508. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/fs/README.md +0 -0
  509. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/ids/__init__.py +0 -0
  510. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/README.md +0 -0
  511. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/__init__.py +0 -0
  512. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/consecutive.py +0 -0
  513. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/distinct.py +0 -0
  514. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/reshape.py +0 -0
  515. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/iters/select.py +0 -0
  516. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/model/README.md +0 -0
  517. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/model/__init__.py +0 -0
  518. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/model/base.py +0 -0
  519. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/model/settings.py +0 -0
  520. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/pack/README.md +0 -0
  521. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/pack/__init__.py +0 -0
  522. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/proc/README.md +0 -0
  523. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/py.typed +0 -0
  524. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rand/README.md +0 -0
  525. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rand/__init__.py +0 -0
  526. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rand/crypto.py +0 -0
  527. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/rand/draw.py +0 -0
  528. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/serde/structs.py +0 -0
  529. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/text/README.md +0 -0
  530. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/text/__init__.py +0 -0
  531. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/time/README.md +0 -0
  532. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/time/__init__.py +0 -0
  533. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/time/timeutil.py +0 -0
  534. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/time/zoned.py +0 -0
  535. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/toml/README.md +0 -0
  536. {unstd-2.1.1 → unstd-3.1.0}/src/unstd/toml/__init__.py +0 -0
  537. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/product/audio}/properties/test_wav_quant.py +0 -0
  538. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/product/clone}/properties/test_clone_invariants.py +0 -0
  539. {unstd-2.1.1/tests/containers → unstd-3.1.0/tests/suites/product/containers/unit}/test_containers.py +0 -0
  540. {unstd-2.1.1/tests/crypto → unstd-3.1.0/tests/suites/product/crypto/unit}/blake3_reference_vectors.json +0 -0
  541. {unstd-2.1.1/tests/crypto → unstd-3.1.0/tests/suites/product/crypto/unit}/test_vectors.py +0 -0
  542. {unstd-2.1.1/tests/fs → unstd-3.1.0/tests/suites/product/fs/unit}/test_fs.py +0 -0
  543. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/product/ids}/properties/test_uuid7.py +0 -0
  544. {unstd-2.1.1/tests/iters → unstd-3.1.0/tests/suites/product/iters/unit}/test_iters.py +0 -0
  545. {unstd-2.1.1/tests/model → unstd-3.1.0/tests/suites/product/model/unit}/test_model.py +0 -0
  546. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/product/pack}/properties/test_pack_invariants.py +0 -0
  547. {unstd-2.1.1/tests/proc → unstd-3.1.0/tests/suites/product/proc/unit}/test_proc.py +0 -0
  548. {unstd-2.1.1/tests/rand → unstd-3.1.0/tests/suites/product/rand/unit}/test_rand.py +0 -0
  549. {unstd-2.1.1/tests/rex → unstd-3.1.0/tests/suites/product/rex/parity}/test_fidelity.py +0 -0
  550. {unstd-2.1.1/tests/rex → unstd-3.1.0/tests/suites/product/rex/unit}/test_rex.py +0 -0
  551. {unstd-2.1.1/tests/serde → unstd-3.1.0/tests/suites/product/serde/unit}/test_structs.py +0 -0
  552. {unstd-2.1.1/tests/text → unstd-3.1.0/tests/suites/product/text/unit}/test_text.py +0 -0
  553. {unstd-2.1.1/tests/time → unstd-3.1.0/tests/suites/product/time/unit}/test_timeutil.py +0 -0
  554. {unstd-2.1.1/tests/time → unstd-3.1.0/tests/suites/product/time/unit}/test_zoned.py +0 -0
  555. {unstd-2.1.1/tests → unstd-3.1.0/tests/suites/product/toml}/properties/test_toml_invariants.py +0 -0
  556. {unstd-2.1.1/tests/toml → unstd-3.1.0/tests/suites/product/toml/unit}/test_toml.py +0 -0
@@ -0,0 +1,3 @@
1
+ # Reviewed envelopes are exact parser inputs, including whitespace and newlines.
2
+ # Never normalize their bytes during checkout or merge them as text.
3
+ tests/tooling/fuzz/corpus/**/*.bin binary
@@ -0,0 +1,75 @@
1
+ name: chaos
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+ schedule:
8
+ - cron: "43 7 * * *"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: chaos-${{ github.event_name }}-${{ github.ref }}
16
+ cancel-in-progress: ${{ github.event_name != 'schedule' }}
17
+
18
+ jobs:
19
+ inventory:
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 5
22
+ outputs:
23
+ matrix: ${{ steps.groups.outputs.matrix }}
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+ with:
27
+ persist-credentials: false
28
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
29
+ with:
30
+ enable-cache: false
31
+ version: "latest-known"
32
+ python-version: "3.13"
33
+ - id: groups
34
+ shell: bash
35
+ run: |
36
+ matrix=$(uv run --no-project --python 3.13 python -m tests.tooling.chaos list --json)
37
+ printf 'matrix=%s\n' "$matrix" >> "$GITHUB_OUTPUT"
38
+
39
+ campaign:
40
+ needs: inventory
41
+ runs-on: ${{ matrix.os }}
42
+ timeout-minutes: 30
43
+ strategy:
44
+ fail-fast: false
45
+ matrix: ${{ fromJSON(needs.inventory.outputs.matrix) }}
46
+ env:
47
+ ROUNDS: ${{ github.event_name == 'schedule' && '10' || '1' }}
48
+ steps:
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
50
+ with:
51
+ persist-credentials: false
52
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
53
+ with:
54
+ enable-cache: false
55
+ version: "latest-known"
56
+ python-version: "3.13"
57
+ # Both lanes install extras; the stdlib worker blocks acceleration imports
58
+ # before product loading, and propagates that policy into nested workers.
59
+ - run: uv sync --locked --all-extras --group dev --python 3.13
60
+ - name: Recorded faults, interruption and recovery
61
+ run: >-
62
+ uv run --no-sync python -m tests.tooling.chaos run
63
+ --group ${{ matrix.group }} --backend ${{ matrix.backend }}
64
+ --seed 173 --rounds "$ROUNDS"
65
+ --wall-seconds 120 --per-test-seconds 45 --cpu-seconds 60 --memory-mb 2048
66
+ --artifact-dir .local/chaos/
67
+ - name: Retain schedules, observations and failures
68
+ if: always()
69
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
70
+ with:
71
+ name: chaos-${{ matrix.group }}-${{ matrix.backend }}-${{ matrix.os }}-${{ github.run_attempt }}
72
+ path: .local/chaos/
73
+ include-hidden-files: true
74
+ if-no-files-found: error
75
+ retention-days: 14
@@ -35,6 +35,10 @@ jobs:
35
35
  version: "latest-known"
36
36
  python-version: "3.13"
37
37
  - run: uv sync --locked --all-extras --group dev --python 3.13
38
+ - run: uv run --no-sync --python 3.13 python -m tests.tooling check
39
+ - run: uv run --no-sync --python 3.13 python -m tests.tooling.fuzz check
40
+ - run: uv run --no-sync --python 3.13 python -m tests.tooling.chaos check
41
+ - run: uv run --no-sync --python 3.13 python -m tests.tooling.concurrency check
38
42
  - run: uv run --python 3.13 ruff check .
39
43
  - run: uv run --python 3.13 ruff format --check .
40
44
  - run: uv run --python 3.13 mypy
@@ -59,7 +63,8 @@ jobs:
59
63
  version: "latest-known"
60
64
  python-version: ${{ matrix.python-version }}
61
65
  - run: uv sync --locked --all-extras --group dev --python ${{ matrix.python-version }}
62
- - run: uv run --python ${{ matrix.python-version }} pytest -q
66
+ - run: uv build --python ${{ matrix.python-version }} --sdist --wheel --out-dir "$RUNNER_TEMP/unstd-build-cache"
67
+ - run: uv run --no-sync --python ${{ matrix.python-version }} pytest --require-extras -q
63
68
 
64
69
  floors:
65
70
  # Every extra declares a floor, and a floor is a promise: install this old a
@@ -86,11 +91,12 @@ jobs:
86
91
  # Which versions the floors admitted — the first thing anyone reading a
87
92
  # failure here needs, and not recoverable from the traceback.
88
93
  - run: uv pip list
94
+ - run: uv build --python 3.13 --sdist --wheel --out-dir "$RUNNER_TEMP/unstd-build-cache"
89
95
  # `--no-sync` is what makes this job mean anything. A bare `uv run`
90
96
  # re-resolves in the default `highest` mode and quietly reinstalls the
91
97
  # newest of everything first, so the suite would run against the same
92
98
  # environment `test` already covers and pass no matter what the floors say.
93
- - run: uv run --no-sync --python 3.13 pytest -q
99
+ - run: uv run --no-sync --python 3.13 pytest --require-extras -q
94
100
 
95
101
  test-fallback:
96
102
  # A base install (no optional extras) is a load-bearing, documented contract
@@ -100,8 +106,8 @@ jobs:
100
106
  # fixtures inside the suite. This job takes the real path.
101
107
  #
102
108
  # Which modules can't be collected without their extra is decided by
103
- # `tests/conftest.py`, which probes importability rather than carrying a
104
- # list. A hardcoded `--ignore` roster here would be a second copy of that
109
+ # `tests/conftest.py`, which centralizes module importability probes.
110
+ # A hardcoded `--ignore` roster here would be a second copy of that
105
111
  # decision, and the copy that lives in CI is the one nobody updates.
106
112
  runs-on: ubuntu-latest
107
113
  steps:
@@ -114,8 +120,9 @@ jobs:
114
120
  version: "latest-known"
115
121
  python-version: "3.13"
116
122
  - run: uv sync --locked --group dev --python 3.13
123
+ - run: uv build --python 3.13 --sdist --wheel --out-dir "$RUNNER_TEMP/unstd-build-cache"
117
124
  # A diagnostic, not a gate — the zero-closure claim is asserted offline by
118
- # `tests/test_package.py`. This is here because a failure that reproduces
125
+ # `tests/suites/assurance/gates/packaging/test_package.py`. A failure that reproduces
119
126
  # only on the fallback leg is nearly unreadable without knowing which
120
127
  # backends were actually present when it ran (the test tooling drags in a
121
128
  # couple of its own, e.g. hypothesis → sortedcontainers).
@@ -0,0 +1,75 @@
1
+ name: concurrency
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+ schedule:
8
+ - cron: "13 8 * * *"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: concurrency-${{ github.event_name }}-${{ github.ref }}
16
+ cancel-in-progress: ${{ github.event_name != 'schedule' }}
17
+
18
+ jobs:
19
+ inventory:
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 5
22
+ outputs:
23
+ matrix: ${{ steps.groups.outputs.matrix }}
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+ with:
27
+ persist-credentials: false
28
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
29
+ with:
30
+ enable-cache: false
31
+ version: "latest-known"
32
+ python-version: "3.13"
33
+ - id: groups
34
+ shell: bash
35
+ run: |
36
+ matrix=$(uv run --no-project --python 3.13 python -m tests.tooling.concurrency list --json)
37
+ printf 'matrix=%s\n' "$matrix" >> "$GITHUB_OUTPUT"
38
+
39
+ campaign:
40
+ needs: inventory
41
+ runs-on: ${{ matrix.os }}
42
+ timeout-minutes: 30
43
+ strategy:
44
+ fail-fast: false
45
+ matrix: ${{ fromJSON(needs.inventory.outputs.matrix) }}
46
+ env:
47
+ ROUNDS: ${{ github.event_name == 'schedule' && '10' || '1' }}
48
+ steps:
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
50
+ with:
51
+ persist-credentials: false
52
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
53
+ with:
54
+ enable-cache: false
55
+ version: "latest-known"
56
+ python-version: "3.13"
57
+ # Both lanes install extras; the stdlib worker blocks acceleration imports
58
+ # before product loading, and propagates that policy into nested workers.
59
+ - run: uv sync --locked --all-extras --group dev --python 3.13
60
+ - name: Recorded overlap, ordering and isolation
61
+ run: >-
62
+ uv run --no-sync python -m tests.tooling.concurrency run
63
+ --group ${{ matrix.group }} --backend ${{ matrix.backend }}
64
+ --seed 173 --rounds "$ROUNDS"
65
+ --wall-seconds 120 --per-test-seconds 45 --cpu-seconds 60 --memory-mb 2048
66
+ --artifact-dir .local/concurrency/
67
+ - name: Retain schedules, observations and failures
68
+ if: always()
69
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
70
+ with:
71
+ name: concurrency-${{ matrix.group }}-${{ matrix.backend }}-${{ matrix.os }}-${{ github.run_attempt }}
72
+ path: .local/concurrency/
73
+ include-hidden-files: true
74
+ if-no-files-found: error
75
+ retention-days: 14
@@ -0,0 +1,84 @@
1
+ name: fuzz
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+ schedule:
8
+ - cron: "23 6 * * *"
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: fuzz-${{ github.event_name }}-${{ github.ref }}
16
+ cancel-in-progress: ${{ github.event_name != 'schedule' }}
17
+
18
+ jobs:
19
+ inventory:
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 5
22
+ outputs:
23
+ matrix: ${{ steps.targets.outputs.matrix }}
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+ with:
27
+ persist-credentials: false
28
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
29
+ with:
30
+ enable-cache: false
31
+ version: "latest-known"
32
+ python-version: "3.12"
33
+ - id: targets
34
+ shell: bash
35
+ run: |
36
+ matrix=$(uv run --no-project --python 3.12 python -m tests.tooling.fuzz list --json --all-backends)
37
+ printf 'matrix=%s\n' "$matrix" >> "$GITHUB_OUTPUT"
38
+
39
+ campaign:
40
+ needs: inventory
41
+ runs-on: ubuntu-latest
42
+ timeout-minutes: 10
43
+ strategy:
44
+ fail-fast: false
45
+ matrix: ${{ fromJSON(needs.inventory.outputs.matrix) }}
46
+ env:
47
+ RUNS: ${{ github.event_name == 'schedule' && '100000' || '1000' }}
48
+ WALL: ${{ github.event_name == 'schedule' && '120' || '30' }}
49
+ CPU: ${{ github.event_name == 'schedule' && '110' || '20' }}
50
+ steps:
51
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
52
+ with:
53
+ persist-credentials: false
54
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
55
+ with:
56
+ enable-cache: false
57
+ version: "latest-known"
58
+ python-version: "3.12"
59
+ # Atheris has a tested binary wheel here; it is a development group,
60
+ # never a runtime dependency or a silently substituted mutation engine.
61
+ - run: uv sync --locked --all-extras --group dev --group fuzz --python 3.12
62
+ - name: Replay and deterministic mutation
63
+ run: >-
64
+ uv run --no-sync python -m tests.tooling.fuzz campaign
65
+ --target ${{ matrix.target }} --backend ${{ matrix.backend }}
66
+ --engine deterministic --runs 1000 --seed 173
67
+ --wall-seconds 30 --cpu-seconds 20
68
+ --artifact-dir .local/fuzz/deterministic
69
+ - name: Instrumented Python coverage campaign
70
+ run: >-
71
+ uv run --no-sync python -m tests.tooling.fuzz campaign
72
+ --target ${{ matrix.target }} --backend ${{ matrix.backend }}
73
+ --engine atheris --runs "$RUNS" --seed 173
74
+ --wall-seconds "$WALL" --cpu-seconds "$CPU"
75
+ --artifact-dir .local/fuzz/atheris
76
+ - name: Retain reports, findings, and coverage corpus
77
+ if: always()
78
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
79
+ with:
80
+ name: fuzz-${{ matrix.target }}-${{ matrix.backend }}-${{ github.run_attempt }}
81
+ path: .local/fuzz/
82
+ include-hidden-files: true
83
+ if-no-files-found: error
84
+ retention-days: 14
@@ -0,0 +1,93 @@
1
+ # Build and verify native wheels before publishing a version tag to PyPI.
2
+ #
3
+ # ONE-TIME SETUP: PyPI Trusted Publishing, no API token in this repo.
4
+ # On PyPI, add a trusted publisher for the `unstd` project pointing at this
5
+ # repository, workflow `release.yml`, environment `pypi`. Before the project
6
+ # exists this is a pending publisher under Your projects -> Publishing.
7
+ name: release
8
+
9
+ on:
10
+ push:
11
+ tags: ["v*"]
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ # A tag push used to publish unconditionally — nothing stood between `git tag`
19
+ # and PyPI, and a release is the one artifact that cannot be taken back. The
20
+ # full CI gate (lint + type + the 3.12/3.13/3.14 matrix + the base-install
21
+ # fallback leg) runs first, by reference rather than by copy, so the bar is
22
+ # the same one every pull request clears.
23
+ gate:
24
+ uses: ./.github/workflows/ci.yml
25
+ permissions:
26
+ contents: read
27
+
28
+ wheels:
29
+ needs: gate
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ os: [ubuntu-latest, ubuntu-24.04-arm, macos-15-intel, macos-14, windows-latest, windows-11-arm]
34
+ runs-on: ${{ matrix.os }}
35
+ steps:
36
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
37
+ with:
38
+ persist-credentials: false
39
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
40
+ with:
41
+ enable-cache: false
42
+ version: "latest-known"
43
+ - name: Build and test CPython wheels
44
+ run: uvx --from cibuildwheel==4.3.1 cibuildwheel --output-dir dist
45
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
46
+ with:
47
+ name: wheels-${{ matrix.os }}
48
+ path: dist/*.whl
49
+ if-no-files-found: error
50
+
51
+ sdist:
52
+ needs: gate
53
+ runs-on: ubuntu-latest
54
+ steps:
55
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
56
+ with:
57
+ persist-credentials: false
58
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
59
+ with:
60
+ enable-cache: false
61
+ version: "latest-known"
62
+ - run: uv build --sdist
63
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
64
+ with:
65
+ name: source
66
+ path: dist/*.tar.gz
67
+ if-no-files-found: error
68
+
69
+ pypi:
70
+ needs: [wheels, sdist]
71
+ if: startsWith(github.ref, 'refs/tags/v')
72
+ runs-on: ubuntu-latest
73
+ environment: pypi
74
+ permissions:
75
+ id-token: write
76
+ steps:
77
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
78
+ with:
79
+ path: dist
80
+ merge-multiple: true
81
+ - name: The tag agrees with package metadata
82
+ env:
83
+ TAG: ${{ github.ref_name }}
84
+ run: |
85
+ python - <<'PY'
86
+ import os, pathlib, tarfile, tomllib
87
+ source, = pathlib.Path("dist").glob("*.tar.gz")
88
+ with tarfile.open(source) as archive:
89
+ manifest, = (item for item in archive.getmembers() if item.name.endswith("/pyproject.toml"))
90
+ version = tomllib.loads(archive.extractfile(manifest).read().decode())["project"]["version"]
91
+ assert os.environ["TAG"] == "v" + version
92
+ PY
93
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -2,6 +2,9 @@
2
2
  __pycache__/
3
3
  *.py[cod]
4
4
  *.egg-info/
5
+ *.so
6
+ *.pyd
7
+ build/
5
8
  .venv/
6
9
  dist/
7
10
  .pytest_cache/
@@ -8,7 +8,7 @@ doc_radar:
8
8
  - file: .github/workflows/ci.yml
9
9
  contains: ['github.sha || github.ref', 'version: "latest-known"', 'uv sync --locked']
10
10
  - file: .github/workflows/release.yml
11
- contains: ['TAG: ${{ github.ref_name }}', 'uv version --short']
11
+ contains: ['TAG: ${{ github.ref_name }}', 'Build and test CPython wheels']
12
12
  - file: src/unstd/serde/structs.py
13
13
  contains: ['Callable[[Decimal], object]', 'decimal_format: _DecimalFormat']
14
14
  ---
@@ -17,6 +17,219 @@ doc_radar:
17
17
 
18
18
  <!-- towncrier release notes start -->
19
19
 
20
+ ## [3.1.0] - 2026-10-20
21
+
22
+ ### Performance
23
+
24
+ - JSON encoding can use an optional CPython native guard that checks exact
25
+ builtin trees and calls orjson while retaining the GIL. Larger text records
26
+ avoid 3.0.0's Python snapshot budget and stdlib fallback. Compiler-less source
27
+ builds retain the portable path; release wheels include the guard.
28
+ - Native default spacing preserves punctuation and escaped quotes inside text,
29
+ avoiding the stdlib fallback for larger string-heavy records.
30
+ - Untyped JSON decoding reuses msgspec's arbitrary-precision integer and correctly
31
+ rounded float decoder, with a bounded native proof enabling orjson for larger
32
+ records. CPython 3.14 native dispatch preserves Python function metadata and
33
+ falls back during instrumentation. Custom options, unsupported inputs and
34
+ native errors retain stdlib behavior.
35
+ - NDJSON writes use the same guarded encoder's native trailing-newline option,
36
+ avoiding redundant public dispatch and an extra output copy per record.
37
+ - Whole-blob NDJSON reads batch native parsing over strict physical newline
38
+ boundaries. Streaming reads, callbacks and error diagnostics keep their
39
+ existing behavior.
40
+ - Added an output-checked Billy fixture comparison with source and fixture
41
+ fingerprints, alternating before/after CPU batches, direct-call companions and
42
+ an optional release-regression gate. The measurement report retains residual
43
+ costs relative to the permissive 2.1.1 codec; no universal speedup or
44
+ zero-overhead compatibility claim is made. Public APIs are unchanged.
45
+
46
+ ### Fixed
47
+
48
+ - Native codec reinitialization keeps earlier helpers' configuration checks and
49
+ Python fallbacks valid. Module destruction also releases watchers and owned
50
+ references when garbage collection has not run the clear hook first.
51
+
52
+ ## [3.0.0] - 2026-10-19
53
+
54
+ ### Breaking
55
+
56
+ - `serde.jsonx` now guarantees the running stdlib's JSON defaults and semantics.
57
+ `dump` and `dumps` use `ensure_ascii=True` and default spaces, replacing the
58
+ previous compact, unescaped output. To retain compact text, pass
59
+ `ensure_ascii=False, separators=(",", ":")` explicitly. Dataclasses, UUIDs and
60
+ plain enums now require an explicit encoder or `default`, as they do in
61
+ stdlib `json`; orjson-only type acceptance is removed.
62
+ - JSON numbers retain their values: arbitrary precision integers no longer fail
63
+ on encode or silently become floats on decode, and non-finite floats follow
64
+ stdlib's `NaN`/infinity behavior instead of silently becoming `null`.
65
+ `allow_nan=False` rejects them. Unicode and lone surrogates, UTF-16/32 binary
66
+ input, supported subclasses, key coercion/sorting, callbacks, custom codec
67
+ keywords, error diagnostics and interpreter limits follow stdlib too.
68
+ `dump` preserves streamed writes, including partial output before a later
69
+ encoding or write failure; `load` reads once through the guarded parser.
70
+ - `jsonx.dumpb` now preserves exact compact stdlib float notation across
71
+ backends, which can change serialized bytes. NDJSON and Base64 JSON helpers
72
+ preserve the same numeric values. NDJSON wraps Unicode, integer-limit and
73
+ recursion failures with physical line numbers and honors `skip_errors=True`.
74
+
75
+ ### Added
76
+
77
+ - `unstd.yaml`, behind `unstd[yaml]`, provides safe YAML 1.2 native-value
78
+ loading, multi-document streams, and comment-preserving parse/edit/write.
79
+ Duplicate keys and unknown tags are rejected; parser instances and scalar
80
+ semantics are isolated from optional C extensions. The base install keeps
81
+ zero third-party dependencies.
82
+ - `unstd.compress.gzipx`, behind `unstd[compress]`, accelerates gzip file and
83
+ one-shot operations with zlib-ng, with exact stdlib bindings on a base
84
+ install. Streams retain stdlib framing, ownership, modes, seeking and error
85
+ families; one-shot defaults follow the running interpreter. Compressed bytes
86
+ may differ between codecs while recovered content remains identical.
87
+ - NDJSON readers and writers accept a reusable `structs.Codec` through `codec=`.
88
+ Readers decode each row directly into its validated schema, preserving
89
+ physical line numbers and schema paths on errors. `on_error` reports each
90
+ rejected record once before the normal raise or explicit skip. Untyped
91
+ streaming still works on a base install, and typed processing reuses the
92
+ existing serde extra.
93
+ - Base64 exposes stdlib-compatible `b64encode`/`b64decode`, standard and URL-safe
94
+ functions, MIME byte helpers and `encode_file`/`decode_file` stream helpers
95
+ alongside the convenience API. Standard defaults, alternative alphabets,
96
+ buffer handling, exception types and diagnostics follow the running stdlib.
97
+ Acceleration is limited to plain-byte encoding and strict ASCII decoding;
98
+ other cases and native decode failures use stdlib.
99
+ - Eleven executable parser/token fuzz targets use independent oracles,
100
+ authenticated synthetic seed corpora, finite pytest replay, deterministic
101
+ mutations, and isolated Atheris campaigns. Workers preserve exact failures
102
+ and enforce wall/input deadlines, POSIX CPU limits and Linux address-space
103
+ limits. CI runs bounded pull-request campaigns and deeper nightly coverage
104
+ campaigns, retaining reports and generated corpora. Harness canaries verify
105
+ that incorrect results, unexpected exceptions, crashes and exhausted budgets
106
+ fail the run.
107
+ - Recorded chaos campaigns cover mixed filesystem/process histories,
108
+ handshaken writer interruption, stream failures and clock/entropy outages.
109
+ Bounded installed/fallback workers, seed replay, exact fault journals, strict
110
+ completion controls and Linux/macOS pull-request/nightly CI campaigns retain
111
+ recovery evidence. Ordinary correctness discovery stays separate from
112
+ explicit chaos runs.
113
+ - Recorded concurrency campaigns cover atomic filesystem histories, UUID
114
+ contention/fork safety, and shared clone/regex/codec/YAML/map isolation.
115
+ Independent models, broken-result controls, bounded installed/stdlib workers,
116
+ lane-specific replay and Linux/macOS pull-request/nightly jobs retain
117
+ schedules and observations. This explicit lane stays outside default pytest;
118
+ owning defect regressions remain in ordinary validation.
119
+
120
+ ### Changed
121
+
122
+ - Native JSON acceleration now requires bounded eligibility proofs. Encoding
123
+ snapshots at most 16 exact builtin values before calling orjson, retaining
124
+ exact whitespace and escaping; other inputs use cached or direct stdlib
125
+ encoders. Decoding verifies the complete backend result and falls back to
126
+ stdlib for every float, including lossy large-integer conversions.
127
+ Hooks/custom codecs bypass speculation; deep or unproven cases and backend
128
+ errors retry the original input with stdlib. Callback isolation, snapshot
129
+ mutation, DEL escaping and near-limit recursion failures have generated
130
+ contracts that also assert real backend use.
131
+ - JSON type annotations accept duck-typed writers and typed `default`
132
+ callbacks. The `numpy=True` conversion extension is consistent across
133
+ backends. With an explicit custom `cls`, `dump`/`dumps` forward all
134
+ constructor keywords unchanged. Differential tests use the running stdlib as
135
+ the authority across Python 3.12–3.14 and optional-backend/base configurations;
136
+ generated cases include large integers, non-finite values, lone surrogates,
137
+ mixed keys, formatting options, binary encodings and malformed input.
138
+ - The test suite follows Billy's Python organization: module-owned contracts
139
+ under `tests/suites/product`, cross-cutting assurance under
140
+ `tests/suites/assurance`, shared support, and standalone tooling. A validated
141
+ inventory distinguishes active coverage from planned lanes and provides
142
+ `python -m tests.tooling list|check|run`. CI checks inventory drift; pytest
143
+ uses strict markers and shared generation profiles. Existing TLS policy tests
144
+ run without the BLAKE3 extra. The coverage plan maps remaining property, fuzz,
145
+ penetration, fault, installation, concurrency, resource and performance work
146
+ without counting scaffolding as implemented tests. Wall-clock benchmark
147
+ calibration assertions use the explicit `perf` marker, outside ordinary
148
+ correctness runs.
149
+ - P0 assurance builds and installs real artifacts in pristine consumers, checks
150
+ independent optional-extra installations, performs real loopback TLS
151
+ handshakes, injects filesystem/process failures, and challenges parser and
152
+ token boundaries with independent controls and bounded workers. Required CI
153
+ execution fails when declared extras are unavailable.
154
+
155
+ ### Fixed
156
+
157
+ - Installed-extra checks use locked artifact URLs and hashes for offline
158
+ consumers, including source-built dependencies at declared floors. Crash
159
+ controls allow Python 3.14 diagnostics to finish while retaining the short
160
+ intentional-hang deadline.
161
+ - YAML fuzzing compares scalar `ValueError` exceptions from malformed dates
162
+ with the reference parser, retaining exact error types and messages. The
163
+ discovered invalid-date input is preserved in the authenticated seed corpus.
164
+ - URL convenience Base64 decoding behaves the same with and without pybase64:
165
+ ignored characters no longer interfere with missing-padding repair,
166
+ completed padding preserves stdlib's handling of trailing data, non-ASCII
167
+ text raises stdlib's `ValueError`, and strided decoding buffers work. URL
168
+ decoding no longer emits pybase64's alternate-alphabet warnings. Strict
169
+ validation still accepts nonzero unused pad bits, as stdlib does; it does not
170
+ promise canonical spelling. Independent differential and generated
171
+ malformed-input contracts cover native and fallback paths. The decode
172
+ benchmark compares the same strict validation mode on both paths.
173
+ - Process timeouts must be positive and finite. Filesystem rollback preserves
174
+ scratch-descriptor ownership and the original error, and directory syncing
175
+ remains best effort. Bearer-token envelopes require strict canonical
176
+ Base64url spelling, and non-ASCII MACs are rejected. The general-purpose URL
177
+ Base64 codec retains its documented lenient behavior. Editable YAML supports
178
+ standard `!!str` construction.
179
+ - Native WAV writes select the WAV format for file-like, extensionless and
180
+ misleading-extension outputs in both one-shot and streaming writers, pinned
181
+ by independent audio-extra consumer tests.
182
+ - Confirmed surrogate-region regex and truncated PCM frame findings remain as
183
+ module-owned regressions and corpus entries. Faithful regex recovery is
184
+ selected before exposing lazy match projections; incomplete PCM frames are
185
+ rejected explicitly.
186
+ - `proc.run` kills and reaps its direct child before propagating cancellation,
187
+ including the `KeyboardInterrupt` path where `subprocess.run` could return
188
+ with an unreaped child. Captured output, timeout behavior and callback
189
+ semantics are preserved; real SIGINT regressions cover `run`, `capture` and
190
+ `run_ok`, including recovery.
191
+ - The Python UUIDv7 fallback resets its lock and counter state after POSIX fork
192
+ so a child can generate IDs even when a vanished parent thread held the
193
+ counter lock. The parent's state and selected UUID backend are preserved;
194
+ a bounded ordinary regression and controlled concurrency histories pin the
195
+ deadlock.
196
+ - Concurrent regular-expression cache misses no longer exceed the documented
197
+ 512-entry limit when multiple threads select the same oldest entry. Compiles
198
+ publish before trimming and retry lost evictions. A bounded regression forces
199
+ the duplicate-oldest interleaving against native and stdlib backends.
200
+ - Package metadata lookup is deferred until `unstd.__version__` is requested
201
+ and the result is cached. Importing submodules such as
202
+ `unstd.serde.structs` avoids that startup cost while retaining the same native
203
+ codecs, parsing behavior and metadata-derived version, including the
204
+ uninstalled-source fallback.
205
+
206
+ ### Performance
207
+
208
+ - Reduce JSON eligibility and compact-encoding overhead, accelerate URL-safe
209
+ Base64 decoding, and improve structural cloning and stdlib array packing.
210
+ The portable Levenshtein fallback evaluates packed dynamic-programming
211
+ columns. Public call signatures, serialized formats and optional dependencies
212
+ for these hot-path optimizations stay the same; parity and regression tests
213
+ cover the optimized boundaries.
214
+ - Reduce serde dispatch and allocation overhead for default JSON encoding,
215
+ small decoded JSON values, integer snapshot proofs, short Base64 decoding
216
+ and NDJSON writer setup. These optimizations preserve public signatures,
217
+ codec policies, output and error semantics. A repeatable complete function
218
+ profile includes output-checked native/fallback benchmarks and explicit API
219
+ comparisons.
220
+ - Reduce duplicate private-attribute traversal when cloning Pydantic models
221
+ and the dataclass conversion entry check. Remove redundant integer
222
+ conversion, branching and bit assembly in the portable UUIDv7 generator.
223
+ Existing APIs, direct stdlib aliases, secure entropy and synchronized counter
224
+ behavior remain. Custom dataclass constructor arguments and msgspec copy
225
+ reducers defer to the stdlib copy protocol. Reproducible per-function
226
+ clone/UUID profiles and paired workload timings include output validation,
227
+ unchanged-signature checks and explicit coverage gaps.
228
+ - JSON benchmarks separately measure fallback records and eligible
229
+ text/integer cases. Python 3.13.14 measured 5.98× text encoding and 1.91×
230
+ integer-array decoding. The old speed floors covered incompatible behavior
231
+ and were reset; no uniform speedup is promised.
232
+
20
233
  ## [2.1.1] - 2026-10-04
21
234
 
22
235
  ### Fixed