unstd 2.1.1__tar.gz → 3.0.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 (536) hide show
  1. unstd-3.0.0/.gitattributes +3 -0
  2. unstd-3.0.0/.github/workflows/chaos.yml +75 -0
  3. {unstd-2.1.1 → unstd-3.0.0}/.github/workflows/ci.yml +12 -5
  4. unstd-3.0.0/.github/workflows/concurrency.yml +75 -0
  5. unstd-3.0.0/.github/workflows/fuzz.yml +84 -0
  6. {unstd-2.1.1 → unstd-3.0.0}/CHANGELOG.md +181 -0
  7. {unstd-2.1.1 → unstd-3.0.0}/PKG-INFO +40 -5
  8. {unstd-2.1.1 → unstd-3.0.0}/README.md +35 -4
  9. unstd-3.0.0/bench/README.md +245 -0
  10. {unstd-2.1.1 → unstd-3.0.0}/bench/baseline.json +70 -10
  11. {unstd-2.1.1 → unstd-3.0.0}/bench/cases.py +290 -7
  12. unstd-3.0.0/bench/clone-ids-results.json +3002 -0
  13. unstd-3.0.0/bench/clone-ids-results.md +138 -0
  14. unstd-3.0.0/bench/clone-ids-stdlib-results.json +559 -0
  15. unstd-3.0.0/bench/clone_ids_profile.py +650 -0
  16. unstd-3.0.0/bench/optimization-results.md +95 -0
  17. unstd-3.0.0/bench/serde-results.json +7004 -0
  18. unstd-3.0.0/bench/serde-results.md +144 -0
  19. unstd-3.0.0/bench/serde_profile.py +605 -0
  20. {unstd-2.1.1 → unstd-3.0.0}/changelog.d/README.md +1 -1
  21. {unstd-2.1.1 → unstd-3.0.0}/pyproject.toml +32 -3
  22. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/__init__.py +29 -6
  23. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/audio/wavx.py +21 -2
  24. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/clone/structural.py +47 -12
  25. unstd-3.0.0/src/unstd/compress/README.md +45 -0
  26. unstd-3.0.0/src/unstd/compress/__init__.py +5 -0
  27. unstd-3.0.0/src/unstd/compress/_backend.py +64 -0
  28. unstd-3.0.0/src/unstd/compress/_inflate.py +127 -0
  29. unstd-3.0.0/src/unstd/compress/gzipx.py +222 -0
  30. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/token.py +22 -3
  31. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/fs/__init__.py +54 -14
  32. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/ids/README.md +6 -0
  33. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/ids/uid.py +34 -17
  34. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/pack/binpack.py +24 -2
  35. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/proc/__init__.py +45 -10
  36. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rex/README.md +3 -0
  37. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rex/__init__.py +6 -3
  38. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rex/_faithful.py +23 -6
  39. unstd-3.0.0/src/unstd/serde/README.md +306 -0
  40. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/serde/__init__.py +3 -2
  41. unstd-3.0.0/src/unstd/serde/_json_decode.py +126 -0
  42. unstd-3.0.0/src/unstd/serde/_json_encode.py +168 -0
  43. unstd-3.0.0/src/unstd/serde/b64.py +272 -0
  44. unstd-3.0.0/src/unstd/serde/jsonx.py +433 -0
  45. unstd-3.0.0/src/unstd/serde/ndjson.py +322 -0
  46. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/text/fuzz.py +52 -2
  47. unstd-3.0.0/src/unstd/yaml/README.md +48 -0
  48. unstd-3.0.0/src/unstd/yaml/__init__.py +182 -0
  49. unstd-3.0.0/tests/COVERAGE.md +373 -0
  50. unstd-3.0.0/tests/P0.md +79 -0
  51. unstd-3.0.0/tests/README.md +142 -0
  52. unstd-3.0.0/tests/__init__.py +1 -0
  53. unstd-3.0.0/tests/conftest.py +125 -0
  54. unstd-3.0.0/tests/suites/assurance/README.md +12 -0
  55. unstd-3.0.0/tests/suites/assurance/adversarial/chaos/README.md +12 -0
  56. unstd-3.0.0/tests/suites/assurance/adversarial/chaos/conftest.py +39 -0
  57. unstd-3.0.0/tests/suites/assurance/adversarial/chaos/test_clock_entropy.py +368 -0
  58. unstd-3.0.0/tests/suites/assurance/adversarial/chaos/test_fs_process.py +269 -0
  59. unstd-3.0.0/tests/suites/assurance/adversarial/chaos/test_streams.py +511 -0
  60. unstd-3.0.0/tests/suites/assurance/adversarial/concurrency/README.md +18 -0
  61. unstd-3.0.0/tests/suites/assurance/adversarial/concurrency/conftest.py +39 -0
  62. unstd-3.0.0/tests/suites/assurance/adversarial/concurrency/test_filesystem.py +276 -0
  63. unstd-3.0.0/tests/suites/assurance/adversarial/concurrency/test_ids.py +317 -0
  64. unstd-3.0.0/tests/suites/assurance/adversarial/concurrency/test_shared_state.py +131 -0
  65. unstd-3.0.0/tests/suites/assurance/adversarial/fuzz_replay/README.md +21 -0
  66. unstd-3.0.0/tests/suites/assurance/adversarial/fuzz_replay/test_corpus_replay.py +53 -0
  67. unstd-3.0.0/tests/suites/assurance/adversarial/resources/README.md +8 -0
  68. unstd-3.0.0/tests/suites/assurance/evals/performance/README.md +8 -0
  69. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/assurance/gates/bench}/test_bench.py +72 -0
  70. unstd-3.0.0/tests/suites/assurance/gates/bench/test_clone_ids_profile.py +96 -0
  71. unstd-3.0.0/tests/suites/assurance/gates/chaos/_campaign_fixtures.py +87 -0
  72. unstd-3.0.0/tests/suites/assurance/gates/chaos/test_cli.py +415 -0
  73. unstd-3.0.0/tests/suites/assurance/gates/chaos/test_execution.py +392 -0
  74. unstd-3.0.0/tests/suites/assurance/gates/chaos/test_process_policy.py +44 -0
  75. unstd-3.0.0/tests/suites/assurance/gates/chaos/test_schedule.py +168 -0
  76. unstd-3.0.0/tests/suites/assurance/gates/chaos/test_workflow.py +132 -0
  77. unstd-3.0.0/tests/suites/assurance/gates/concurrency/test_campaign.py +397 -0
  78. unstd-3.0.0/tests/suites/assurance/gates/concurrency/test_workflow.py +123 -0
  79. unstd-3.0.0/tests/suites/assurance/gates/fuzz/_execution_fixtures.py +75 -0
  80. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_cli.py +463 -0
  81. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_execution.py +318 -0
  82. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_mutate.py +193 -0
  83. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_parser_targets.py +358 -0
  84. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_registry.py +346 -0
  85. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_serde_targets.py +362 -0
  86. unstd-3.0.0/tests/suites/assurance/gates/fuzz/test_workflow.py +144 -0
  87. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/assurance/gates/packaging}/test_package.py +5 -4
  88. unstd-3.0.0/tests/suites/assurance/gates/packaging/test_startup.py +237 -0
  89. unstd-3.0.0/tests/suites/assurance/gates/test_backend_policy.py +21 -0
  90. unstd-3.0.0/tests/suites/assurance/gates/test_optional_collection.py +29 -0
  91. unstd-3.0.0/tests/suites/assurance/gates/test_suite_runner.py +341 -0
  92. unstd-3.0.0/tests/suites/assurance/planes/integration/README.md +8 -0
  93. unstd-3.0.0/tests/suites/assurance/planes/packaging/README.md +92 -0
  94. unstd-3.0.0/tests/suites/assurance/planes/packaging/conftest.py +33 -0
  95. unstd-3.0.0/tests/suites/assurance/planes/packaging/test_artifacts.py +210 -0
  96. unstd-3.0.0/tests/suites/assurance/planes/packaging/test_consumers.py +416 -0
  97. unstd-3.0.0/tests/suites/assurance/planes/packaging/test_extras.py +349 -0
  98. unstd-3.0.0/tests/suites/assurance/planes/packaging/test_typing.py +76 -0
  99. unstd-3.0.0/tests/suites/assurance/security/pentest/README.md +31 -0
  100. unstd-3.0.0/tests/suites/assurance/security/pentest/test_tls_handshakes.py +374 -0
  101. unstd-3.0.0/tests/suites/assurance/security/structure/README.md +8 -0
  102. unstd-3.0.0/tests/suites/product/README.md +14 -0
  103. unstd-3.0.0/tests/suites/product/audio/regression/test_partial_frames.py +59 -0
  104. {unstd-2.1.1/tests/audio → unstd-3.0.0/tests/suites/product/audio/unit}/test_audio.py +41 -0
  105. {unstd-2.1.1/tests/clone → unstd-3.0.0/tests/suites/product/clone/unit}/test_clone.py +131 -0
  106. unstd-3.0.0/tests/suites/product/compress/unit/test_gzipx.py +588 -0
  107. unstd-3.0.0/tests/suites/product/compress/unit/test_gzipx_edges.py +222 -0
  108. unstd-3.0.0/tests/suites/product/crypto/regression/README.md +8 -0
  109. {unstd-2.1.1/tests/crypto → unstd-3.0.0/tests/suites/product/crypto/security}/test_adverse.py +1 -149
  110. unstd-3.0.0/tests/suites/product/crypto/security/test_tls.py +159 -0
  111. unstd-3.0.0/tests/suites/product/crypto/security/test_token_boundary.py +160 -0
  112. unstd-3.0.0/tests/suites/product/fs/integration/README.md +37 -0
  113. unstd-3.0.0/tests/suites/product/fs/integration/test_atomic_failures.py +299 -0
  114. unstd-3.0.0/tests/suites/product/fs/integration/test_atomic_interruption.py +151 -0
  115. unstd-3.0.0/tests/suites/product/fs/integration/test_filesystem_boundaries.py +322 -0
  116. unstd-3.0.0/tests/suites/product/fs/regression/README.md +8 -0
  117. unstd-3.0.0/tests/suites/product/ids/regression/README.md +13 -0
  118. unstd-3.0.0/tests/suites/product/ids/regression/test_fork.py +48 -0
  119. {unstd-2.1.1/tests/ids → unstd-3.0.0/tests/suites/product/ids/unit}/test_uid.py +30 -1
  120. {unstd-2.1.1/tests/pack → unstd-3.0.0/tests/suites/product/pack/unit}/test_pack.py +43 -0
  121. unstd-3.0.0/tests/suites/product/proc/integration/README.md +32 -0
  122. unstd-3.0.0/tests/suites/product/proc/integration/test_process_boundaries.py +330 -0
  123. unstd-3.0.0/tests/suites/product/proc/integration/test_process_lifecycle.py +199 -0
  124. unstd-3.0.0/tests/suites/product/proc/regression/README.md +9 -0
  125. unstd-3.0.0/tests/suites/product/proc/regression/test_interrupt_reaping.py +98 -0
  126. unstd-3.0.0/tests/suites/product/rex/regression/README.md +11 -0
  127. unstd-3.0.0/tests/suites/product/rex/regression/test_cache_concurrency.py +52 -0
  128. unstd-3.0.0/tests/suites/product/rex/regression/test_surrogate_region.py +108 -0
  129. unstd-3.0.0/tests/suites/product/rex/security/test_regex_boundary.py +80 -0
  130. unstd-3.0.0/tests/suites/product/serde/parity/test_b64_parity.py +642 -0
  131. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_decode_fast.py +224 -0
  132. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_decode_parity.py +477 -0
  133. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_encode_parity.py +618 -0
  134. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_fast.py +658 -0
  135. unstd-3.0.0/tests/suites/product/serde/parity/test_jsonx_proof_boundaries.py +125 -0
  136. unstd-3.0.0/tests/suites/product/serde/properties/test_b64_parity.py +399 -0
  137. unstd-3.0.0/tests/suites/product/serde/properties/test_serde_parity.py +222 -0
  138. unstd-3.0.0/tests/suites/product/serde/regression/README.md +8 -0
  139. unstd-3.0.0/tests/suites/product/serde/security/test_parser_boundaries.py +277 -0
  140. {unstd-2.1.1/tests/serde → unstd-3.0.0/tests/suites/product/serde/unit}/test_b64.py +77 -1
  141. {unstd-2.1.1/tests/serde → unstd-3.0.0/tests/suites/product/serde/unit}/test_jsonx.py +35 -46
  142. {unstd-2.1.1/tests/serde → unstd-3.0.0/tests/suites/product/serde/unit}/test_ndjson.py +62 -0
  143. unstd-3.0.0/tests/suites/product/serde/unit/test_ndjson_typed.py +670 -0
  144. unstd-3.0.0/tests/suites/product/text/unit/test_distance.py +72 -0
  145. unstd-3.0.0/tests/suites/product/yaml/security/test_yaml_boundary.py +163 -0
  146. unstd-3.0.0/tests/suites/product/yaml/unit/test_yaml.py +355 -0
  147. unstd-3.0.0/tests/support/README.md +12 -0
  148. unstd-3.0.0/tests/support/__init__.py +1 -0
  149. unstd-3.0.0/tests/support/anchors.py +8 -0
  150. unstd-3.0.0/tests/support/backends.py +24 -0
  151. unstd-3.0.0/tests/support/chaos.py +154 -0
  152. unstd-3.0.0/tests/support/chaos_clock_entropy.py +356 -0
  153. unstd-3.0.0/tests/support/chaos_fs_process.py +403 -0
  154. unstd-3.0.0/tests/support/chaos_streams.py +183 -0
  155. unstd-3.0.0/tests/support/concurrency_filesystem.py +558 -0
  156. unstd-3.0.0/tests/support/concurrency_ids.py +438 -0
  157. unstd-3.0.0/tests/support/concurrency_shared_state.py +681 -0
  158. unstd-3.0.0/tests/support/hypothesis/README.md +38 -0
  159. unstd-3.0.0/tests/support/hypothesis/__init__.py +1 -0
  160. unstd-3.0.0/tests/support/hypothesis/profiles.py +21 -0
  161. unstd-3.0.0/tests/support/packaging.py +342 -0
  162. unstd-3.0.0/tests/support/parser_cases.py +36 -0
  163. unstd-3.0.0/tests/support/parser_worker.py +134 -0
  164. unstd-3.0.0/tests/support/process.py +104 -0
  165. unstd-3.0.0/tests/support/tls.py +292 -0
  166. unstd-3.0.0/tests/tooling/README.md +16 -0
  167. unstd-3.0.0/tests/tooling/__init__.py +1 -0
  168. unstd-3.0.0/tests/tooling/__main__.py +6 -0
  169. unstd-3.0.0/tests/tooling/bench/README.md +18 -0
  170. unstd-3.0.0/tests/tooling/chaos/README.md +112 -0
  171. unstd-3.0.0/tests/tooling/chaos/__init__.py +1 -0
  172. unstd-3.0.0/tests/tooling/chaos/__main__.py +224 -0
  173. unstd-3.0.0/tests/tooling/chaos/execution.py +502 -0
  174. unstd-3.0.0/tests/tooling/chaos/worker.py +227 -0
  175. unstd-3.0.0/tests/tooling/concurrency/README.md +101 -0
  176. unstd-3.0.0/tests/tooling/concurrency/__init__.py +1 -0
  177. unstd-3.0.0/tests/tooling/concurrency/__main__.py +12 -0
  178. unstd-3.0.0/tests/tooling/fuzz/README.md +214 -0
  179. unstd-3.0.0/tests/tooling/fuzz/__init__.py +1 -0
  180. unstd-3.0.0/tests/tooling/fuzz/__main__.py +268 -0
  181. unstd-3.0.0/tests/tooling/fuzz/atheris_driver.py +122 -0
  182. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/empty-input.bin +0 -0
  183. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/encode-altchars-long.bin +1 -0
  184. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/encode-altchars-pair.bin +1 -0
  185. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/encode-altchars-short.bin +1 -0
  186. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/encode-binary.bin +0 -0
  187. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/mime-full-line.bin +0 -0
  188. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/mime-second-line.bin +0 -0
  189. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/missing-padding.bin +0 -0
  190. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/mixed-alphabets.bin +1 -0
  191. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/native-clean-long.bin +1 -0
  192. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/native-filtered-long.bin +1 -0
  193. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/padded-standard.bin +0 -0
  194. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/padding-only.bin +1 -0
  195. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/partial-group.bin +0 -0
  196. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/raw-nontext-bytes.bin +0 -0
  197. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/seeds.json +167 -0
  198. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/text-nonascii.bin +1 -0
  199. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/text-surrogate.bin +1 -0
  200. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/unused-pad-bits.bin +0 -0
  201. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/url-alphabet.bin +1 -0
  202. unstd-3.0.0/tests/tooling/fuzz/corpus/base64/url-ignored-junk.bin +1 -0
  203. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/concatenated-expansion-budget.bin +0 -0
  204. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/declared-expansion-budget.bin +0 -0
  205. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/empty.bin +0 -0
  206. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/forged-expansion-budget.bin +0 -0
  207. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/generated-concatenation.bin +1 -0
  208. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/generated-crc-error.bin +0 -0
  209. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/generated-level-nine.bin +1 -0
  210. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/generated-stored-level-zero.bin +0 -0
  211. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/generated-truncation.bin +1 -0
  212. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-bad-signature.bin +0 -0
  213. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-concatenated.bin +0 -0
  214. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-crc-corruption.bin +0 -0
  215. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-empty-between-members.bin +0 -0
  216. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-empty-member.bin +0 -0
  217. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-garbage-second-member.bin +0 -0
  218. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-invalid-compression-method.bin +0 -0
  219. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-isize-corruption.bin +0 -0
  220. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-member.bin +0 -0
  221. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-oversized-extra-header.bin +0 -0
  222. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-truncated-deflate.bin +0 -0
  223. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-truncated-trailer.bin +0 -0
  224. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/raw-zero-padding.bin +0 -0
  225. unstd-3.0.0/tests/tooling/fuzz/corpus/gzip/seeds.json +183 -0
  226. unstd-3.0.0/tests/tooling/fuzz/corpus/json/empty-document.bin +0 -0
  227. unstd-3.0.0/tests/tooling/fuzz/corpus/json/empty-input.bin +0 -0
  228. unstd-3.0.0/tests/tooling/fuzz/corpus/json/encode-native-snapshot.bin +1 -0
  229. unstd-3.0.0/tests/tooling/fuzz/corpus/json/encode-rich-values.bin +0 -0
  230. unstd-3.0.0/tests/tooling/fuzz/corpus/json/escaped-lone-surrogate.bin +0 -0
  231. unstd-3.0.0/tests/tooling/fuzz/corpus/json/integer-digit-limit.bin +0 -0
  232. unstd-3.0.0/tests/tooling/fuzz/corpus/json/invalid-leading-zero.bin +0 -0
  233. unstd-3.0.0/tests/tooling/fuzz/corpus/json/invalid-utf8.bin +0 -0
  234. unstd-3.0.0/tests/tooling/fuzz/corpus/json/nesting-limit.bin +0 -0
  235. unstd-3.0.0/tests/tooling/fuzz/corpus/json/nesting-outside-domain.bin +0 -0
  236. unstd-3.0.0/tests/tooling/fuzz/corpus/json/nonfinite-extensions.bin +0 -0
  237. unstd-3.0.0/tests/tooling/fuzz/corpus/json/ordered-duplicate-keys.bin +0 -0
  238. unstd-3.0.0/tests/tooling/fuzz/corpus/json/parsed-encode-surrogate.bin +1 -0
  239. unstd-3.0.0/tests/tooling/fuzz/corpus/json/seeds.json +167 -0
  240. unstd-3.0.0/tests/tooling/fuzz/corpus/json/signed-zero.bin +0 -0
  241. unstd-3.0.0/tests/tooling/fuzz/corpus/json/text-lone-surrogate.bin +1 -0
  242. unstd-3.0.0/tests/tooling/fuzz/corpus/json/truncated-object.bin +0 -0
  243. unstd-3.0.0/tests/tooling/fuzz/corpus/json/utf16-big-endian.bin +0 -0
  244. unstd-3.0.0/tests/tooling/fuzz/corpus/json/utf16-bom.bin +0 -0
  245. unstd-3.0.0/tests/tooling/fuzz/corpus/json/utf32-bom.bin +0 -0
  246. unstd-3.0.0/tests/tooling/fuzz/corpus/json/utf8-unicode.bin +0 -0
  247. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/ascii-exotic-padding.bin +0 -0
  248. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/blank-rows.bin +0 -0
  249. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/crlf-rows.bin +0 -0
  250. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/empty-input.bin +0 -0
  251. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/encode-full-record-set.bin +0 -0
  252. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/escaped-newline-value.bin +0 -0
  253. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/invalid-utf8-row.bin +0 -0
  254. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/maximum-physical-lines.bin +0 -0
  255. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/mixed-invalid-rows.bin +0 -0
  256. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/physical-lines-outside-domain.bin +0 -0
  257. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/quoted-depth-guard.bin +2 -0
  258. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/seeds.json +159 -0
  259. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/text-lone-surrogate.bin +1 -0
  260. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/truncated-final-row.bin +0 -0
  261. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/unicode-exotic-padding.bin +3 -0
  262. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/unicode-line-separators.bin +1 -0
  263. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/utf16-single-row.bin +0 -0
  264. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/utf32-single-row.bin +0 -0
  265. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/valid-final-newline.bin +0 -0
  266. unstd-3.0.0/tests/tooling/fuzz/corpus/ndjson/valid-no-final-newline.bin +0 -0
  267. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/alias-float16.bin +0 -0
  268. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/alias-float64.bin +0 -0
  269. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/alias-int16.bin +0 -0
  270. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/alias-uint64.bin +1 -0
  271. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/decode-double-specials-pipe.bin +0 -0
  272. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/decode-half-specials.bin +0 -0
  273. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/decode-single-specials-big.bin +0 -0
  274. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/empty-multibyte-decode.bin +1 -0
  275. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/empty.bin +0 -0
  276. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-f2-finite.bin +0 -0
  277. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-f4-finite.bin +0 -0
  278. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-f8-finite.bin +0 -0
  279. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-i1-little.bin +0 -0
  280. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-i2-native.bin +0 -0
  281. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-i4-little.bin +0 -0
  282. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-i8-native.bin +0 -0
  283. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-u1-big.bin +0 -0
  284. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-u2-pipe.bin +0 -0
  285. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-u4-big.bin +0 -0
  286. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/encode-u8-pipe.bin +0 -0
  287. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/partial-float32.bin +0 -0
  288. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/partial-float64.bin +0 -0
  289. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/partial-int16.bin +0 -0
  290. unstd-3.0.0/tests/tooling/fuzz/corpus/pack/seeds.json +191 -0
  291. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-bad-backreference.bin +0 -0
  292. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-bad-repeat.bin +0 -0
  293. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-dollar-divergence.bin +0 -0
  294. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-duplicate-name.bin +0 -0
  295. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-lone-surrogate.bin +0 -0
  296. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-nested-repeat.bin +0 -0
  297. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-posix-divergence.bin +0 -0
  298. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/compile-unclosed-class.bin +0 -0
  299. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/empty.bin +0 -0
  300. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-backreference.bin +0 -0
  301. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-lookahead.bin +0 -0
  302. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-nullable-repeat.bin +0 -0
  303. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-nullable.bin +0 -0
  304. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-unicode-ignorecase.bin +0 -0
  305. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/fallback-unicode-subject.bin +0 -0
  306. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/literal-metacharacters.bin +0 -0
  307. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/literal-octet-boundary.bin +0 -0
  308. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-absolute-anchor.bin +0 -0
  309. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-alternation.bin +0 -0
  310. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-bytes-word.bin +0 -0
  311. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-digit-width.bin +0 -0
  312. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-literal-class.bin +0 -0
  313. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-named-word.bin +0 -0
  314. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/native-optional-capture.bin +0 -0
  315. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/seeds.json +215 -0
  316. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/surrogate-region-finding.bin +0 -0
  317. unstd-3.0.0/tests/tooling/fuzz/corpus/rex/surrogate-region-minimized.bin +0 -0
  318. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/deterministic-order.bin +1 -0
  319. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/empty-input.bin +0 -0
  320. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/escaped-lone-surrogate.bin +0 -0
  321. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/escaped-surrogate-pair.bin +0 -0
  322. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/index-maximum.bin +0 -0
  323. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/index-overflow.bin +0 -0
  324. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/label-limit.bin +0 -0
  325. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/label-over-limit.bin +0 -0
  326. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/negative-index.bin +0 -0
  327. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/relaxed-numeric-strings.bin +1 -0
  328. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/row-list-limit.bin +1 -0
  329. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/row-list-over-limit.bin +1 -0
  330. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/row-list.bin +1 -0
  331. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/seeds.json +207 -0
  332. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/sorted-order.bin +1 -0
  333. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/strict-row.bin +0 -0
  334. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/tagged-delete.bin +1 -0
  335. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/tagged-put.bin +1 -0
  336. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/tagged-unknown.bin +1 -0
  337. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/truncated-row.bin +0 -0
  338. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/unknown-field.bin +0 -0
  339. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/utf16-rejected.bin +0 -0
  340. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/utf32-rejected.bin +0 -0
  341. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/utf8-key-error.bin +0 -0
  342. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/utf8-value-error.bin +0 -0
  343. unstd-3.0.0/tests/tooling/fuzz/corpus/structs/wrong-field-type.bin +0 -0
  344. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/arbitrary-invalid-utf8.bin +0 -0
  345. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/authentic-no-json-policy.bin +0 -0
  346. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/authentic-opaque-token.bin +0 -0
  347. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/changed-claims.bin +0 -0
  348. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/claims-generation-limit.bin +1 -0
  349. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/derive-authentic-tampering.bin +0 -0
  350. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/derive-signed-malformed.bin +0 -0
  351. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/empty-input.bin +0 -0
  352. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/extra-separator.bin +0 -0
  353. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/missing-separator.bin +0 -0
  354. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/seeds.json +167 -0
  355. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/signature-pad-bit-alias.bin +0 -0
  356. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/signed-payload-alias.bin +0 -0
  357. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/signed-payload-junk.bin +0 -0
  358. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/signed-payload-padding.bin +0 -0
  359. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/signed-standard-alphabet.bin +0 -0
  360. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/text-lone-surrogate.bin +0 -0
  361. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/text-nonascii.bin +0 -0
  362. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/truncated-signature.bin +0 -0
  363. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/utf16-shaped-token.bin +0 -0
  364. unstd-3.0.0/tests/tooling/fuzz/corpus/tokens/utf32-shaped-token.bin +0 -0
  365. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/empty.bin +0 -0
  366. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/model-boolean-false.bin +1 -0
  367. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/model-boolean-true.bin +1 -0
  368. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/model-empty.bin +1 -0
  369. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/model-escapes.bin +0 -0
  370. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/model-integer-boundary.bin +1 -0
  371. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-array-of-tables.bin +0 -0
  372. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-arrays-tables.bin +0 -0
  373. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-basic.bin +0 -0
  374. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-datetimes.bin +0 -0
  375. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-dotted-key-redefinition.bin +0 -0
  376. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-duplicate-key.bin +0 -0
  377. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-empty.bin +0 -0
  378. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-float-specials.bin +0 -0
  379. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-invalid-utf8.bin +0 -0
  380. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-nested-budget.bin +0 -0
  381. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-nul.bin +0 -0
  382. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-numeric-extrema.bin +0 -0
  383. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-quoted-unicode-key.bin +0 -0
  384. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-string-escapes.bin +0 -0
  385. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/raw-unterminated-array.bin +0 -0
  386. unstd-3.0.0/tests/tooling/fuzz/corpus/toml/seeds.json +175 -0
  387. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/declared-channel-overflow.bin +0 -0
  388. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/declared-data-overflow.bin +0 -0
  389. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/declared-riff-overflow.bin +0 -0
  390. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/empty.bin +0 -0
  391. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-invalid-truncated-riff.bin +0 -0
  392. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-invalid-wrong-magic.bin +0 -0
  393. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-invalid-zero-channels.bin +0 -0
  394. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-mono-48000.bin +0 -0
  395. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-mono-8000.bin +0 -0
  396. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-quad-44100.bin +0 -0
  397. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-stereo-16000.bin +0 -0
  398. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/generated-three-channel-22050.bin +0 -0
  399. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-empty-stereo.bin +0 -0
  400. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-foreign-flac.bin +0 -0
  401. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-missing-format.bin +0 -0
  402. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-mono-extrema.bin +0 -0
  403. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-quad-interleaved.bin +0 -0
  404. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-short-riff.bin +0 -0
  405. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-stereo-interleaved.bin +0 -0
  406. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/raw-truncated-pcm.bin +0 -0
  407. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/regression-declared-partial-pcm-sample.bin +0 -0
  408. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/regression-fmt-extent-outside-riff.bin +0 -0
  409. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/regression-inconsistent-pcm-byte-rate.bin +0 -0
  410. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/regression-truncated-quad-frame.bin +0 -0
  411. unstd-3.0.0/tests/tooling/fuzz/corpus/wav/seeds.json +199 -0
  412. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/alias-expansion-budget.bin +1 -0
  413. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/alias-minimum.bin +0 -0
  414. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/empty.bin +0 -0
  415. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/generated-tag-python-apply.bin +1 -0
  416. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/generated-tag-python-new.bin +1 -0
  417. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/generated-tag-unknown.bin +0 -0
  418. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/known-model-binary.bin +0 -0
  419. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/known-model.bin +1 -0
  420. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-alias-expansion-budget.bin +0 -0
  421. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-basic.bin +0 -0
  422. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-binary-timestamp.bin +0 -0
  423. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-duplicate-key.bin +0 -0
  424. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-float-specials.bin +0 -0
  425. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-invalid-date-finding.bin +0 -0
  426. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-invalid-utf16.bin +0 -0
  427. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-merge-overrides.bin +0 -0
  428. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-multiple-documents.bin +0 -0
  429. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-nul.bin +0 -0
  430. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-python-tag.bin +0 -0
  431. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-recursive-alias.bin +0 -0
  432. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-safe-aliases.bin +0 -0
  433. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-semantic-key-collision.bin +0 -0
  434. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-unclosed-flow.bin +0 -0
  435. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/raw-unknown-tag.bin +0 -0
  436. unstd-3.0.0/tests/tooling/fuzz/corpus/yaml/seeds.json +199 -0
  437. unstd-3.0.0/tests/tooling/fuzz/execution.py +626 -0
  438. unstd-3.0.0/tests/tooling/fuzz/mutate.py +105 -0
  439. unstd-3.0.0/tests/tooling/fuzz/registry.py +310 -0
  440. unstd-3.0.0/tests/tooling/fuzz/registry.toml +111 -0
  441. unstd-3.0.0/tests/tooling/fuzz/targets/__init__.py +1 -0
  442. unstd-3.0.0/tests/tooling/fuzz/targets/base64.py +145 -0
  443. unstd-3.0.0/tests/tooling/fuzz/targets/gzip.py +112 -0
  444. unstd-3.0.0/tests/tooling/fuzz/targets/json.py +208 -0
  445. unstd-3.0.0/tests/tooling/fuzz/targets/ndjson.py +183 -0
  446. unstd-3.0.0/tests/tooling/fuzz/targets/pack.py +84 -0
  447. unstd-3.0.0/tests/tooling/fuzz/targets/rex.py +139 -0
  448. unstd-3.0.0/tests/tooling/fuzz/targets/structs.py +156 -0
  449. unstd-3.0.0/tests/tooling/fuzz/targets/tokens.py +156 -0
  450. unstd-3.0.0/tests/tooling/fuzz/targets/toml.py +69 -0
  451. unstd-3.0.0/tests/tooling/fuzz/targets/wav.py +205 -0
  452. unstd-3.0.0/tests/tooling/fuzz/targets/yaml.py +158 -0
  453. unstd-3.0.0/tests/tooling/fuzz/worker.py +212 -0
  454. unstd-3.0.0/tests/tooling/inventory.toml +172 -0
  455. unstd-3.0.0/tests/tooling/mutation/README.md +68 -0
  456. unstd-3.0.0/tests/tooling/runner.py +250 -0
  457. {unstd-2.1.1 → unstd-3.0.0}/uv.lock +70 -3
  458. unstd-2.1.1/bench/README.md +0 -124
  459. unstd-2.1.1/src/unstd/serde/README.md +0 -157
  460. unstd-2.1.1/src/unstd/serde/b64.py +0 -127
  461. unstd-2.1.1/src/unstd/serde/jsonx.py +0 -344
  462. unstd-2.1.1/src/unstd/serde/ndjson.py +0 -159
  463. unstd-2.1.1/tests/conftest.py +0 -80
  464. unstd-2.1.1/tests/properties/README.md +0 -13
  465. unstd-2.1.1/tests/properties/test_serde_parity.py +0 -88
  466. {unstd-2.1.1 → unstd-3.0.0}/.github/workflows/release.yml +0 -0
  467. {unstd-2.1.1 → unstd-3.0.0}/.gitignore +0 -0
  468. {unstd-2.1.1 → unstd-3.0.0}/LICENSE +0 -0
  469. {unstd-2.1.1 → unstd-3.0.0}/NOTICE +0 -0
  470. {unstd-2.1.1 → unstd-3.0.0}/bench/__init__.py +0 -0
  471. {unstd-2.1.1 → unstd-3.0.0}/bench/__main__.py +0 -0
  472. {unstd-2.1.1 → unstd-3.0.0}/bench/report.py +0 -0
  473. {unstd-2.1.1 → unstd-3.0.0}/bench/timing.py +0 -0
  474. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/_extra.py +0 -0
  475. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/audio/README.md +0 -0
  476. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/audio/__init__.py +0 -0
  477. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/clone/README.md +0 -0
  478. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/clone/__init__.py +0 -0
  479. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/containers/README.md +0 -0
  480. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/containers/__init__.py +0 -0
  481. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/containers/persistent.py +0 -0
  482. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/containers/sorted.py +0 -0
  483. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/README.md +0 -0
  484. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/__init__.py +0 -0
  485. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/_blake3.py +0 -0
  486. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/digest.py +0 -0
  487. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/crypto/tls.py +0 -0
  488. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/fs/README.md +0 -0
  489. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/ids/__init__.py +0 -0
  490. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/README.md +0 -0
  491. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/__init__.py +0 -0
  492. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/consecutive.py +0 -0
  493. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/distinct.py +0 -0
  494. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/reshape.py +0 -0
  495. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/iters/select.py +0 -0
  496. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/model/README.md +0 -0
  497. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/model/__init__.py +0 -0
  498. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/model/base.py +0 -0
  499. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/model/settings.py +0 -0
  500. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/pack/README.md +0 -0
  501. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/pack/__init__.py +0 -0
  502. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/proc/README.md +0 -0
  503. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/py.typed +0 -0
  504. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rand/README.md +0 -0
  505. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rand/__init__.py +0 -0
  506. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rand/crypto.py +0 -0
  507. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/rand/draw.py +0 -0
  508. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/serde/structs.py +0 -0
  509. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/text/README.md +0 -0
  510. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/text/__init__.py +0 -0
  511. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/time/README.md +0 -0
  512. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/time/__init__.py +0 -0
  513. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/time/timeutil.py +0 -0
  514. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/time/zoned.py +0 -0
  515. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/toml/README.md +0 -0
  516. {unstd-2.1.1 → unstd-3.0.0}/src/unstd/toml/__init__.py +0 -0
  517. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/product/audio}/properties/test_wav_quant.py +0 -0
  518. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/product/clone}/properties/test_clone_invariants.py +0 -0
  519. {unstd-2.1.1/tests/containers → unstd-3.0.0/tests/suites/product/containers/unit}/test_containers.py +0 -0
  520. {unstd-2.1.1/tests/crypto → unstd-3.0.0/tests/suites/product/crypto/unit}/blake3_reference_vectors.json +0 -0
  521. {unstd-2.1.1/tests/crypto → unstd-3.0.0/tests/suites/product/crypto/unit}/test_vectors.py +0 -0
  522. {unstd-2.1.1/tests/fs → unstd-3.0.0/tests/suites/product/fs/unit}/test_fs.py +0 -0
  523. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/product/ids}/properties/test_uuid7.py +0 -0
  524. {unstd-2.1.1/tests/iters → unstd-3.0.0/tests/suites/product/iters/unit}/test_iters.py +0 -0
  525. {unstd-2.1.1/tests/model → unstd-3.0.0/tests/suites/product/model/unit}/test_model.py +0 -0
  526. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/product/pack}/properties/test_pack_invariants.py +0 -0
  527. {unstd-2.1.1/tests/proc → unstd-3.0.0/tests/suites/product/proc/unit}/test_proc.py +0 -0
  528. {unstd-2.1.1/tests/rand → unstd-3.0.0/tests/suites/product/rand/unit}/test_rand.py +0 -0
  529. {unstd-2.1.1/tests/rex → unstd-3.0.0/tests/suites/product/rex/parity}/test_fidelity.py +0 -0
  530. {unstd-2.1.1/tests/rex → unstd-3.0.0/tests/suites/product/rex/unit}/test_rex.py +0 -0
  531. {unstd-2.1.1/tests/serde → unstd-3.0.0/tests/suites/product/serde/unit}/test_structs.py +0 -0
  532. {unstd-2.1.1/tests/text → unstd-3.0.0/tests/suites/product/text/unit}/test_text.py +0 -0
  533. {unstd-2.1.1/tests/time → unstd-3.0.0/tests/suites/product/time/unit}/test_timeutil.py +0 -0
  534. {unstd-2.1.1/tests/time → unstd-3.0.0/tests/suites/product/time/unit}/test_zoned.py +0 -0
  535. {unstd-2.1.1/tests → unstd-3.0.0/tests/suites/product/toml}/properties/test_toml_invariants.py +0 -0
  536. {unstd-2.1.1/tests/toml → unstd-3.0.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
@@ -17,6 +17,187 @@ doc_radar:
17
17
 
18
18
  <!-- towncrier release notes start -->
19
19
 
20
+ ## [3.0.0] - 2026-10-19
21
+
22
+ ### Breaking
23
+
24
+ - `serde.jsonx` now guarantees the running stdlib's JSON defaults and semantics.
25
+ `dump` and `dumps` use `ensure_ascii=True` and default spaces, replacing the
26
+ previous compact, unescaped output. To retain compact text, pass
27
+ `ensure_ascii=False, separators=(",", ":")` explicitly. Dataclasses, UUIDs and
28
+ plain enums now require an explicit encoder or `default`, as they do in
29
+ stdlib `json`; orjson-only type acceptance is removed.
30
+ - JSON numbers retain their values: arbitrary precision integers no longer fail
31
+ on encode or silently become floats on decode, and non-finite floats follow
32
+ stdlib's `NaN`/infinity behavior instead of silently becoming `null`.
33
+ `allow_nan=False` rejects them. Unicode and lone surrogates, UTF-16/32 binary
34
+ input, supported subclasses, key coercion/sorting, callbacks, custom codec
35
+ keywords, error diagnostics and interpreter limits follow stdlib too.
36
+ `dump` preserves streamed writes, including partial output before a later
37
+ encoding or write failure; `load` reads once through the guarded parser.
38
+ - `jsonx.dumpb` now preserves exact compact stdlib float notation across
39
+ backends, which can change serialized bytes. NDJSON and Base64 JSON helpers
40
+ preserve the same numeric values. NDJSON wraps Unicode, integer-limit and
41
+ recursion failures with physical line numbers and honors `skip_errors=True`.
42
+
43
+ ### Added
44
+
45
+ - `unstd.yaml`, behind `unstd[yaml]`, provides safe YAML 1.2 native-value
46
+ loading, multi-document streams, and comment-preserving parse/edit/write.
47
+ Duplicate keys and unknown tags are rejected; parser instances and scalar
48
+ semantics are isolated from optional C extensions. The base install keeps
49
+ zero third-party dependencies.
50
+ - `unstd.compress.gzipx`, behind `unstd[compress]`, accelerates gzip file and
51
+ one-shot operations with zlib-ng, with exact stdlib bindings on a base
52
+ install. Streams retain stdlib framing, ownership, modes, seeking and error
53
+ families; one-shot defaults follow the running interpreter. Compressed bytes
54
+ may differ between codecs while recovered content remains identical.
55
+ - NDJSON readers and writers accept a reusable `structs.Codec` through `codec=`.
56
+ Readers decode each row directly into its validated schema, preserving
57
+ physical line numbers and schema paths on errors. `on_error` reports each
58
+ rejected record once before the normal raise or explicit skip. Untyped
59
+ streaming still works on a base install, and typed processing reuses the
60
+ existing serde extra.
61
+ - Base64 exposes stdlib-compatible `b64encode`/`b64decode`, standard and URL-safe
62
+ functions, MIME byte helpers and `encode_file`/`decode_file` stream helpers
63
+ alongside the convenience API. Standard defaults, alternative alphabets,
64
+ buffer handling, exception types and diagnostics follow the running stdlib.
65
+ Acceleration is limited to plain-byte encoding and strict ASCII decoding;
66
+ other cases and native decode failures use stdlib.
67
+ - Eleven executable parser/token fuzz targets use independent oracles,
68
+ authenticated synthetic seed corpora, finite pytest replay, deterministic
69
+ mutations, and isolated Atheris campaigns. Workers preserve exact failures
70
+ and enforce wall/input deadlines, POSIX CPU limits and Linux address-space
71
+ limits. CI runs bounded pull-request campaigns and deeper nightly coverage
72
+ campaigns, retaining reports and generated corpora. Harness canaries verify
73
+ that incorrect results, unexpected exceptions, crashes and exhausted budgets
74
+ fail the run.
75
+ - Recorded chaos campaigns cover mixed filesystem/process histories,
76
+ handshaken writer interruption, stream failures and clock/entropy outages.
77
+ Bounded installed/fallback workers, seed replay, exact fault journals, strict
78
+ completion controls and Linux/macOS pull-request/nightly CI campaigns retain
79
+ recovery evidence. Ordinary correctness discovery stays separate from
80
+ explicit chaos runs.
81
+ - Recorded concurrency campaigns cover atomic filesystem histories, UUID
82
+ contention/fork safety, and shared clone/regex/codec/YAML/map isolation.
83
+ Independent models, broken-result controls, bounded installed/stdlib workers,
84
+ lane-specific replay and Linux/macOS pull-request/nightly jobs retain
85
+ schedules and observations. This explicit lane stays outside default pytest;
86
+ owning defect regressions remain in ordinary validation.
87
+
88
+ ### Changed
89
+
90
+ - Native JSON acceleration now requires bounded eligibility proofs. Encoding
91
+ snapshots at most 16 exact builtin values before calling orjson, retaining
92
+ exact whitespace and escaping; other inputs use cached or direct stdlib
93
+ encoders. Decoding verifies the complete backend result and falls back to
94
+ stdlib for every float, including lossy large-integer conversions.
95
+ Hooks/custom codecs bypass speculation; deep or unproven cases and backend
96
+ errors retry the original input with stdlib. Callback isolation, snapshot
97
+ mutation, DEL escaping and near-limit recursion failures have generated
98
+ contracts that also assert real backend use.
99
+ - JSON type annotations accept duck-typed writers and typed `default`
100
+ callbacks. The `numpy=True` conversion extension is consistent across
101
+ backends. With an explicit custom `cls`, `dump`/`dumps` forward all
102
+ constructor keywords unchanged. Differential tests use the running stdlib as
103
+ the authority across Python 3.12–3.14 and optional-backend/base configurations;
104
+ generated cases include large integers, non-finite values, lone surrogates,
105
+ mixed keys, formatting options, binary encodings and malformed input.
106
+ - The test suite follows Billy's Python organization: module-owned contracts
107
+ under `tests/suites/product`, cross-cutting assurance under
108
+ `tests/suites/assurance`, shared support, and standalone tooling. A validated
109
+ inventory distinguishes active coverage from planned lanes and provides
110
+ `python -m tests.tooling list|check|run`. CI checks inventory drift; pytest
111
+ uses strict markers and shared generation profiles. Existing TLS policy tests
112
+ run without the BLAKE3 extra. The coverage plan maps remaining property, fuzz,
113
+ penetration, fault, installation, concurrency, resource and performance work
114
+ without counting scaffolding as implemented tests. Wall-clock benchmark
115
+ calibration assertions use the explicit `perf` marker, outside ordinary
116
+ correctness runs.
117
+ - P0 assurance builds and installs real artifacts in pristine consumers, checks
118
+ independent optional-extra installations, performs real loopback TLS
119
+ handshakes, injects filesystem/process failures, and challenges parser and
120
+ token boundaries with independent controls and bounded workers. Required CI
121
+ execution fails when declared extras are unavailable.
122
+
123
+ ### Fixed
124
+
125
+ - Installed-extra checks use locked artifact URLs and hashes for offline
126
+ consumers, including source-built dependencies at declared floors. Crash
127
+ controls allow Python 3.14 diagnostics to finish while retaining the short
128
+ intentional-hang deadline.
129
+ - YAML fuzzing compares scalar `ValueError` exceptions from malformed dates
130
+ with the reference parser, retaining exact error types and messages. The
131
+ discovered invalid-date input is preserved in the authenticated seed corpus.
132
+ - URL convenience Base64 decoding behaves the same with and without pybase64:
133
+ ignored characters no longer interfere with missing-padding repair,
134
+ completed padding preserves stdlib's handling of trailing data, non-ASCII
135
+ text raises stdlib's `ValueError`, and strided decoding buffers work. URL
136
+ decoding no longer emits pybase64's alternate-alphabet warnings. Strict
137
+ validation still accepts nonzero unused pad bits, as stdlib does; it does not
138
+ promise canonical spelling. Independent differential and generated
139
+ malformed-input contracts cover native and fallback paths. The decode
140
+ benchmark compares the same strict validation mode on both paths.
141
+ - Process timeouts must be positive and finite. Filesystem rollback preserves
142
+ scratch-descriptor ownership and the original error, and directory syncing
143
+ remains best effort. Bearer-token envelopes require strict canonical
144
+ Base64url spelling, and non-ASCII MACs are rejected. The general-purpose URL
145
+ Base64 codec retains its documented lenient behavior. Editable YAML supports
146
+ standard `!!str` construction.
147
+ - Native WAV writes select the WAV format for file-like, extensionless and
148
+ misleading-extension outputs in both one-shot and streaming writers, pinned
149
+ by independent audio-extra consumer tests.
150
+ - Confirmed surrogate-region regex and truncated PCM frame findings remain as
151
+ module-owned regressions and corpus entries. Faithful regex recovery is
152
+ selected before exposing lazy match projections; incomplete PCM frames are
153
+ rejected explicitly.
154
+ - `proc.run` kills and reaps its direct child before propagating cancellation,
155
+ including the `KeyboardInterrupt` path where `subprocess.run` could return
156
+ with an unreaped child. Captured output, timeout behavior and callback
157
+ semantics are preserved; real SIGINT regressions cover `run`, `capture` and
158
+ `run_ok`, including recovery.
159
+ - The Python UUIDv7 fallback resets its lock and counter state after POSIX fork
160
+ so a child can generate IDs even when a vanished parent thread held the
161
+ counter lock. The parent's state and selected UUID backend are preserved;
162
+ a bounded ordinary regression and controlled concurrency histories pin the
163
+ deadlock.
164
+ - Concurrent regular-expression cache misses no longer exceed the documented
165
+ 512-entry limit when multiple threads select the same oldest entry. Compiles
166
+ publish before trimming and retry lost evictions. A bounded regression forces
167
+ the duplicate-oldest interleaving against native and stdlib backends.
168
+ - Package metadata lookup is deferred until `unstd.__version__` is requested
169
+ and the result is cached. Importing submodules such as
170
+ `unstd.serde.structs` avoids that startup cost while retaining the same native
171
+ codecs, parsing behavior and metadata-derived version, including the
172
+ uninstalled-source fallback.
173
+
174
+ ### Performance
175
+
176
+ - Reduce JSON eligibility and compact-encoding overhead, accelerate URL-safe
177
+ Base64 decoding, and improve structural cloning and stdlib array packing.
178
+ The portable Levenshtein fallback evaluates packed dynamic-programming
179
+ columns. Public call signatures, serialized formats and optional dependencies
180
+ for these hot-path optimizations stay the same; parity and regression tests
181
+ cover the optimized boundaries.
182
+ - Reduce serde dispatch and allocation overhead for default JSON encoding,
183
+ small decoded JSON values, integer snapshot proofs, short Base64 decoding
184
+ and NDJSON writer setup. These optimizations preserve public signatures,
185
+ codec policies, output and error semantics. A repeatable complete function
186
+ profile includes output-checked native/fallback benchmarks and explicit API
187
+ comparisons.
188
+ - Reduce duplicate private-attribute traversal when cloning Pydantic models
189
+ and the dataclass conversion entry check. Remove redundant integer
190
+ conversion, branching and bit assembly in the portable UUIDv7 generator.
191
+ Existing APIs, direct stdlib aliases, secure entropy and synchronized counter
192
+ behavior remain. Custom dataclass constructor arguments and msgspec copy
193
+ reducers defer to the stdlib copy protocol. Reproducible per-function
194
+ clone/UUID profiles and paired workload timings include output validation,
195
+ unchanged-signature checks and explicit coverage gaps.
196
+ - JSON benchmarks separately measure fallback records and eligible
197
+ text/integer cases. Python 3.13.14 measured 5.98× text encoding and 1.91×
198
+ integer-array decoding. The old speed floors covered incompatible behavior
199
+ and were reset; no uniform speedup is promised.
200
+
20
201
  ## [2.1.1] - 2026-10-04
21
202
 
22
203
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: unstd
3
- Version: 2.1.1
3
+ Version: 3.0.0
4
4
  Summary: stdlib-faithful accelerated replacements behind optional extras
5
5
  Project-URL: Homepage, https://github.com/The-Billy-Company/unstd
6
6
  Project-URL: Repository, https://github.com/The-Billy-Company/unstd
@@ -24,6 +24,8 @@ Provides-Extra: audio
24
24
  Requires-Dist: numpy>=2.5; extra == 'audio'
25
25
  Requires-Dist: soundfile>=0.14; extra == 'audio'
26
26
  Provides-Extra: clone
27
+ Provides-Extra: compress
28
+ Requires-Dist: zlib-ng>=1.0; extra == 'compress'
27
29
  Provides-Extra: containers
28
30
  Requires-Dist: immutables>=0.21; extra == 'containers'
29
31
  Requires-Dist: sortedcontainers>=2.4; extra == 'containers'
@@ -52,17 +54,20 @@ Provides-Extra: time
52
54
  Requires-Dist: whenever>=0.10; extra == 'time'
53
55
  Provides-Extra: toml
54
56
  Requires-Dist: tomlkit>=0.15; extra == 'toml'
57
+ Provides-Extra: yaml
58
+ Requires-Dist: ruamel-yaml>=0.19; extra == 'yaml'
55
59
  Description-Content-Type: text/markdown
56
60
 
57
61
  # unstd
58
62
 
59
- stdlib-faithful accelerated replacements. Each module wraps a native codec
60
- behind the call surface of the stdlib module it stands in for, so migrating a
61
- call site is an import swap, not a rewrite.
63
+ stdlib-faithful replacements, with optional native acceleration where it
64
+ preserves the contract. Modules follow the stdlib call surface, so migrating a
65
+ call site is an import swap. JSON proves native eligibility and falls back to
66
+ stdlib codecs to preserve formatting, values, callbacks and errors.
62
67
 
63
68
  ```python
64
69
  import json # →
65
- from unstd.serde import jsonx # jsonx.dumps / jsonx.loads, same surface, faster
70
+ from unstd.serde import jsonx # faithful json API; dumpb for compact transport
66
71
  ```
67
72
 
68
73
  The base install is pure stdlib: depending on `unstd` adds zero third-party
@@ -95,12 +100,42 @@ python3 -m pip install 'unstd[serde,ids,crypto]'
95
100
  | [`text`](src/unstd/text/README.md) | `unstd[text]` | rapidfuzz → stdlib `difflib` |
96
101
  | [`audio`](src/unstd/audio/README.md) | `unstd[audio]` | soundfile + numpy → stdlib `wave` |
97
102
  | [`toml`](src/unstd/toml/README.md) | `unstd[toml]` | read is `tomllib`; write requires tomlkit |
103
+ | [`yaml`](src/unstd/yaml/README.md) | `unstd[yaml]` | ruamel.yaml: safe YAML 1.2 and comment-preserving edits (required) |
104
+ | [`compress`](src/unstd/compress/README.md) | `unstd[compress]` | zlib-ng → stdlib `gzip`, with faithful file framing and errors |
98
105
  | [`proc`](src/unstd/proc/README.md) | — | stdlib `subprocess` |
99
106
  | [`fs`](src/unstd/fs/README.md) | — | stdlib `os` |
100
107
  | [`iters`](src/unstd/iters/README.md) | — | stdlib `itertools` |
101
108
 
102
109
  `clone`, `proc`, `fs`, and `iters` ship in the base install.
103
110
 
111
+ ## Testing
112
+
113
+ The [test suite](tests/README.md) follows Billy's owner-first Python layout:
114
+ product contracts, cross-cutting assurance, shared support, and standalone tools.
115
+ The [P0 boundary suites](tests/P0.md) exercise installed packaging, real TLS peers,
116
+ filesystem/process failures, and parser/token security. The
117
+ [coverage plan](tests/COVERAGE.md) maps parity, properties, fuzzing,
118
+ penetration, fault injection, packaging, concurrency, resource, and performance
119
+ obligations. Inspect implemented and planned lanes with
120
+ `uv run --no-sync python -m tests.tooling list`; run the active suite with
121
+ `uv run --no-sync pytest -q`.
122
+
123
+ The [fuzz runner](tests/tooling/fuzz/README.md) supplies eleven parser/token
124
+ targets, authenticated corpora, deterministic mutation, and bounded Atheris
125
+ campaigns. Run `uv run --no-sync python -m tests.tooling.fuzz check` to validate
126
+ the inventory, or `uv run --no-sync python -m tests.tooling.fuzz replay` to
127
+ replay every installed target. CI retains findings and coverage corpora.
128
+
129
+ The [chaos runner](tests/tooling/chaos/README.md) exercises recorded filesystem,
130
+ process, stream and clock/entropy failures and recovery. Run
131
+ `uv run --no-sync python -m tests.tooling.chaos run --seed 173` for a bounded
132
+ installed-backend campaign with per-case journals and reproducible schedules.
133
+
134
+ The [concurrency runner](tests/tooling/concurrency/README.md) checks atomic file
135
+ histories, UUID contention and fork safety, and shared cache/parser isolation.
136
+ Run `uv run --no-sync python -m tests.tooling.concurrency run --seed 173` for
137
+ bounded installed-backend workers with retained histories and replay.
138
+
104
139
  ## Prior art
105
140
 
106
141
  - **orjson** (Kloss) / **msgspec** (Fitzgerald) / **pybase64** (aklomp libbase64) — the serde backends.
@@ -1,12 +1,13 @@
1
1
  # unstd
2
2
 
3
- stdlib-faithful accelerated replacements. Each module wraps a native codec
4
- behind the call surface of the stdlib module it stands in for, so migrating a
5
- call site is an import swap, not a rewrite.
3
+ stdlib-faithful replacements, with optional native acceleration where it
4
+ preserves the contract. Modules follow the stdlib call surface, so migrating a
5
+ call site is an import swap. JSON proves native eligibility and falls back to
6
+ stdlib codecs to preserve formatting, values, callbacks and errors.
6
7
 
7
8
  ```python
8
9
  import json # →
9
- from unstd.serde import jsonx # jsonx.dumps / jsonx.loads, same surface, faster
10
+ from unstd.serde import jsonx # faithful json API; dumpb for compact transport
10
11
  ```
11
12
 
12
13
  The base install is pure stdlib: depending on `unstd` adds zero third-party
@@ -39,12 +40,42 @@ python3 -m pip install 'unstd[serde,ids,crypto]'
39
40
  | [`text`](src/unstd/text/README.md) | `unstd[text]` | rapidfuzz → stdlib `difflib` |
40
41
  | [`audio`](src/unstd/audio/README.md) | `unstd[audio]` | soundfile + numpy → stdlib `wave` |
41
42
  | [`toml`](src/unstd/toml/README.md) | `unstd[toml]` | read is `tomllib`; write requires tomlkit |
43
+ | [`yaml`](src/unstd/yaml/README.md) | `unstd[yaml]` | ruamel.yaml: safe YAML 1.2 and comment-preserving edits (required) |
44
+ | [`compress`](src/unstd/compress/README.md) | `unstd[compress]` | zlib-ng → stdlib `gzip`, with faithful file framing and errors |
42
45
  | [`proc`](src/unstd/proc/README.md) | — | stdlib `subprocess` |
43
46
  | [`fs`](src/unstd/fs/README.md) | — | stdlib `os` |
44
47
  | [`iters`](src/unstd/iters/README.md) | — | stdlib `itertools` |
45
48
 
46
49
  `clone`, `proc`, `fs`, and `iters` ship in the base install.
47
50
 
51
+ ## Testing
52
+
53
+ The [test suite](tests/README.md) follows Billy's owner-first Python layout:
54
+ product contracts, cross-cutting assurance, shared support, and standalone tools.
55
+ The [P0 boundary suites](tests/P0.md) exercise installed packaging, real TLS peers,
56
+ filesystem/process failures, and parser/token security. The
57
+ [coverage plan](tests/COVERAGE.md) maps parity, properties, fuzzing,
58
+ penetration, fault injection, packaging, concurrency, resource, and performance
59
+ obligations. Inspect implemented and planned lanes with
60
+ `uv run --no-sync python -m tests.tooling list`; run the active suite with
61
+ `uv run --no-sync pytest -q`.
62
+
63
+ The [fuzz runner](tests/tooling/fuzz/README.md) supplies eleven parser/token
64
+ targets, authenticated corpora, deterministic mutation, and bounded Atheris
65
+ campaigns. Run `uv run --no-sync python -m tests.tooling.fuzz check` to validate
66
+ the inventory, or `uv run --no-sync python -m tests.tooling.fuzz replay` to
67
+ replay every installed target. CI retains findings and coverage corpora.
68
+
69
+ The [chaos runner](tests/tooling/chaos/README.md) exercises recorded filesystem,
70
+ process, stream and clock/entropy failures and recovery. Run
71
+ `uv run --no-sync python -m tests.tooling.chaos run --seed 173` for a bounded
72
+ installed-backend campaign with per-case journals and reproducible schedules.
73
+
74
+ The [concurrency runner](tests/tooling/concurrency/README.md) checks atomic file
75
+ histories, UUID contention and fork safety, and shared cache/parser isolation.
76
+ Run `uv run --no-sync python -m tests.tooling.concurrency run --seed 173` for
77
+ bounded installed-backend workers with retained histories and replay.
78
+
48
79
  ## Prior art
49
80
 
50
81
  - **orjson** (Kloss) / **msgspec** (Fitzgerald) / **pybase64** (aklomp libbase64) — the serde backends.