straw-queue 0.1.2__tar.gz → 0.1.4__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 (518) hide show
  1. straw_queue-0.1.4/.github/workflows/tests.yml +159 -0
  2. {straw_queue-0.1.2 → straw_queue-0.1.4}/.github/workflows/wheels.yml +13 -3
  3. straw_queue-0.1.4/CHANGELOG.md +122 -0
  4. straw_queue-0.1.4/CHANGELOG_zh.md +83 -0
  5. {straw_queue-0.1.2 → straw_queue-0.1.4}/CONTRIBUTING.md +12 -2
  6. {straw_queue-0.1.2 → straw_queue-0.1.4}/CONTRIBUTING_zh.md +7 -2
  7. {straw_queue-0.1.2 → straw_queue-0.1.4}/Cargo.lock +1 -1
  8. straw_queue-0.1.4/Cargo.toml +65 -0
  9. {straw_queue-0.1.2 → straw_queue-0.1.4}/PKG-INFO +4 -2
  10. {straw_queue-0.1.2 → straw_queue-0.1.4}/README.md +3 -1
  11. {straw_queue-0.1.2 → straw_queue-0.1.4}/README_zh.md +2 -1
  12. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/APPLICATIONS.md +2 -0
  13. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/APPLICATIONS_zh.md +2 -0
  14. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/BUILDING.md +7 -3
  15. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/BUILDING_zh.md +7 -3
  16. straw_queue-0.1.4/docs/ENVIRONMENT_MODELS.md +985 -0
  17. straw_queue-0.1.4/docs/ENVIRONMENT_MODELS_zh.md +561 -0
  18. straw_queue-0.1.4/docs/FILESYSTEM.md +1636 -0
  19. straw_queue-0.1.4/docs/FILESYSTEM_zh.md +972 -0
  20. straw_queue-0.1.4/docs/FORMAL_VERIFICATION.md +1952 -0
  21. straw_queue-0.1.4/docs/FORMAL_VERIFICATION_zh.md +1010 -0
  22. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/FORMAT.md +140 -8
  23. straw_queue-0.1.4/docs/FORMAT_zh.md +161 -0
  24. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/PROTOCOL_AND_VERIFICATION.md +21 -11
  25. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/PROTOCOL_AND_VERIFICATION_zh.md +14 -9
  26. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/README.md +9 -0
  27. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/README_zh.md +7 -0
  28. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/USAGE.md +78 -13
  29. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/USAGE_zh.md +56 -4
  30. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/VERIFICATION.md +14 -9
  31. straw_queue-0.1.4/docs/VERIFICATION_BOUNDARIES.md +106 -0
  32. straw_queue-0.1.4/docs/VERIFICATION_BOUNDARIES_zh.md +92 -0
  33. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/VERIFICATION_zh.md +13 -9
  34. {straw_queue-0.1.2 → straw_queue-0.1.4}/pyproject.toml +9 -2
  35. straw_queue-0.1.4/rust/access.rs +25 -0
  36. straw_queue-0.1.4/rust/bounds.rs +161 -0
  37. straw_queue-0.1.4/rust/catalog_append.rs +192 -0
  38. straw_queue-0.1.4/rust/catalog_decode.rs +686 -0
  39. straw_queue-0.1.4/rust/catalog_event.rs +166 -0
  40. straw_queue-0.1.4/rust/catalog_frame.rs +243 -0
  41. straw_queue-0.1.4/rust/catalog_gc.rs +71 -0
  42. straw_queue-0.1.4/rust/catalog_json.rs +341 -0
  43. straw_queue-0.1.4/rust/catalog_log.rs +641 -0
  44. straw_queue-0.1.4/rust/catalog_namespace.rs +241 -0
  45. straw_queue-0.1.4/rust/catalog_primitives.rs +124 -0
  46. straw_queue-0.1.4/rust/catalog_runtime.rs +595 -0
  47. straw_queue-0.1.4/rust/catalog_state.rs +513 -0
  48. straw_queue-0.1.4/rust/catalog_target.rs +247 -0
  49. straw_queue-0.1.4/rust/catalog_transaction.rs +230 -0
  50. straw_queue-0.1.4/rust/closure.rs +635 -0
  51. straw_queue-0.1.4/rust/closure_node.rs +367 -0
  52. straw_queue-0.1.4/rust/consumption.rs +166 -0
  53. {straw_queue-0.1.2 → straw_queue-0.1.4}/rust/coordinator.rs +1028 -473
  54. straw_queue-0.1.4/rust/directory.rs +88 -0
  55. straw_queue-0.1.4/rust/directory_io.rs +76 -0
  56. straw_queue-0.1.4/rust/discovery.rs +45 -0
  57. straw_queue-0.1.4/rust/extent_retry.rs +210 -0
  58. straw_queue-0.1.4/rust/file_adapter.rs +273 -0
  59. straw_queue-0.1.4/rust/file_primitives.rs +204 -0
  60. straw_queue-0.1.4/rust/finalization.rs +135 -0
  61. straw_queue-0.1.4/rust/framing.rs +305 -0
  62. straw_queue-0.1.4/rust/gc.rs +2809 -0
  63. straw_queue-0.1.4/rust/gc_batch.rs +227 -0
  64. straw_queue-0.1.4/rust/gc_collection.rs +848 -0
  65. straw_queue-0.1.4/rust/gc_io.rs +183 -0
  66. straw_queue-0.1.4/rust/gc_mark.rs +262 -0
  67. straw_queue-0.1.4/rust/gc_receipt.rs +239 -0
  68. straw_queue-0.1.4/rust/gc_writer.rs +772 -0
  69. straw_queue-0.1.4/rust/holding.rs +34 -0
  70. straw_queue-0.1.4/rust/identities.rs +70 -0
  71. straw_queue-0.1.4/rust/incomplete.rs +126 -0
  72. straw_queue-0.1.4/rust/journal.rs +624 -0
  73. straw_queue-0.1.4/rust/journal_append.rs +85 -0
  74. straw_queue-0.1.4/rust/journal_io.rs +126 -0
  75. straw_queue-0.1.4/rust/journal_owner.rs +416 -0
  76. straw_queue-0.1.4/rust/journal_primitives.rs +52 -0
  77. straw_queue-0.1.4/rust/journal_recovery.rs +168 -0
  78. straw_queue-0.1.4/rust/journal_state.rs +158 -0
  79. straw_queue-0.1.4/rust/json_update.rs +104 -0
  80. {straw_queue-0.1.2 → straw_queue-0.1.4}/rust/lib.rs +99 -0
  81. straw_queue-0.1.4/rust/namespace_identity.rs +296 -0
  82. straw_queue-0.1.4/rust/namespace_step.rs +168 -0
  83. straw_queue-0.1.4/rust/namespace_target.rs +249 -0
  84. straw_queue-0.1.4/rust/payload.rs +86 -0
  85. straw_queue-0.1.4/rust/pending.rs +30 -0
  86. straw_queue-0.1.4/rust/protocol.rs +432 -0
  87. {straw_queue-0.1.2 → straw_queue-0.1.4}/rust/python.rs +118 -18
  88. straw_queue-0.1.4/rust/queue_admin.rs +510 -0
  89. straw_queue-0.1.4/rust/queue_application.rs +386 -0
  90. straw_queue-0.1.4/rust/queue_commit.rs +340 -0
  91. straw_queue-0.1.4/rust/queue_event.rs +145 -0
  92. straw_queue-0.1.4/rust/queue_gc.rs +789 -0
  93. straw_queue-0.1.4/rust/queue_gc_prepare.rs +150 -0
  94. straw_queue-0.1.4/rust/queue_handoff.rs +465 -0
  95. straw_queue-0.1.4/rust/queue_history.rs +812 -0
  96. straw_queue-0.1.4/rust/queue_metadata.rs +319 -0
  97. straw_queue-0.1.4/rust/queue_progress.rs +418 -0
  98. straw_queue-0.1.4/rust/queue_reader.rs +403 -0
  99. straw_queue-0.1.4/rust/queue_receipt.rs +166 -0
  100. straw_queue-0.1.4/rust/queue_replay.rs +523 -0
  101. straw_queue-0.1.4/rust/queue_retirement.rs +268 -0
  102. straw_queue-0.1.4/rust/queue_roots.rs +935 -0
  103. straw_queue-0.1.4/rust/queue_state.rs +376 -0
  104. straw_queue-0.1.4/rust/queue_task.rs +305 -0
  105. straw_queue-0.1.4/rust/queue_transition.rs +591 -0
  106. straw_queue-0.1.4/rust/reclamation.rs +33 -0
  107. straw_queue-0.1.4/rust/record_index.rs +381 -0
  108. straw_queue-0.1.4/rust/record_manifest.rs +356 -0
  109. straw_queue-0.1.4/rust/reference_node.rs +484 -0
  110. straw_queue-0.1.4/rust/reference_validation.rs +334 -0
  111. straw_queue-0.1.4/rust/replay.rs +68 -0
  112. straw_queue-0.1.4/rust/request.rs +191 -0
  113. straw_queue-0.1.4/rust/selection.rs +31 -0
  114. straw_queue-0.1.4/rust/staging_consumption.rs +655 -0
  115. straw_queue-0.1.4/rust/store.rs +2662 -0
  116. straw_queue-0.1.4/rust/stream.rs +53 -0
  117. straw_queue-0.1.4/rust/traversal.rs +55 -0
  118. straw_queue-0.1.4/rust/typed.rs +40 -0
  119. straw_queue-0.1.4/rust/wal.rs +123 -0
  120. straw_queue-0.1.4/rust/wal_append.rs +166 -0
  121. straw_queue-0.1.4/rust/wal_device.rs +177 -0
  122. straw_queue-0.1.4/rust/wal_file.rs +408 -0
  123. straw_queue-0.1.4/rust/wal_recovery.rs +599 -0
  124. straw_queue-0.1.4/rust/wal_sink.rs +164 -0
  125. straw_queue-0.1.4/rust/wal_source.rs +340 -0
  126. straw_queue-0.1.4/rust/writer_gate.rs +501 -0
  127. straw_queue-0.1.4/rust/writer_gate_flow.rs +390 -0
  128. straw_queue-0.1.4/rust/writer_ownership.rs +350 -0
  129. straw_queue-0.1.4/rust/writer_registry.rs +1100 -0
  130. straw_queue-0.1.4/rust/writer_retirement.rs +263 -0
  131. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/errors.py +8 -0
  132. straw_queue-0.1.4/src/straw/inspect.py +206 -0
  133. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/store.py +43 -7
  134. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/tensor.py +14 -3
  135. straw_queue-0.1.4/tests/native.rs +563 -0
  136. straw_queue-0.1.4/tests/test_artifact_privacy.py +175 -0
  137. straw_queue-0.1.4/tests/test_catalog_encoding.py +145 -0
  138. straw_queue-0.1.4/tests/test_commit_consumption.py +216 -0
  139. straw_queue-0.1.4/tests/test_commit_protocol.py +48 -0
  140. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_consumer_rewind.py +168 -2
  141. straw_queue-0.1.4/tests/test_dependency_traversal.py +102 -0
  142. straw_queue-0.1.4/tests/test_durable_handoff.py +170 -0
  143. straw_queue-0.1.4/tests/test_extent_bounds.py +211 -0
  144. straw_queue-0.1.4/tests/test_extent_visibility.py +301 -0
  145. straw_queue-0.1.4/tests/test_gc_batch.py +180 -0
  146. straw_queue-0.1.4/tests/test_gc_missing_parent.py +129 -0
  147. straw_queue-0.1.4/tests/test_gc_receipts.py +145 -0
  148. straw_queue-0.1.4/tests/test_incomplete_publication.py +223 -0
  149. straw_queue-0.1.4/tests/test_journal_contract.py +28 -0
  150. straw_queue-0.1.4/tests/test_json_roundtrip.py +39 -0
  151. straw_queue-0.1.4/tests/test_lease_selection.py +49 -0
  152. straw_queue-0.1.4/tests/test_metadata_recovery.py +44 -0
  153. straw_queue-0.1.4/tests/test_offline_aliases.py +60 -0
  154. straw_queue-0.1.4/tests/test_offline_inspection.py +112 -0
  155. straw_queue-0.1.4/tests/test_offline_recovery.py +115 -0
  156. straw_queue-0.1.4/tests/test_online_gc.py +589 -0
  157. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_packed_store.py +5 -2
  158. straw_queue-0.1.4/tests/test_path_identity.py +148 -0
  159. straw_queue-0.1.4/tests/test_pending_publication.py +81 -0
  160. straw_queue-0.1.4/tests/test_provisional_holds.py +221 -0
  161. straw_queue-0.1.4/tests/test_publication_handoff.py +136 -0
  162. straw_queue-0.1.4/tests/test_publication_preparation.py +177 -0
  163. straw_queue-0.1.4/tests/test_queue_gc_roots.py +100 -0
  164. straw_queue-0.1.4/tests/test_request_replay.py +120 -0
  165. straw_queue-0.1.4/tests/test_resume_workflow.py +212 -0
  166. straw_queue-0.1.4/tests/test_staging_consumption.py +223 -0
  167. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_streaming_write.py +6 -6
  168. straw_queue-0.1.4/tests/test_task_recovery.py +61 -0
  169. straw_queue-0.1.4/tests/test_tensor_granularity.py +98 -0
  170. straw_queue-0.1.4/tests/test_tensor_preflight.py +77 -0
  171. straw_queue-0.1.4/tests/test_verification_runner.py +158 -0
  172. straw_queue-0.1.4/tests/test_visibility_probe.py +61 -0
  173. straw_queue-0.1.4/tests/test_wal_recovery.py +91 -0
  174. straw_queue-0.1.4/tests/test_writer_access.py +40 -0
  175. straw_queue-0.1.4/tests/test_writer_retirement.py +154 -0
  176. straw_queue-0.1.4/tools/check_artifact_privacy.py +123 -0
  177. {straw_queue-0.1.2 → straw_queue-0.1.4}/tools/check_wheel.py +13 -5
  178. straw_queue-0.1.4/tools/release_build.py +51 -0
  179. straw_queue-0.1.4/verification/README.md +71 -0
  180. straw_queue-0.1.4/verification/README_zh.md +42 -0
  181. straw_queue-0.1.4/verification/common/README.md +30 -0
  182. straw_queue-0.1.4/verification/common/probes/runtime_performance.py +273 -0
  183. straw_queue-0.1.4/verification/common/tla/EnvironmentCatalog.tla +18 -0
  184. straw_queue-0.1.4/verification/common/tla/EnvironmentGraph.tla +11 -0
  185. straw_queue-0.1.4/verification/common/tla/EnvironmentInputs.tla +14 -0
  186. straw_queue-0.1.4/verification/common/tla/EnvironmentNamespace.tla +5 -0
  187. straw_queue-0.1.4/verification/common/tla/EnvironmentPersistence.tla +30 -0
  188. straw_queue-0.1.4/verification/common/tla/EnvironmentProgress.tla +8 -0
  189. straw_queue-0.1.4/verification/common/tla/EnvironmentRead.tla +13 -0
  190. straw_queue-0.1.4/verification/common/verus/collections.rs +59 -0
  191. straw_queue-0.1.4/verification/common/verus/environment.rs +99 -0
  192. straw_queue-0.1.4/verification/common/verus/serde_json.rs +281 -0
  193. straw_queue-0.1.4/verification/common/verus/verus.rs +278 -0
  194. straw_queue-0.1.4/verification/environment_contracts.json +2313 -0
  195. straw_queue-0.1.4/verification/gc/README.md +45 -0
  196. straw_queue-0.1.4/verification/gc/probes/catalog_discovery_fault.c +62 -0
  197. straw_queue-0.1.4/verification/gc/probes/catalog_discovery_probe.py +110 -0
  198. straw_queue-0.1.4/verification/gc/probes/gc_history_probe.py +115 -0
  199. straw_queue-0.1.4/verification/gc/probes/gc_parent_fault.c +81 -0
  200. straw_queue-0.1.4/verification/gc/probes/gc_parent_probe.py +197 -0
  201. straw_queue-0.1.4/verification/gc/probes/gc_receipt_probe.py +81 -0
  202. straw_queue-0.1.4/verification/gc/probes/gc_stat_fault.c +46 -0
  203. straw_queue-0.1.4/verification/gc/probes/gc_stat_probe.py +92 -0
  204. straw_queue-0.1.4/verification/gc/tla/EnvironmentParentRepair.tla +12 -0
  205. straw_queue-0.1.4/verification/gc/tla/EnvironmentWriter.tla +16 -0
  206. straw_queue-0.1.4/verification/gc/tla/EnvironmentWriterRetirement.tla +11 -0
  207. straw_queue-0.1.4/verification/gc/tla/GCBatchDeletion.cfg +6 -0
  208. straw_queue-0.1.4/verification/gc/tla/GCBatchDeletion.tla +53 -0
  209. straw_queue-0.1.4/verification/gc/tla/GCDeletion.cfg +6 -0
  210. straw_queue-0.1.4/verification/gc/tla/GCDeletion.tla +41 -0
  211. straw_queue-0.1.4/verification/gc/tla/GCDiscovery.cfg +9 -0
  212. straw_queue-0.1.4/verification/gc/tla/GCDiscovery.tla +49 -0
  213. straw_queue-0.1.4/verification/gc/tla/GCParentRepair.cfg +8 -0
  214. straw_queue-0.1.4/verification/gc/tla/GCParentRepair.tla +60 -0
  215. straw_queue-0.1.4/verification/gc/tla/GCReceipt.cfg +6 -0
  216. straw_queue-0.1.4/verification/gc/tla/GCReceipt.tla +54 -0
  217. straw_queue-0.1.4/verification/gc/tla/UsageCache.cfg +6 -0
  218. straw_queue-0.1.4/verification/gc/tla/UsageCache.tla +34 -0
  219. straw_queue-0.1.4/verification/gc/tla/WriterLifetime.cfg +8 -0
  220. straw_queue-0.1.4/verification/gc/tla/WriterLifetime.tla +56 -0
  221. straw_queue-0.1.4/verification/gc/tla/WriterRetirement.cfg +8 -0
  222. straw_queue-0.1.4/verification/gc/tla/WriterRetirement.tla +101 -0
  223. straw_queue-0.1.4/verification/gc/verus/gc_liveness.rs +189 -0
  224. straw_queue-0.1.4/verification/measurements/20261023-catalog-buffer.json +338 -0
  225. straw_queue-0.1.4/verification/measurements/20261023-catalog-discovery.json +158 -0
  226. straw_queue-0.1.4/verification/measurements/20261023-catalog-encoding.json +591 -0
  227. straw_queue-0.1.4/verification/measurements/20261023-catalog-history.json +322 -0
  228. straw_queue-0.1.4/verification/measurements/20261023-catalog-replay.json +113 -0
  229. straw_queue-0.1.4/verification/measurements/20261023-control.json +103 -0
  230. straw_queue-0.1.4/verification/measurements/20261023-dependency-traversal.json +173 -0
  231. straw_queue-0.1.4/verification/measurements/20261023-directory-durability.json +197 -0
  232. straw_queue-0.1.4/verification/measurements/20261023-environment-review.json +49 -0
  233. straw_queue-0.1.4/verification/measurements/20261023-gc-batch.json +143 -0
  234. straw_queue-0.1.4/verification/measurements/20261023-gc-parent-repair.json +1005 -0
  235. straw_queue-0.1.4/verification/measurements/20261023-gc-progress.json +88 -0
  236. straw_queue-0.1.4/verification/measurements/20261023-gc-receipt.json +469 -0
  237. straw_queue-0.1.4/verification/measurements/20261023-gc-stat.json +99 -0
  238. straw_queue-0.1.4/verification/measurements/20261023-incomplete-publication.json +1079 -0
  239. straw_queue-0.1.4/verification/measurements/20261023-path-identity.json +680 -0
  240. straw_queue-0.1.4/verification/measurements/20261023-pending-publication.json +428 -0
  241. straw_queue-0.1.4/verification/measurements/20261023-provisional-holds.json +1460 -0
  242. straw_queue-0.1.4/verification/measurements/20261023-publication-finalization.json +475 -0
  243. straw_queue-0.1.4/verification/measurements/20261023-publication-handoff.json +1184 -0
  244. straw_queue-0.1.4/verification/measurements/20261023-publication-preparation.json +672 -0
  245. straw_queue-0.1.4/verification/measurements/20261023-publication-retry.json +225 -0
  246. straw_queue-0.1.4/verification/measurements/20261023-reactivation-timing.json +303 -0
  247. straw_queue-0.1.4/verification/measurements/20261023-reactivation.json +1405 -0
  248. straw_queue-0.1.4/verification/measurements/20261023-selection.json +73 -0
  249. straw_queue-0.1.4/verification/measurements/20261023-shared-record-workflow.json +2572 -0
  250. straw_queue-0.1.4/verification/measurements/20261023-staging-consumption.json +1509 -0
  251. straw_queue-0.1.4/verification/measurements/20261023-stream-length.json +158 -0
  252. straw_queue-0.1.4/verification/measurements/20261023-unlocked-reactivation.json +304 -0
  253. straw_queue-0.1.4/verification/measurements/20261023-writer-lifetime.json +174 -0
  254. straw_queue-0.1.4/verification/measurements/20261023.json +887 -0
  255. straw_queue-0.1.4/verification/measurements/20261024-commit-cleanup.json +239 -0
  256. straw_queue-0.1.4/verification/measurements/20261024-environment-layers.json +69 -0
  257. straw_queue-0.1.4/verification/measurements/20261024-offline-guard.json +484 -0
  258. straw_queue-0.1.4/verification/measurements/20261024-positioned-range.json +345 -0
  259. straw_queue-0.1.4/verification/measurements/20261024-queue-record-workflow.json +386 -0
  260. straw_queue-0.1.4/verification/measurements/20261024-read-latency.json +3468 -0
  261. straw_queue-0.1.4/verification/measurements/20261024-read-lookup.json +610 -0
  262. straw_queue-0.1.4/verification/measurements/20261024-single-open.json +1579 -0
  263. straw_queue-0.1.4/verification/measurements/20261024-tensor-granularity.json +411 -0
  264. straw_queue-0.1.4/verification/measurements/20261024-typed-preflight.json +1674 -0
  265. straw_queue-0.1.4/verification/measurements/20261024-writer-access.json +191 -0
  266. straw_queue-0.1.4/verification/measurements/20261025-catalog-admission.json +206 -0
  267. straw_queue-0.1.4/verification/measurements/20261025-catalog-append.json +577 -0
  268. straw_queue-0.1.4/verification/measurements/20261025-catalog-decode.json +374 -0
  269. straw_queue-0.1.4/verification/measurements/20261025-catalog-equivalence.json +439 -0
  270. straw_queue-0.1.4/verification/measurements/20261025-catalog-event.json +187 -0
  271. straw_queue-0.1.4/verification/measurements/20261025-catalog-frame.json +642 -0
  272. straw_queue-0.1.4/verification/measurements/20261025-catalog-indexes.json +55 -0
  273. straw_queue-0.1.4/verification/measurements/20261025-catalog-json.json +79 -0
  274. straw_queue-0.1.4/verification/measurements/20261025-catalog-log.json +164 -0
  275. straw_queue-0.1.4/verification/measurements/20261025-catalog-recovery.json +1355 -0
  276. straw_queue-0.1.4/verification/measurements/20261025-catalog-target.json +304 -0
  277. straw_queue-0.1.4/verification/measurements/20261025-catalog-transaction.json +697 -0
  278. straw_queue-0.1.4/verification/measurements/20261025-closure-node.json +437 -0
  279. straw_queue-0.1.4/verification/measurements/20261025-commit-recovery.json +736 -0
  280. straw_queue-0.1.4/verification/measurements/20261025-cross-log-composition.json +944 -0
  281. straw_queue-0.1.4/verification/measurements/20261025-dependency-closure.json +529 -0
  282. straw_queue-0.1.4/verification/measurements/20261025-file-adapters.json +2115 -0
  283. straw_queue-0.1.4/verification/measurements/20261025-gc-batch.json +782 -0
  284. straw_queue-0.1.4/verification/measurements/20261025-gc-io.json +726 -0
  285. straw_queue-0.1.4/verification/measurements/20261025-gc-mark.json +489 -0
  286. straw_queue-0.1.4/verification/measurements/20261025-gc-receipt.json +1033 -0
  287. straw_queue-0.1.4/verification/measurements/20261025-journal-append.json +754 -0
  288. straw_queue-0.1.4/verification/measurements/20261025-offline-alias.json +378 -0
  289. straw_queue-0.1.4/verification/measurements/20261025-queue-event.json +819 -0
  290. straw_queue-0.1.4/verification/measurements/20261025-queue-metadata.json +703 -0
  291. straw_queue-0.1.4/verification/measurements/20261025-queue-reader.json +867 -0
  292. straw_queue-0.1.4/verification/measurements/20261025-queue-state.json +1074 -0
  293. straw_queue-0.1.4/verification/measurements/20261025-queue-task.json +992 -0
  294. straw_queue-0.1.4/verification/measurements/20261025-replay-completeness.json +328 -0
  295. straw_queue-0.1.4/verification/measurements/20261025-request-replay.json +477 -0
  296. straw_queue-0.1.4/verification/measurements/20261025-runtime-performance.json +971 -0
  297. straw_queue-0.1.4/verification/measurements/20261025-verification-layout.json +374 -0
  298. straw_queue-0.1.4/verification/measurements/20261025-wal-append.json +165 -0
  299. straw_queue-0.1.4/verification/measurements/20261025-wal-errors-staging-graph.json +58 -0
  300. straw_queue-0.1.4/verification/measurements/20261026-gc-collection.json +297 -0
  301. straw_queue-0.1.4/verification/measurements/20261026-journal-io.json +630 -0
  302. straw_queue-0.1.4/verification/measurements/20261026-owned-chains-integration.json +601 -0
  303. straw_queue-0.1.4/verification/measurements/20261026-queue-admin.json +1021 -0
  304. straw_queue-0.1.4/verification/measurements/20261026-queue-application.json +852 -0
  305. straw_queue-0.1.4/verification/measurements/20261026-queue-history.json +732 -0
  306. straw_queue-0.1.4/verification/measurements/20261026-queue-replay.json +1013 -0
  307. straw_queue-0.1.4/verification/measurements/20261026-queue-transition.json +825 -0
  308. straw_queue-0.1.4/verification/measurements/20261026-release-100gb.json +82 -0
  309. straw_queue-0.1.4/verification/measurements/20261026-release-checks.json +188 -0
  310. straw_queue-0.1.4/verification/measurements/20261026-release-comparison.json +3310 -0
  311. straw_queue-0.1.4/verification/measurements/20261026-release-visibility.json +69 -0
  312. straw_queue-0.1.4/verification/measurements/20261026-writer-admission.json +1110 -0
  313. straw_queue-0.1.4/verification/measurements/20261026-writer-roots-integration.json +212 -0
  314. straw_queue-0.1.4/verification/offline/README.md +26 -0
  315. straw_queue-0.1.4/verification/offline/probes/offline_alias_probe.py +157 -0
  316. straw_queue-0.1.4/verification/offline/probes/offline_guard_fault.c +62 -0
  317. straw_queue-0.1.4/verification/offline/probes/offline_guard_probe.py +193 -0
  318. straw_queue-0.1.4/verification/offline/tla/EnvironmentBindings.tla +6 -0
  319. straw_queue-0.1.4/verification/offline/tla/EnvironmentOffline.tla +9 -0
  320. straw_queue-0.1.4/verification/offline/tla/OfflineAliases.cfg +9 -0
  321. straw_queue-0.1.4/verification/offline/tla/OfflineAliases.tla +54 -0
  322. straw_queue-0.1.4/verification/offline/tla/OfflineCleanup.cfg +13 -0
  323. straw_queue-0.1.4/verification/offline/tla/OfflineCleanup.tla +54 -0
  324. straw_queue-0.1.4/verification/offline/tla/OfflineRoots.cfg +11 -0
  325. straw_queue-0.1.4/verification/offline/tla/OfflineRoots.tla +70 -0
  326. straw_queue-0.1.4/verification/protocol/README.md +69 -0
  327. straw_queue-0.1.4/verification/protocol/probes/commit_cleanup_probe.py +111 -0
  328. straw_queue-0.1.4/verification/protocol/probes/consumption_probe.py +175 -0
  329. straw_queue-0.1.4/verification/protocol/probes/handoff_extent_probe.rs +179 -0
  330. straw_queue-0.1.4/verification/protocol/probes/handoff_probe.py +144 -0
  331. straw_queue-0.1.4/verification/protocol/probes/lease_selection_probe.py +99 -0
  332. straw_queue-0.1.4/verification/protocol/probes/provisional_hold_probe.py +128 -0
  333. straw_queue-0.1.4/verification/protocol/probes/queue_record_probe.rs +383 -0
  334. straw_queue-0.1.4/verification/protocol/probes/reactivation_peer_probe.py +70 -0
  335. straw_queue-0.1.4/verification/protocol/probes/reactivation_probe.rs +200 -0
  336. straw_queue-0.1.4/verification/protocol/probes/workflow_extent_probe.rs +263 -0
  337. straw_queue-0.1.4/verification/protocol/tla/CommitApplication.cfg +7 -0
  338. straw_queue-0.1.4/verification/protocol/tla/CommitApplication.tla +51 -0
  339. straw_queue-0.1.4/verification/protocol/tla/CommitCleanup.cfg +10 -0
  340. straw_queue-0.1.4/verification/protocol/tla/CommitCleanup.tla +60 -0
  341. straw_queue-0.1.4/verification/protocol/tla/Completion.cfg +9 -0
  342. straw_queue-0.1.4/verification/protocol/tla/Completion.tla +76 -0
  343. straw_queue-0.1.4/verification/protocol/tla/CrossLogComposition.cfg +10 -0
  344. straw_queue-0.1.4/verification/protocol/tla/CrossLogComposition.tla +105 -0
  345. straw_queue-0.1.4/verification/protocol/tla/DurableHandoff.cfg +9 -0
  346. straw_queue-0.1.4/verification/protocol/tla/DurableHandoff.tla +171 -0
  347. straw_queue-0.1.4/verification/protocol/tla/EnvironmentApplication.tla +10 -0
  348. straw_queue-0.1.4/verification/protocol/tla/EnvironmentClock.tla +5 -0
  349. straw_queue-0.1.4/verification/protocol/tla/EnvironmentCommitCleanup.tla +9 -0
  350. straw_queue-0.1.4/verification/protocol/tla/EnvironmentConsumption.tla +6 -0
  351. straw_queue-0.1.4/verification/protocol/tla/EnvironmentCrossComposition.tla +14 -0
  352. straw_queue-0.1.4/verification/protocol/tla/EnvironmentCrossLog.tla +22 -0
  353. straw_queue-0.1.4/verification/protocol/tla/EnvironmentHandoff.tla +8 -0
  354. straw_queue-0.1.4/verification/protocol/tla/EnvironmentReaders.tla +5 -0
  355. straw_queue-0.1.4/verification/protocol/tla/EnvironmentRequest.tla +6 -0
  356. straw_queue-0.1.4/verification/protocol/tla/EnvironmentTraining.tla +11 -0
  357. straw_queue-0.1.4/verification/protocol/tla/LeaseSelection.cfg +8 -0
  358. straw_queue-0.1.4/verification/protocol/tla/LeaseSelection.tla +22 -0
  359. straw_queue-0.1.4/verification/protocol/tla/Ownership.cfg +10 -0
  360. straw_queue-0.1.4/verification/protocol/tla/Ownership.tla +142 -0
  361. straw_queue-0.1.4/verification/protocol/tla/ProvisionalHold.cfg +7 -0
  362. straw_queue-0.1.4/verification/protocol/tla/ProvisionalHold.tla +93 -0
  363. straw_queue-0.1.4/verification/protocol/tla/PublicationHandoff.cfg +8 -0
  364. straw_queue-0.1.4/verification/protocol/tla/PublicationHandoff.tla +75 -0
  365. straw_queue-0.1.4/verification/protocol/tla/QueueRecordWorkflow.cfg +9 -0
  366. straw_queue-0.1.4/verification/protocol/tla/QueueRecordWorkflow.tla +79 -0
  367. straw_queue-0.1.4/verification/protocol/tla/ReactivationRace.cfg +7 -0
  368. straw_queue-0.1.4/verification/protocol/tla/ReactivationRace.tla +69 -0
  369. straw_queue-0.1.4/verification/protocol/tla/ReactivationScan.cfg +9 -0
  370. straw_queue-0.1.4/verification/protocol/tla/ReactivationScan.tla +64 -0
  371. straw_queue-0.1.4/verification/protocol/tla/RequestReplay.cfg +8 -0
  372. straw_queue-0.1.4/verification/protocol/tla/RequestReplay.tla +62 -0
  373. straw_queue-0.1.4/verification/protocol/tla/SharedRecordWorkflow.cfg +8 -0
  374. straw_queue-0.1.4/verification/protocol/tla/SharedRecordWorkflow.tla +71 -0
  375. straw_queue-0.1.4/verification/protocol/tla/StagingConsumption.cfg +7 -0
  376. straw_queue-0.1.4/verification/protocol/tla/StagingConsumption.tla +77 -0
  377. straw_queue-0.1.4/verification/protocol/tla/TrainingResume.cfg +6 -0
  378. straw_queue-0.1.4/verification/protocol/tla/TrainingResume.tla +47 -0
  379. straw_queue-0.1.4/verification/protocol/verus/control_plane.rs +147 -0
  380. straw_queue-0.1.4/verification/protocol/verus/cross_log.rs +351 -0
  381. straw_queue-0.1.4/verification/protocol/verus/queue_event_equivalence.rs +146 -0
  382. straw_queue-0.1.4/verification/protocol/verus/queue_transition_roots.rs +67 -0
  383. straw_queue-0.1.4/verification/protocol/verus/request_history.rs +66 -0
  384. straw_queue-0.1.4/verification/protocol/verus/retry_liveness.rs +168 -0
  385. straw_queue-0.1.4/verification/runners/check_tla.py +1362 -0
  386. straw_queue-0.1.4/verification/runners/check_verus.py +7292 -0
  387. straw_queue-0.1.4/verification/runners/environment_manifest.py +225 -0
  388. straw_queue-0.1.4/verification/storage/README.md +47 -0
  389. straw_queue-0.1.4/verification/storage/probes/catalog_encoding_probe.py +120 -0
  390. straw_queue-0.1.4/verification/storage/probes/dependency_probe.py +98 -0
  391. straw_queue-0.1.4/verification/storage/probes/directory_sync_fault.c +43 -0
  392. straw_queue-0.1.4/verification/storage/probes/directory_sync_probe.py +153 -0
  393. straw_queue-0.1.4/verification/storage/probes/extent_visibility_probe.py +420 -0
  394. straw_queue-0.1.4/verification/storage/probes/filesystem_bandwidth_probe.py +239 -0
  395. straw_queue-0.1.4/verification/storage/probes/incomplete_cleanup_fault.c +77 -0
  396. straw_queue-0.1.4/verification/storage/probes/incomplete_publication_probe.py +212 -0
  397. straw_queue-0.1.4/verification/storage/probes/large_extent_probe.rs +139 -0
  398. straw_queue-0.1.4/verification/storage/probes/namespace_lookup_count.c +30 -0
  399. straw_queue-0.1.4/verification/storage/probes/path_identity_probe.py +295 -0
  400. straw_queue-0.1.4/verification/storage/probes/pending_publication_probe.py +166 -0
  401. straw_queue-0.1.4/verification/storage/probes/positioned_extent_probe.rs +255 -0
  402. straw_queue-0.1.4/verification/storage/probes/preparation_fault.c +81 -0
  403. straw_queue-0.1.4/verification/storage/probes/preparation_probe.py +161 -0
  404. straw_queue-0.1.4/verification/storage/probes/publication_finalize_probe.py +170 -0
  405. straw_queue-0.1.4/verification/storage/probes/publication_retry_probe.py +149 -0
  406. straw_queue-0.1.4/verification/storage/probes/publication_sync_fault.c +43 -0
  407. straw_queue-0.1.4/verification/storage/probes/read_latency_probe.py +243 -0
  408. straw_queue-0.1.4/verification/storage/probes/read_latency_trace.c +164 -0
  409. straw_queue-0.1.4/verification/storage/probes/read_lookup_fault.c +117 -0
  410. straw_queue-0.1.4/verification/storage/probes/read_lookup_probe.py +231 -0
  411. straw_queue-0.1.4/verification/storage/probes/standalone_extent_probe.rs +106 -0
  412. straw_queue-0.1.4/verification/storage/probes/tensor_granularity_probe.py +87 -0
  413. straw_queue-0.1.4/verification/storage/probes/typed_preflight_probe.py +140 -0
  414. straw_queue-0.1.4/verification/storage/probes/writer_access_probe.py +114 -0
  415. straw_queue-0.1.4/verification/storage/probes/writer_lifetime_probe.py +143 -0
  416. straw_queue-0.1.4/verification/storage/tla/DependencyTraversal.cfg +8 -0
  417. straw_queue-0.1.4/verification/storage/tla/DependencyTraversal.tla +36 -0
  418. straw_queue-0.1.4/verification/storage/tla/DirectoryDurability.cfg +11 -0
  419. straw_queue-0.1.4/verification/storage/tla/DirectoryDurability.tla +63 -0
  420. straw_queue-0.1.4/verification/storage/tla/EnvironmentAuthentication.tla +6 -0
  421. straw_queue-0.1.4/verification/storage/tla/EnvironmentIncomplete.tla +8 -0
  422. straw_queue-0.1.4/verification/storage/tla/EnvironmentLocalAccess.tla +7 -0
  423. straw_queue-0.1.4/verification/storage/tla/EnvironmentLookup.tla +9 -0
  424. straw_queue-0.1.4/verification/storage/tla/EnvironmentPreparation.tla +8 -0
  425. straw_queue-0.1.4/verification/storage/tla/EnvironmentTyped.tla +8 -0
  426. straw_queue-0.1.4/verification/storage/tla/EnvironmentVisibility.tla +10 -0
  427. straw_queue-0.1.4/verification/storage/tla/ExtentArithmetic.cfg +7 -0
  428. straw_queue-0.1.4/verification/storage/tla/ExtentArithmetic.tla +31 -0
  429. straw_queue-0.1.4/verification/storage/tla/ExtentVisibility.cfg +11 -0
  430. straw_queue-0.1.4/verification/storage/tla/ExtentVisibility.tla +79 -0
  431. straw_queue-0.1.4/verification/storage/tla/IncompletePublication.cfg +9 -0
  432. straw_queue-0.1.4/verification/storage/tla/IncompletePublication.tla +71 -0
  433. straw_queue-0.1.4/verification/storage/tla/NamespaceEncoding.cfg +7 -0
  434. straw_queue-0.1.4/verification/storage/tla/NamespaceEncoding.tla +44 -0
  435. straw_queue-0.1.4/verification/storage/tla/NamespaceIdentity.cfg +10 -0
  436. straw_queue-0.1.4/verification/storage/tla/NamespaceIdentity.tla +62 -0
  437. straw_queue-0.1.4/verification/storage/tla/PayloadStream.cfg +8 -0
  438. straw_queue-0.1.4/verification/storage/tla/PayloadStream.tla +47 -0
  439. straw_queue-0.1.4/verification/storage/tla/PendingPublication.cfg +9 -0
  440. straw_queue-0.1.4/verification/storage/tla/PendingPublication.tla +61 -0
  441. straw_queue-0.1.4/verification/storage/tla/PublicationFinalization.cfg +8 -0
  442. straw_queue-0.1.4/verification/storage/tla/PublicationFinalization.tla +58 -0
  443. straw_queue-0.1.4/verification/storage/tla/PublicationPreparation.cfg +7 -0
  444. straw_queue-0.1.4/verification/storage/tla/PublicationPreparation.tla +69 -0
  445. straw_queue-0.1.4/verification/storage/tla/PublicationRetry.cfg +9 -0
  446. straw_queue-0.1.4/verification/storage/tla/PublicationRetry.tla +50 -0
  447. straw_queue-0.1.4/verification/storage/tla/RangeRead.cfg +11 -0
  448. straw_queue-0.1.4/verification/storage/tla/RangeRead.tla +76 -0
  449. straw_queue-0.1.4/verification/storage/tla/ReadAttempt.cfg +11 -0
  450. straw_queue-0.1.4/verification/storage/tla/ReadAttempt.tla +63 -0
  451. straw_queue-0.1.4/verification/storage/tla/ReadLookup.cfg +12 -0
  452. straw_queue-0.1.4/verification/storage/tla/ReadLookup.tla +77 -0
  453. straw_queue-0.1.4/verification/storage/tla/TensorGranularity.cfg +8 -0
  454. straw_queue-0.1.4/verification/storage/tla/TensorGranularity.tla +48 -0
  455. straw_queue-0.1.4/verification/storage/tla/TypedRead.cfg +8 -0
  456. straw_queue-0.1.4/verification/storage/tla/TypedRead.tla +47 -0
  457. straw_queue-0.1.4/verification/storage/tla/WriterAccess.cfg +7 -0
  458. straw_queue-0.1.4/verification/storage/tla/WriterAccess.tla +53 -0
  459. straw_queue-0.1.4/verification/wal/README.md +61 -0
  460. {straw_queue-0.1.2/verification → straw_queue-0.1.4/verification/wal/checks}/crash_campaign.py +2 -2
  461. straw_queue-0.1.4/verification/wal/probes/catalog_fsync_fault.c +29 -0
  462. straw_queue-0.1.4/verification/wal/probes/catalog_history_probe.py +157 -0
  463. straw_queue-0.1.4/verification/wal/probes/catalog_replay_probe.py +126 -0
  464. straw_queue-0.1.4/verification/wal/tla/CatalogReadBuffer.cfg +10 -0
  465. straw_queue-0.1.4/verification/wal/tla/CatalogReadBuffer.tla +67 -0
  466. straw_queue-0.1.4/verification/wal/tla/CatalogReplay.cfg +7 -0
  467. straw_queue-0.1.4/verification/wal/tla/CatalogReplay.tla +58 -0
  468. straw_queue-0.1.4/verification/wal/tla/CatalogTransaction.cfg +8 -0
  469. straw_queue-0.1.4/verification/wal/tla/CatalogTransaction.tla +79 -0
  470. straw_queue-0.1.4/verification/wal/tla/EnvironmentWal.tla +20 -0
  471. straw_queue-0.1.4/verification/wal/tla/WalRecovery.cfg +8 -0
  472. straw_queue-0.1.4/verification/wal/tla/WalRecovery.tla +89 -0
  473. straw_queue-0.1.4/verification/wal/verus/catalog_equivalence.rs +274 -0
  474. straw_queue-0.1.4/verification/wal/verus/catalog_json_equivalence.rs +157 -0
  475. straw_queue-0.1.4/verification/wal/verus/journal_equivalence.rs +149 -0
  476. straw_queue-0.1.4/verification/wal/verus/prefix_projection.rs +96 -0
  477. straw_queue-0.1.2/.github/workflows/tests.yml +0 -69
  478. straw_queue-0.1.2/CHANGELOG.md +0 -69
  479. straw_queue-0.1.2/CHANGELOG_zh.md +0 -34
  480. straw_queue-0.1.2/Cargo.toml +0 -34
  481. straw_queue-0.1.2/docs/FILESYSTEM.md +0 -105
  482. straw_queue-0.1.2/docs/FILESYSTEM_zh.md +0 -63
  483. straw_queue-0.1.2/docs/FORMAT_zh.md +0 -116
  484. straw_queue-0.1.2/rust/gc.rs +0 -494
  485. straw_queue-0.1.2/rust/journal.rs +0 -184
  486. straw_queue-0.1.2/rust/payload.rs +0 -40
  487. straw_queue-0.1.2/rust/store.rs +0 -1157
  488. straw_queue-0.1.2/src/straw/inspect.py +0 -128
  489. straw_queue-0.1.2/tests/native.rs +0 -183
  490. straw_queue-0.1.2/tests/test_extent_visibility.py +0 -89
  491. straw_queue-0.1.2/tests/test_online_gc.py +0 -276
  492. {straw_queue-0.1.2 → straw_queue-0.1.4}/LICENSE +0 -0
  493. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/BENCHMARKS.md +0 -0
  494. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/BENCHMARKS_zh.md +0 -0
  495. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/DESIGN.md +0 -0
  496. {straw_queue-0.1.2 → straw_queue-0.1.4}/docs/DESIGN_zh.md +0 -0
  497. {straw_queue-0.1.2 → straw_queue-0.1.4}/examples/multiprocess.py +0 -0
  498. {straw_queue-0.1.2 → straw_queue-0.1.4}/examples/records.py +0 -0
  499. {straw_queue-0.1.2 → straw_queue-0.1.4}/examples/tensors.py +0 -0
  500. {straw_queue-0.1.2 → straw_queue-0.1.4}/examples/work_queue.py +0 -0
  501. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/__init__.py +0 -0
  502. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/backend.py +0 -0
  503. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/benchmark.py +0 -0
  504. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/coordinator.py +0 -0
  505. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/journal.py +0 -0
  506. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/protocol.py +0 -0
  507. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/reporting.py +0 -0
  508. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/rpc.py +0 -0
  509. {straw_queue-0.1.2 → straw_queue-0.1.4}/src/straw/tracing.py +0 -0
  510. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_benchmark_profile.py +0 -0
  511. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_filesystem_queue.py +0 -0
  512. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_gc_extent_validation.py +0 -0
  513. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_read_session.py +0 -0
  514. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_tensor.py +0 -0
  515. {straw_queue-0.1.2 → straw_queue-0.1.4}/tests/test_unlimited_capacity.py +0 -0
  516. {straw_queue-0.1.2/verification → straw_queue-0.1.4/verification/gc/probes}/gc_cross_client.py +0 -0
  517. {straw_queue-0.1.2/verification → straw_queue-0.1.4/verification/gc/probes}/gc_scale.py +0 -0
  518. {straw_queue-0.1.2/verification → straw_queue-0.1.4/verification/protocol/checks}/ownership_model.py +0 -0
@@ -0,0 +1,159 @@
1
+ name: tests
2
+
3
+ on:
4
+ push:
5
+ branches: ['**']
6
+ pull_request:
7
+ workflow_dispatch:
8
+ workflow_call:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ formal:
15
+ name: TLA+ / shard ${{ matrix.shard }}
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 60
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ shard: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: actions/setup-python@v5
25
+ with:
26
+ python-version: '3.12'
27
+ - uses: actions/setup-java@v4
28
+ with:
29
+ distribution: temurin
30
+ java-version: '17'
31
+ - name: Check specifications and expected counterexamples
32
+ run: >-
33
+ python verification/runners/check_tla.py
34
+ --shard-index ${{ matrix.shard }} --shard-count 16
35
+ - uses: actions/upload-artifact@v4
36
+ if: always()
37
+ with:
38
+ name: tla-verification-${{ matrix.shard }}
39
+ path: |
40
+ target/tla/report.json
41
+ target/tla/environment_contracts.json
42
+ target/tla/**/*.log
43
+ target/tla/**/*.tla
44
+ target/tla/**/*.cfg
45
+ if-no-files-found: error
46
+
47
+ verus:
48
+ name: Verus / shard ${{ matrix.shard }}
49
+ runs-on: ubuntu-latest
50
+ timeout-minutes: 60
51
+ strategy:
52
+ fail-fast: false
53
+ matrix:
54
+ shard: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
55
+ steps:
56
+ - uses: actions/checkout@v4
57
+ - uses: dtolnay/rust-toolchain@1.99.1
58
+ with:
59
+ components: rustc-dev, llvm-tools
60
+ - uses: actions/setup-python@v5
61
+ with:
62
+ python-version: '3.12'
63
+ - name: Verify pinned Rust contracts and semantic mutants
64
+ run: >-
65
+ python verification/runners/check_verus.py --download --timeout 600
66
+ --shard-index ${{ matrix.shard }} --shard-count 16
67
+ - uses: actions/upload-artifact@v4
68
+ if: always()
69
+ with:
70
+ name: verus-verification-${{ matrix.shard }}
71
+ path: |
72
+ target/verus/report.json
73
+ target/verus/environment_contracts.json
74
+ target/verus/**/*.log
75
+ target/verus/**/*.rs
76
+ if-no-files-found: error
77
+
78
+ checks:
79
+ name: Rust tests and code checks
80
+ runs-on: ubuntu-latest
81
+ timeout-minutes: 20
82
+ steps:
83
+ - uses: actions/checkout@v4
84
+ - uses: dtolnay/rust-toolchain@stable
85
+ with:
86
+ components: rustfmt, clippy
87
+ - uses: actions/setup-python@v5
88
+ with:
89
+ python-version: '3.12'
90
+ - name: Install formatters
91
+ run: python -m pip install 'black>=24.8' 'isort>=5.13'
92
+ - name: Check environment contract inventory
93
+ run: python verification/runners/environment_manifest.py --check
94
+ - name: Check formatting
95
+ run: |
96
+ cargo fmt --check
97
+ python -m black --check src tests examples tools verification
98
+ python -m isort --check-only src tests examples tools verification
99
+ - name: Lint native core and Python bindings
100
+ run: |
101
+ cargo clippy --locked --all-targets -- -D warnings
102
+ cargo clippy --locked --all-targets --features python -- -D warnings
103
+ - name: Run Rust tests
104
+ run: cargo test --locked
105
+
106
+ python:
107
+ name: Full suite / Python ${{ matrix.python }}
108
+ runs-on: ubuntu-latest
109
+ timeout-minutes: 30
110
+ strategy:
111
+ fail-fast: false
112
+ matrix:
113
+ python: ['3.10', '3.11', '3.12', '3.13']
114
+ steps:
115
+ - uses: actions/checkout@v4
116
+ - uses: dtolnay/rust-toolchain@stable
117
+ - uses: actions/setup-python@v5
118
+ with:
119
+ python-version: ${{ matrix.python }}
120
+ - name: Install build and test dependencies
121
+ run: |
122
+ python -m pip install 'build>=1.2' 'twine>=5' 'numpy>=1.24' 'pytest>=8'
123
+ python -m pip install 'torch>=2.3' --index-url https://download.pytorch.org/whl/cpu
124
+ - name: Build the wheel
125
+ run: python tools/release_build.py python -m build --wheel
126
+ - name: Check package metadata
127
+ run: python -m twine check dist/*
128
+ - name: Run all Python and protocol tests against the installed wheel
129
+ # Includes examples, multiprocess recovery, the ownership model, crash
130
+ # injection, a bounded I/O/GC benchmark and trace verification.
131
+ run: python tools/check_wheel.py dist/*.whl --tests --report wheel-check.json
132
+ - uses: actions/upload-artifact@v4
133
+ if: always()
134
+ with:
135
+ name: test-report-py${{ matrix.python }}
136
+ path: wheel-check.json
137
+ if-no-files-found: warn
138
+
139
+ verification:
140
+ name: Verification passed
141
+ needs: [formal, verus, checks, python]
142
+ if: always()
143
+ runs-on: ubuntu-latest
144
+ timeout-minutes: 5
145
+ steps:
146
+ - name: Require every verification job to succeed
147
+ env:
148
+ RESULTS: ${{ toJSON(needs) }}
149
+ run: |
150
+ python3 - <<'PY'
151
+ import json
152
+ import os
153
+
154
+ results = json.loads(os.environ["RESULTS"])
155
+ assert set(results) == {"formal", "verus", "checks", "python"}
156
+ failed = {name: job["result"] for name, job in results.items() if job["result"] != "success"}
157
+ if failed:
158
+ raise SystemExit(f"Verification did not pass: {failed}")
159
+ PY
@@ -7,7 +7,11 @@ on:
7
7
  permissions:
8
8
  contents: read
9
9
  jobs:
10
+ verification:
11
+ name: Verify the release source
12
+ uses: ./.github/workflows/tests.yml
10
13
  build:
14
+ needs: verification
11
15
  runs-on: ubuntu-latest
12
16
  timeout-minutes: 30
13
17
  strategy:
@@ -21,7 +25,11 @@ jobs:
21
25
  target: x86_64
22
26
  # The action adds --manylinux; do not also pass --compatibility in args.
23
27
  manylinux: '2_28'
28
+ before-script-linux: |
29
+ export CARGO_ENCODED_RUSTFLAGS="$(python3 tools/release_build.py --print-flags)"
24
30
  args: --release --locked --strip --out dist --interpreter /opt/python/cp${{ matrix.python-tag }}-cp${{ matrix.python-tag }}/bin/python
31
+ - name: Check release artifact privacy
32
+ run: python3 tools/check_artifact_privacy.py dist/*.whl
25
33
  - uses: actions/upload-artifact@v4
26
34
  with:
27
35
  name: wheel-cp${{ matrix.python-tag }}-linux-x86_64
@@ -63,6 +71,7 @@ jobs:
63
71
  name: wheel-check-cp${{ matrix.tag }}
64
72
  path: wheel-check.json
65
73
  sdist:
74
+ needs: verification
66
75
  runs-on: ubuntu-latest
67
76
  timeout-minutes: 30
68
77
  steps:
@@ -73,9 +82,10 @@ jobs:
73
82
  python-version: '3.12'
74
83
  - run: python -m pip install 'build>=1.2' 'twine>=5' 'numpy>=1.24' 'pytest>=8'
75
84
  - run: python -m pip install 'torch>=2.3' --index-url https://download.pytorch.org/whl/cpu
76
- - run: python -m build --sdist
85
+ - run: python tools/release_build.py python -m build --sdist
77
86
  - run: python -m twine check dist/*
78
- - run: python -m pip wheel --no-deps dist/*.tar.gz --wheel-dir rebuilt
87
+ - run: python tools/release_build.py python -m pip wheel --no-deps dist/*.tar.gz --wheel-dir rebuilt
88
+ - run: python tools/check_artifact_privacy.py dist/*.tar.gz rebuilt/*.whl
79
89
  - run: python -m twine check rebuilt/*
80
90
  - run: python tools/check_wheel.py rebuilt/*.whl --tests --report wheel-check.json
81
91
  - uses: actions/upload-artifact@v4
@@ -90,7 +100,7 @@ jobs:
90
100
  path: wheel-check.json
91
101
  publish:
92
102
  name: Publish to PyPI
93
- needs: [smoke, sdist]
103
+ needs: [verification, smoke, sdist]
94
104
  if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
95
105
  runs-on: ubuntu-latest
96
106
  timeout-minutes: 10
@@ -0,0 +1,122 @@
1
+ # Changelog
2
+
3
+ [中文版](CHANGELOG_zh.md)
4
+
5
+ ## 0.1.4
6
+
7
+ ### Recovery and continuation
8
+
9
+ - Preserve producer continuation payloads and independent reader, consumer and checkpoint roots during online GC. Sampling can resume from its durable continuation after process failure. Training applications must select and load a checkpoint with matching model/optimizer state and data cursors, and retain data needed for replay; straw does not automatically load a model checkpoint or recreate reclaimed data.
10
+ - Resolve durable receipts before reopening old references when retrying accepted consumer-state, batch-plan, batch-ready and checkpoint-registration requests. Identical retries can succeed after those references have been legitimately reclaimed, without creating new ownership.
11
+ - Persist staging cleanup intent, dependency recipes and generation-specific completion receipts. Recovery can finish an accepted handoff after a lost reply without releasing a later staging generation of the same reference.
12
+ - Quarantine uncertain WAL writes, partial state application and caught Rust callback panics until recovery. Reject malformed journal/catalog events before appending, preserve confirmed prefixes during rebuild and reject changed pool/run or log identity. Harden counter arithmetic and deduplicate repeated task IDs before lease selection.
13
+
14
+ ### Storage and reads
15
+
16
+ - Retry independent visibility delays in the header, footer, index, envelope, payload and tensor checksum chunks within one bounded budget. Every returned record remains authenticated; persistent corruption fails after the budget expires.
17
+ - Reuse the authenticated index descriptor within a read attempt and buffer catalog replay with at most 64 KiB of read-ahead. Failed read attempts reopen their files. Replace recursive dependency walks with deduplicated worklists to support deep graphs.
18
+ - Validate tensor dtype, shape and length before reading payloads. New tensors use 4 MiB checksum chunks; older tensors retain their stored chunk sizes. Checkpoint reactivation authenticates all reachable payloads outside the catalog lock with at most 1 MiB of payload scratch, then rechecks ownership and tombstones under the lock.
19
+ - Preserve exact finite JSON floating-point values through serialization and recovery. Reject native payload providers whose traversals have the wrong length or swallow callback failures.
20
+
21
+ ### Garbage collection and publication safety
22
+
23
+ - Retry directory barriers after unlink, including already absent files and missing parents. Batch shared-parent barriers and persist reclamation receipts only after deletion is durable. Preserve permanent tombstones; a cold-cache retain of a reclaimed root or dependency now returns `InvalidReference` before trying to read its missing payload.
24
+ - Protect canonical paths and aliases, peer queues, active readers, checkpoints, producer continuations and pending publications. Public owner APIs reject internal `queue:` and `publication:` names. Offline cleanup preserves control files, rejects symlink cycles on Python 3.13 as well as earlier versions, and fails closed on uncertain shared-pool discovery; dangling orphan links remain eligible for cleanup.
25
+ - Preserve dependency holds and retry identities through failed publication setup, synchronization, staging and sealing. Repair missing ancestor barriers, roll back unpublished tails before writer reuse and seal completed standalone reservations so they can be collected. A failed GC hook with partial WAL effects forces fresh recovery before further writes.
26
+
27
+ ### Writer retirement
28
+
29
+ - Add explicit `retire_writer(..., policy="recover" | "abandon")` with a durable fence, operation registry and reusable recovery receipts. Recovery stages complete results before releasing preparation ownership; abandonment preserves existing queue, reader and staging roots. A writer holding its gate reports `WriterBusy`, and a fenced writer cannot resume writing. Retirement depends on the documented lock, fence-visibility and in-flight-I/O contracts; timeouts alone do not establish death.
30
+ - Reject busy writer metrics, seal and close operations without waiting on an in-flight callback. Unknown legacy preparation owners remain protected and are reported for separate recovery.
31
+
32
+ ### Compatibility and migration
33
+
34
+ - Packed-record and WAL byte framing remain unchanged, and legacy catalog entries still replay. New queue staging-handoff events require updated coordinators: do not downgrade a queue writer after those events are stored. Upgrade all GC participants before relying on canonical-alias protection; an old collector can still delete an aliased owned file. Mixed versions do not gain a uniform cleanup/retry guarantee; historical leaks and already reclaimed legacy manifests are not automatically repaired. See [format compatibility](docs/FORMAT.md#queue-staging-handoff-receipts).
35
+ - Rust callers must use read-only coordinator accessors (`state()`, `journal()`, `store()`, `limits()`, `epoch()`), publish through a separate `Store`, and replace explicitly typed `&mut Catalog` callbacks with `&mut LockedCatalog<'_>`. `Config::gc_enabled` returns `Result<bool>`. Existing Python call signatures are retained, with the retirement APIs added.
36
+ - Previously rounded floats cannot be reconstructed. Old rounded request hashes and retries generated under a different tensor chunk policy can conflict after upgrade; preserve retry identities and review the [stored-format rules](docs/FORMAT.md). Catalog recipes and receipts currently grow without compaction.
37
+
38
+ ### Known performance regressions
39
+
40
+ - In the same JuiceFS workload with online GC, median write throughput fell 20.7% and acceptance time for 64 tasks rose 34.8% versus 0.1.3; reads and synchronous WAL appends showed no comparable decline. This short comparison used two rounds per build with warm caches. It was not profiled, so the changes cannot be attributed to a particular safety protocol or proof-related refactoring. See the [complete samples and build hashes](verification/measurements/20261026-release-comparison.json).
41
+
42
+ ### CI and verification
43
+
44
+ - Scan source distributions and wheel contents, including native libraries, for local paths and recognizable credentials. Remap Rust build paths before compilation so released binaries omit local source, home and toolchain locations; CI checks artifacts before upload and rejects findings without printing matched secrets.
45
+ - Require TLA+/Verus checks, semantic negative controls, environment-contract audits, Rust/Python tests, formatting and Clippy before release builds and publishing. TLC records its jar hash without enforcing a checksum; Verus logs distinguish successful proofs from expected semantic rejections. Verification files are organized by protocol, WAL, GC, storage and offline recovery, with independently reviewable environment assumptions.
46
+ - Freeze new formal-verification work for this release. Integrated proofs cover specific production bodies and models; complete retain/reactivation, cross-log recovery, authentication and liveness composition remain deferred and receive regression/fault-injection coverage. See the [release scope and boundaries](docs/FORMAL_VERIFICATION.md#verification-scope-for-this-release). Passing tests does not complete these proofs, and prior performance measurements do not establish this build's throughput or latency.
47
+
48
+ ## 0.1.3
49
+
50
+ - Retry temporarily zero-filled bytes anywhere in a published extent's header,
51
+ including partial and noncontiguous visibility gaps. Previously, only an
52
+ entirely zero-filled header triggered this retry. The retry limit and checksum
53
+ validation remain unchanged; other incorrect header bytes fail immediately.
54
+
55
+ Existing callers and stored data remain compatible. Packed-record and WAL
56
+ formats are unchanged.
57
+
58
+ ## 0.1.2
59
+
60
+ - Stream large record payloads through bounded native write buffers. Records and
61
+ publications no longer need to fit the writer's scratch buffer; existing
62
+ packed-record framing and tensor reads are unchanged.
63
+ - Remove fixed logical quotas on record and dependency counts, result sizes,
64
+ queue work, control messages, and metadata. Legacy limit arguments remain
65
+ accepted for API and queue-identity compatibility; `max_buffer_bytes` still
66
+ bounds temporary payload copies.
67
+ - Retry transient shared-filesystem visibility gaps when a published extent's
68
+ length is visible before its header bytes. The reader reopens the file after
69
+ short delays; persistent failures, nonzero bad headers, and checksum errors
70
+ remain errors.
71
+
72
+ Existing stored data and callers remain compatible. These write and read
73
+ behaviors require 0.1.2; packed-record and WAL formats are unchanged.
74
+
75
+ ## 0.1.1
76
+
77
+ - Persistent task scheduling with `TaskSpec.priority` (higher first),
78
+ `scheduling_key` (lower first), then FIFO. Both keys default to zero and accept
79
+ signed 64-bit integers. The Rust pending index selects tasks without reading
80
+ their payloads and reconstructs scheduling order during WAL recovery.
81
+ - `Coordinator.yield_tasks()` atomically saves a batch of continuation inputs
82
+ and optional scheduling fields, ends their leases, and returns the tasks to
83
+ the pending queue without spending failure retries. Returned tasks join the
84
+ tail of their scheduling key's FIFO order. Identical requests are idempotent;
85
+ a stale lease rejects the entire batch.
86
+ - `Coordinator.pending_tasks()` exposes pending task specifications in
87
+ acquisition order, with optional task-prefix and minimum-priority filters.
88
+ Applications coordinate paused snapshots and retain the referenced inputs.
89
+ - Regression coverage for priority/FIFO recovery, stale leases, invalid
90
+ scheduling keys, and all-or-nothing batch recovery across WAL crash windows.
91
+
92
+ Existing callers may omit the new scheduling fields. Packed-record and WAL
93
+ framing are unchanged; the new APIs and scheduling behavior require 0.1.1.
94
+ Pending-task snapshots alone do not provide a joint application checkpoint or
95
+ arbitrary checkpoint rollback.
96
+
97
+ ## 0.1.0
98
+
99
+ Initial release of straw, a filesystem-based durable queue and shared tensor
100
+ store for AI applications, distributed as `straw-queue` under the MIT license.
101
+
102
+ - Rust storage, WAL, queue and ownership protocols with Python APIs. Multiple
103
+ machines can read and write through a shared filesystem; the initial shared
104
+ storage target is JuiceFS.
105
+ - Packed immutable records and embedded manifests, batched publication and
106
+ size-based file rotation, avoiding a file per sample or tensor.
107
+ - Bytes and custom codecs, NumPy/PyTorch tensors, checked lazy row reads and
108
+ native read sessions that reuse authenticated indices.
109
+ - Shared tensor references across queues, tensor-level copy-on-write, explicit
110
+ reader/checkpoint ownership and optional online GC of unreferenced sealed packs.
111
+ - Durable task leases, continuation progress, completion receipts and consumer
112
+ state, with WAL recovery and retained-checkpoint restore.
113
+ - Local and multi-host I/O benchmarks, workload profiling and replay, an
114
+ independent protocol model, and process-crash/recovery checks.
115
+ - Linux x86_64 wheels for CPython 3.10–3.13, automated artifact tests and PyPI
116
+ Trusted Publishing, standalone examples and paired English/Chinese guides.
117
+
118
+ Each queue requires one externally fenced coordinator. Automatic failover,
119
+ live-pack compaction, journal compaction and a general distributed application
120
+ checkpoint transaction are not provided. Additional network filesystems require
121
+ deployment validation. See the [filesystem requirements](docs/FILESYSTEM.md) and
122
+ [protocol guarantees](docs/PROTOCOL_AND_VERIFICATION.md).
@@ -0,0 +1,83 @@
1
+ # 更新日志
2
+
3
+ [English](CHANGELOG.md)
4
+
5
+ ## 0.1.4
6
+
7
+ ### 恢复与续读
8
+
9
+ - 在线 GC 保留 producer continuation,以及独立的 reader、consumer 和 checkpoint 根。采样进程失败后可以从已持久化的 continuation 恢复。训练应用仍须选择并加载 checkpoint,恢复相匹配的模型/optimizer 状态与数据游标,并保留重放需要的数据;straw 不会自动加载模型 checkpoint,也不能恢复已回收的数据。
10
+ - 重试已接受的 consumer state、batch plan、batch ready 和 checkpoint registration 时,先查询持久回执,再决定是否读取旧引用。即使旧数据已合法回收,相同请求仍可返回原结果,不会重新建立所有权。
11
+ - 持久化 staging 清理意图、依赖关系和对应代际的完成回执。丢失回复后,恢复可以完成已接受的交接,不会释放同一引用后来重新建立的 staging。
12
+ - WAL 写入结果不确定、状态部分应用或捕获 Rust callback panic 后,保持隔离直至恢复。追加前拒绝畸形 journal/catalog 事件,重建时保护已确认前缀,并拒绝池/run/日志身份变化。补齐计数溢出检查,发放 lease 前对重复 task ID 去重。
13
+
14
+ ### 存储与读取
15
+
16
+ - header、footer、index、envelope、payload 和 tensor checksum chunk 可在同一有限预算内重试各自的可见性延迟。返回的数据始终经过认证;持续损坏会在预算耗尽后报错。
17
+ - 同次读取尝试复用认证索引的文件描述符,catalog replay 使用至多 64 KiB 预读;失败后重新打开文件。依赖遍历改用去重工作队列,支持深层依赖图。
18
+ - 读取 payload 前检查 tensor dtype、shape 和长度。新 tensor 使用 4 MiB checksum chunk,旧数据沿用存储的 chunk 大小。checkpoint 重新激活在 catalog 锁外认证全部可达 payload,payload scratch 至多 1 MiB,随后在锁内重新检查所有权和 tombstone。
19
+ - JSON 有限浮点数在序列化/恢复中精确往返。拒绝遍历长度不符或吞掉 callback 错误的原生 payload provider。
20
+
21
+ ### GC 与发布安全
22
+
23
+ - unlink 后重试目录持久化屏障,包括文件已不存在或父目录缺失的情况。共享父目录的屏障合并执行,持久删除完成后才记录回收回执。永久保留 tombstone;冷缓存 retain 遇到已回收的根或依赖时,在读取缺失 payload 前返回 `InvalidReference`。
24
+ - 保护规范路径及别名、其他队列、活跃 reader、checkpoint、producer continuation 和未完成 publication。公共 owner API 拒绝内部 `queue:`、`publication:` 名字。离线清理保留控制文件,在 Python 3.13 及更早版本中均拒绝符号链接环,共享池发现结果不确定时拒绝继续删除;无引用的悬空链接仍可清理。
25
+ - 发布准备、同步、staging、sealing 失败时保留依赖保护和重试身份。补齐缺失的祖先目录屏障,writer 复用前回滚未发布尾部,并封存已完成的 standalone reservation 以便 GC。GC hook 报错且已影响 WAL 时,后续写入必须先重新恢复。
26
+
27
+ ### Writer 退休
28
+
29
+ - 新增显式 `retire_writer(..., policy="recover" | "abandon")`,通过持久 fence、操作登记和可复用恢复回执处理旧 writer。recover 先保护完整结果再释放准备所有权;abandon 保留已有 queue、reader 和 staging 根。仍持有 gate 的 writer 返回 `WriterBusy`,已被 fence 的 writer 无法恢复写入。退休依赖已列明的锁、fence 可见性和在途 I/O 契约,不能仅凭超时判断进程死亡。
30
+ - writer 正执行 callback 时,metrics、seal、close 立即返回 busy,不再等待。无法确认来源的历史 preparation owner 继续受保护,并报告为独立恢复事项。
31
+
32
+ ### 兼容与迁移
33
+
34
+ - packed record 和 WAL 字节 framing 不变,旧 catalog 记录仍可重放。新增 queue staging handoff 事件需要新版 coordinator:一旦写入这些事件,不要降级 queue writer。依赖规范路径/别名保护前,应升级全部 GC 参与者;旧 collector 仍可能删除通过别名持有的文件。混用版本不具备统一的清理/重试保证;历史泄漏和已回收的旧 manifest 不会自动修复。见[格式兼容说明](docs/FORMAT_zh.md#队列-staging-交接凭据)。
35
+ - Rust 调用者需改用 coordinator 只读 accessor(`state()`、`journal()`、`store()`、`limits()`、`epoch()`),通过独立 `Store` 发布,并将显式 `&mut Catalog` callback 改为 `&mut LockedCatalog<'_>`。`Config::gc_enabled` 返回 `Result<bool>`。现有 Python 调用签名保留,另增加退休 API。
36
+ - 旧版本已舍入的浮点数无法还原;旧请求 hash 和使用不同 tensor chunk 策略生成的重试可能在升级后冲突。保留重试身份,并检查[存储格式规则](docs/FORMAT_zh.md)。catalog 依赖关系和回执暂未实现压缩,元数据会持续增长。
37
+
38
+ ### 已知性能回退
39
+
40
+ - 相同 JuiceFS 工作负载、启用在线 GC 时,相比 0.1.3,写吞吐中位数下降 20.7%,接受 64 个任务的耗时增加 34.8%;读取和同步 WAL 追加未见同量级下降。此次简短对照每个构建只有两轮,缓存未清空;尚未做 profile,不能归因于某项安全协议或验证相关重构。见[完整样本与构建哈希](verification/measurements/20261026-release-comparison.json)。
41
+
42
+ ### CI 与验证边界
43
+
44
+ - 扫描源码分发包与 wheel 内容(包括原生库),检查本机路径和可识别的凭据。编译时 remap Rust 路径,避免发布二进制携带本机源码、用户目录和工具链位置;CI 上传产物前检查,发现问题即拒绝,报告不输出命中的秘密内容。
45
+ - release 构建和发布以前置检查为条件,包括 TLA+/Verus、语义负例、environment contract 审计、Rust/Python 测试、格式和 Clippy。TLC 只记录 jar 哈希、不做校验;Verus 日志明确区分证明通过与预期语义拒绝。验证目录按协议、WAL、GC、存储与离线恢复组织,环境假设可独立审查。
46
+ - 本次发布冻结新增形式化验证。已集成证明覆盖具体生产函数和模型;完整 retain/reactivation、跨日志恢复、认证与活性组合延期,以回归和故障注入测试覆盖。见[本次发布范围与边界](docs/FORMAL_VERIFICATION_zh.md#本次发布的验证范围)。测试通过不等于这些证明已完成,历史性能测量也不能代表当前构建的吞吐或延迟。
47
+
48
+ ## 0.1.3
49
+
50
+ - 已发布 extent 的文件头在任意位置出现暂时零值时都会触发重试,支持部分字节以及不连续位置尚不可见的情况。此前只有整个文件头为零时才会触发这类重试。重试上限和 checksum 校验保持不变;其他错误的文件头字节仍会立即报错。
51
+
52
+ 已有调用方和存储数据保持兼容,packed record 和 WAL 格式不变。
53
+
54
+ ## 0.1.2
55
+
56
+ - 大记录的 payload 通过有界 native 写入缓冲区分块写入。记录和批量发布不再需要适配 writer 的临时缓冲区;原有 packed record 格式和张量读取方式不变。
57
+ - 移除记录数、依赖数、结果大小、队列任务、控制消息及元数据的固定逻辑配额。旧的限制参数继续保留,以兼容 API 和队列身份;`max_buffer_bytes` 仍约束临时 payload 复制。
58
+ - 共享文件系统上,已发布 extent 的文件长度可能先于文件头内容可见。reader 遇到这种短暂情况会延迟并重新打开文件;持续失败、非零坏文件头和 checksum 错误仍会报错。
59
+
60
+ 已有存储数据和调用方保持兼容。上述写入和读取行为需要 0.1.2;packed record 和 WAL 格式不变。
61
+
62
+ ## 0.1.1
63
+
64
+ - 持久化任务调度:按 `TaskSpec.priority` 从高到低、`scheduling_key` 从低到高、再按 FIFO 顺序领取任务。两个字段默认均为 0,接受有符号 64 位整数。Rust pending 索引无需读取载荷即可选择任务,WAL 恢复时重建调度顺序。
65
+ - 新增 `Coordinator.yield_tasks()`:原子保存一批 continuation 输入及可选调度字段,结束这些任务的 lease 并归还到 pending 队列,不消耗失败重试次数。归还的任务进入相同调度键的 FIFO 队尾;相同请求可幂等重试,任一 lease 失效则拒绝整批操作。
66
+ - 新增 `Coordinator.pending_tasks()`:按领取顺序返回 pending 任务的 spec,支持按任务 ID 前缀及最低优先级过滤。应用负责协调暂停后的快照,并持有所引用的输入。
67
+ - 补充优先级/FIFO 恢复、失效 lease、非法调度键,以及 WAL 崩溃窗口下批量操作全有或全无恢复的回归测试。
68
+
69
+ 已有调用方可以不指定新增调度字段。Packed record 与 WAL 的 framing 不变;新增 API 和调度行为需要 0.1.1。仅有 pending 任务快照尚不构成应用联合 checkpoint,也不提供任意 checkpoint 回退。
70
+
71
+ ## 0.1.0
72
+
73
+ straw 首次发布:面向 AI 应用、基于文件系统的持久化队列与共享张量存储,以 `straw-queue` 包分发,采用 MIT 许可证。
74
+
75
+ - Rust 实现存储、WAL、队列及所有权协议,提供 Python API。多台机器通过共享文件系统并行读写,首个共享存储目标为 JuiceFS。
76
+ - 不可变记录与 manifest 打包存储,支持批量发布和按大小轮换文件,避免每个 sample 或张量单独创建文件。
77
+ - 支持 bytes、自定义 codec、NumPy/PyTorch 张量、带校验的惰性按行读取,以及复用已认证索引的 native 读取会话。
78
+ - 跨队列共享张量引用、张量级写时复制、显式 reader/checkpoint 所有权,以及可选在线 GC,回收无引用的封存 pack。
79
+ - 持久化任务 lease、continuation 进度、完成 receipt 和消费者状态,支持 WAL 恢复与已保留 checkpoint 的恢复。
80
+ - 本地与多机 I/O benchmark、应用负载采集与重放、独立协议模型,以及进程崩溃与恢复检查。
81
+ - CPython 3.10–3.13 的 Linux x86_64 wheel、自动化产物测试与 PyPI Trusted Publishing、独立使用示例和配套中英文指南。
82
+
83
+ 每个队列需要一个由外部机制隔离保护的协调器。尚不提供自动故障切换、存活 pack 整理、日志压缩或通用分布式应用 checkpoint 事务。其他网络文件系统需要单独验证部署语义。详见[文件系统要求](docs/FILESYSTEM_zh.md)与[协议保证](docs/PROTOCOL_AND_VERIFICATION_zh.md)。
@@ -13,8 +13,9 @@ cargo fmt --check
13
13
  cargo clippy --all-targets --features python -- -D warnings
14
14
  cargo test --locked
15
15
  python -m pytest
16
- python verification/ownership_model.py
17
- python verification/crash_campaign.py --output /tmp/straw-crashes.json
16
+ python verification/runners/check_tla.py # Java 17+
17
+ python verification/protocol/checks/ownership_model.py
18
+ python verification/wal/checks/crash_campaign.py --output /tmp/straw-crashes.json
18
19
  ```
19
20
 
20
21
  See [building](docs/BUILDING.md) for binary wheels and
@@ -40,3 +41,12 @@ The project uses the [MIT license](LICENSE).
40
41
  User and contributor guides have matching English `.md` and Chinese `_zh.md`
41
42
  versions. Update both when behavior or examples change, preserve reciprocal
42
43
  language links, and keep API names, commands and protocol constants identical.
44
+
45
+ [TLA+ / Verus specifications and instructions](docs/FORMAL_VERIFICATION.md) describe model assumptions,
46
+ code correspondence and required negative controls.
47
+
48
+ When changing an environment assumption, update its stable ID in
49
+ [`environment_contracts.json`](verification/environment_contracts.json), the
50
+ [environment review](docs/ENVIRONMENT_MODELS.md), its consuming models and
51
+ sensitivity controls. Keep algorithm policy, exploration bounds and measured
52
+ percentiles separate from required environment guarantees.
@@ -12,8 +12,9 @@ cargo fmt --check
12
12
  cargo clippy --all-targets --features python -- -D warnings
13
13
  cargo test --locked
14
14
  python -m pytest
15
- python verification/ownership_model.py
16
- python verification/crash_campaign.py --output /tmp/straw-crashes.json
15
+ python verification/runners/check_tla.py # Java 17+
16
+ python verification/protocol/checks/ownership_model.py
17
+ python verification/wal/checks/crash_campaign.py --output /tmp/straw-crashes.json
17
18
  ```
18
19
 
19
20
  二进制 wheel 见[构建文档](docs/BUILDING_zh.md),每类检查的边界见[验证文档](docs/VERIFICATION_zh.md)。机器地址、凭据、训练脚本、载荷和原始实验日志应保存在项目外。每次文件系统测试使用独立私有临时目录,限制数据规模,并在自有进程停止后清理。
@@ -25,3 +26,7 @@ python verification/crash_campaign.py --output /tmp/straw-crashes.json
25
26
  项目使用 [MIT 许可证](LICENSE)。
26
27
 
27
28
  用户与贡献者文档使用配套的英文 `.md` 和中文 `_zh.md`。行为或示例发生变化时同步更新两种语言,保留双向语言切换链接,并确保 API 名称、命令和协议常量一致。
29
+
30
+ [TLA+ / Verus 规范与运行说明](docs/FORMAL_VERIFICATION_zh.md)包含模型假设、代码对应关系与必须失败的负向对照。
31
+
32
+ 修改环境假设时,同步更新 [`environment_contracts.json`](verification/environment_contracts.json) 中的稳定编号、[环境审查文档](docs/ENVIRONMENT_MODELS_zh.md)、消费该假设的模型和负向对照。区分算法策略、搜索边界、实测分位数与环境必需保证。
@@ -370,7 +370,7 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
370
370
 
371
371
  [[package]]
372
372
  name = "straw"
373
- version = "0.1.2"
373
+ version = "0.1.4"
374
374
  dependencies = [
375
375
  "pyo3",
376
376
  "serde",
@@ -0,0 +1,65 @@
1
+ [package]
2
+ name = "straw"
3
+ version = "0.1.4"
4
+ edition = "2024"
5
+ rust-version = "1.89"
6
+ license = "MIT"
7
+ repository = "https://github.com/zhuzilin/straw"
8
+ description = "Durable shared-filesystem queues and immutable packed records"
9
+ include = [
10
+ "Cargo.toml", "Cargo.lock", "pyproject.toml", "README*.md", "LICENSE",
11
+ "CHANGELOG*.md", "CONTRIBUTING*.md", ".github/workflows/*.yml",
12
+ "rust/*.rs", "src/**/*.py", "docs/**/*.md", "examples/*.py",
13
+ "tests/*.py", "tests/native.rs", "verification/**/*.md", "verification/**/*.py", "verification/**/*.rs", "verification/**/*.c", "verification/environment_contracts.json", "verification/measurements/*.json", "verification/**/tla/*.tla", "verification/**/tla/*.cfg", "tools/*.py",
14
+ ]
15
+ readme = "README.md"
16
+
17
+ [lib]
18
+ name = "straw"
19
+ path = "rust/lib.rs"
20
+ crate-type = ["rlib", "cdylib"]
21
+
22
+ [features]
23
+ default = []
24
+ python = ["dep:pyo3", "pyo3/extension-module"]
25
+
26
+ [dependencies]
27
+ serde = { version = "1.0", features = ["derive"] }
28
+ serde_json = { version = "1.0", features = ["float_roundtrip"] }
29
+ sha2 = "0.10"
30
+ uuid = { version = "1.23", features = ["v4"] }
31
+ pyo3 = { version = "0.23.5", optional = true }
32
+
33
+ [dev-dependencies]
34
+ tempfile = "3.27"
35
+
36
+ [lints.rust]
37
+ unexpected_cfgs = { level = "warn", check-cfg = ["cfg(straw_verus)"] }
38
+
39
+ [[example]]
40
+ name = "large_extent_probe"
41
+ path = "verification/storage/probes/large_extent_probe.rs"
42
+
43
+ [[example]]
44
+ name = "reactivation_probe"
45
+ path = "verification/protocol/probes/reactivation_probe.rs"
46
+
47
+ [[example]]
48
+ name = "standalone_extent_probe"
49
+ path = "verification/storage/probes/standalone_extent_probe.rs"
50
+
51
+ [[example]]
52
+ name = "handoff_extent_probe"
53
+ path = "verification/protocol/probes/handoff_extent_probe.rs"
54
+
55
+ [[example]]
56
+ name = "workflow_extent_probe"
57
+ path = "verification/protocol/probes/workflow_extent_probe.rs"
58
+
59
+ [[example]]
60
+ name = "queue_record_probe"
61
+ path = "verification/protocol/probes/queue_record_probe.rs"
62
+
63
+ [[example]]
64
+ name = "positioned_extent_probe"
65
+ path = "verification/storage/probes/positioned_extent_probe.rs"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: straw-queue
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Operating System :: POSIX :: Linux
6
6
  Classifier: Programming Language :: Python :: 3
@@ -176,6 +176,7 @@ workers stop. [Multi-host benchmarks and trace replay](docs/BENCHMARKS.md).
176
176
  - [Records, tensors, tasks, recovery and GC](docs/USAGE.md)
177
177
  - [Filesystem deployment and file-count planning](docs/FILESYSTEM.md)
178
178
  - [Protocol, prior work and correctness boundaries](docs/PROTOCOL_AND_VERIFICATION.md)
179
+ - [TLA+ / Verus verification](docs/FORMAL_VERIFICATION.md): layered coverage, production Rust proofs and counterexamples
179
180
  - [Executable verification](docs/VERIFICATION.md) and [binary format](docs/FORMAT.md)
180
181
  - [Wheel builds and release checks](docs/BUILDING.md)
181
182
  - [Release notes](CHANGELOG.md)
@@ -189,7 +190,8 @@ workers stop. [Multi-host benchmarks and trace replay](docs/BENCHMARKS.md).
189
190
  - [Wheels](.github/workflows/wheels.yml): build and verify Linux x86_64 wheels
190
191
  for CPython 3.10–3.13 (manylinux/glibc 2.28+), plus a source archive and rebuild
191
192
  check. Download the outputs from the run's **Artifacts** section. Version-tag
192
- pushes publish the verified artifacts to PyPI through Trusted Publishing.
193
+ pushes publish the verified artifacts to PyPI through Trusted Publishing. The
194
+ same-commit complete verification workflow must pass before package uploads.
193
195
 
194
196
  Both workflows support **Actions → select workflow → Run workflow**. Tests also
195
197
  run on pushes and pull requests; wheels run on pull requests and `v*` tags.
@@ -149,6 +149,7 @@ workers stop. [Multi-host benchmarks and trace replay](docs/BENCHMARKS.md).
149
149
  - [Records, tensors, tasks, recovery and GC](docs/USAGE.md)
150
150
  - [Filesystem deployment and file-count planning](docs/FILESYSTEM.md)
151
151
  - [Protocol, prior work and correctness boundaries](docs/PROTOCOL_AND_VERIFICATION.md)
152
+ - [TLA+ / Verus verification](docs/FORMAL_VERIFICATION.md): layered coverage, production Rust proofs and counterexamples
152
153
  - [Executable verification](docs/VERIFICATION.md) and [binary format](docs/FORMAT.md)
153
154
  - [Wheel builds and release checks](docs/BUILDING.md)
154
155
  - [Release notes](CHANGELOG.md)
@@ -162,7 +163,8 @@ workers stop. [Multi-host benchmarks and trace replay](docs/BENCHMARKS.md).
162
163
  - [Wheels](.github/workflows/wheels.yml): build and verify Linux x86_64 wheels
163
164
  for CPython 3.10–3.13 (manylinux/glibc 2.28+), plus a source archive and rebuild
164
165
  check. Download the outputs from the run's **Artifacts** section. Version-tag
165
- pushes publish the verified artifacts to PyPI through Trusted Publishing.
166
+ pushes publish the verified artifacts to PyPI through Trusted Publishing. The
167
+ same-commit complete verification workflow must pass before package uploads.
166
168
 
167
169
  Both workflows support **Actions → select workflow → Run workflow**. Tests also
168
170
  run on pushes and pull requests; wheels run on pull requests and `v*` tags.
@@ -101,6 +101,7 @@ Benchmark 会校验读取结果,测量持久化发布与接收延迟,报告
101
101
  - [记录、张量、任务、恢复与 GC](docs/USAGE_zh.md)
102
102
  - [文件系统部署与文件数规划](docs/FILESYSTEM_zh.md)
103
103
  - [协议、参考工作与正确性边界](docs/PROTOCOL_AND_VERIFICATION_zh.md)
104
+ - [TLA+ / Verus 形式化验证](docs/FORMAL_VERIFICATION_zh.md):分层覆盖、实际 Rust 证明、反例与边界
104
105
  - [可执行验证](docs/VERIFICATION_zh.md)与[二进制格式](docs/FORMAT_zh.md)
105
106
  - [构建 wheel 与发布检查](docs/BUILDING_zh.md)
106
107
  - [更新日志](CHANGELOG_zh.md)
@@ -109,7 +110,7 @@ Benchmark 会校验读取结果,测量持久化发布与接收延迟,报告
109
110
  ## GitHub 构建与测试
110
111
 
111
112
  - [全套测试](.github/workflows/tests.yml):Rust 测试、格式检查和 Clippy,以及 CPython 3.10–3.13 下针对已安装 wheel 的全部 Python 测试、所有权模型、故障注入、示例和有界 I/O/GC benchmark。
112
- - [Wheel 构建](.github/workflows/wheels.yml):构建并验证 CPython 3.10–3.13 的 Linux x86_64 wheel(manylinux/glibc 2.28+),同时生成源码包并检查能否重新构建。从工作流运行页面的 **Artifacts** 下载产物。推送版本 tag 时,通过 Trusted Publishing 将已验证产物发布到 PyPI。
113
+ - [Wheel 构建](.github/workflows/wheels.yml):构建并验证 CPython 3.10–3.13 的 Linux x86_64 wheel(manylinux/glibc 2.28+),同时生成源码包并检查能否重新构建。从工作流运行页面的 **Artifacts** 下载产物。推送版本 tag 时,通过 Trusted Publishing 将已验证产物发布到 PyPI;同一提交的完整验证工作流必须先通过,才能上传发布产物。
113
114
 
114
115
  两条工作流都可以通过 **Actions → 选择工作流 → Run workflow** 手动触发。全套测试还会在 push 和 pull request 时运行;wheel 构建会在 pull request 和 `v*` tag 时运行。托管 CI 使用本地文件系统和 CPU PyTorch;多客户端 JuiceFS 部署验证与 GPU 训练使用[独立检查](docs/VERIFICATION_zh.md)。详见[构建与发布说明](docs/BUILDING_zh.md)。
115
116
 
@@ -49,3 +49,5 @@ optimizer step after rollback is distinct from duplicate logical acceptance.
49
49
  Application integration tests should cover their real schemas, abort/resume,
50
50
  shared tensor lifetime, multi-reader completion and whole-job recovery. They
51
51
  complement the [core protocol checks](VERIFICATION.md); they do not replace them.
52
+
53
+ Training recovery must use the data state from the selected committed model checkpoint, not automatically the latest queue consumer state. Post-checkpoint results need replay owners before processing acknowledgement allows GC; see [restart semantics](USAGE.md#what-resumes-after-a-restart).
@@ -26,3 +26,5 @@ straw 核心负责字节、引用、持久化任务、结果接收和存储生
26
26
  联合 checkpoint 应先保留 pending、buffered、prefetched 数据的全部依赖,确保模型/优化器/RNG 和队列视图组件持久化,再发布指明精确版本的最终已提交 manifest。新 checkpoint 持久化之前保留上一份完整 checkpoint。仅模型的 latest 标记或队列消费确认无法替代这一协议。回滚后重做尚未提交的优化器步骤,与重复接收同一个逻辑结果是不同问题。
27
27
 
28
28
  应用集成测试应覆盖真实 schema、中断/续跑、共享张量生命周期、多 reader 完成信号和整个任务恢复。这些测试补充[核心协议验证](VERIFICATION_zh.md),不能替代它。
29
+
30
+ 续训必须使用所选已提交模型 checkpoint 对应的数据状态,不能直接套用队列最新 consumer state。Checkpoint 后的新结果应在 processed 确认允许 GC 前建立 replay owner;见[重启语义](USAGE_zh.md#重启后分别续上什么)。