straw-queue 0.1.6__tar.gz → 0.1.8__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.
- {straw_queue-0.1.6 → straw_queue-0.1.8}/CHANGELOG.md +68 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/CHANGELOG_zh.md +28 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/Cargo.lock +2 -1
- {straw_queue-0.1.6 → straw_queue-0.1.8}/Cargo.toml +4 -1
- {straw_queue-0.1.6 → straw_queue-0.1.8}/PKG-INFO +1 -1
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/DESIGN.md +17 -2
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/DESIGN_zh.md +5 -1
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/USAGE.md +39 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/USAGE_zh.md +32 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/pyproject.toml +1 -1
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/coordinator.rs +167 -50
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc.rs +202 -18
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_writer.rs +28 -0
- straw_queue-0.1.8/rust/graph_proof_tests.rs +210 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/lib.rs +3 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/python.rs +233 -18
- straw_queue-0.1.8/rust/read_window.rs +154 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/reference_node.rs +0 -27
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/store.rs +718 -36
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/writer_gate.rs +7 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/coordinator.py +58 -2
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/store.py +91 -2
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/tensor.py +66 -4
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/native.rs +102 -0
- straw_queue-0.1.8/tests/test_confined_open.py +51 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_dependency_traversal.py +6 -2
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_gc_concurrency.py +46 -1
- straw_queue-0.1.8/tests/test_graph_proof_operations.py +71 -0
- straw_queue-0.1.8/tests/test_parallel_validation.py +72 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_read_session.py +48 -2
- straw_queue-0.1.8/tests/test_ready_validation_scope.py +212 -0
- straw_queue-0.1.8/tests/test_supervised_leases.py +82 -0
- straw_queue-0.1.8/tests/test_tensor_batch_reads.py +124 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_writer_retirement.py +43 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/environment_contracts.json +4 -3
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/dependency_probe.py +33 -9
- {straw_queue-0.1.6 → straw_queue-0.1.8}/.agents/skills/straw-protocol-review/SKILL.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/.agents/skills/straw-protocol-review/agents/openai.yaml +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/.github/workflows/tests.yml +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/.github/workflows/wheels.yml +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/CONTRIBUTING.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/CONTRIBUTING_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/LICENSE +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/README_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/BENCHMARKS.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/BENCHMARKS_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/FILESYSTEM.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/FILESYSTEM_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/FORMAT.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/FORMAT_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/docs/README_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/examples/multiprocess.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/examples/records.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/examples/tensors.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/examples/work_queue.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/access.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/bounds.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_append.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_decode.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_event.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_frame.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_json.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_log.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_namespace.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_primitives.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_runtime.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_state.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_target.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/catalog_transaction.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/closure.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/closure_node.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/consumption.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/directory.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/directory_io.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/discovery.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/extent_retry.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/file_adapter.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/file_primitives.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/finalization.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/framing.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_batch.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_collection.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_io.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_mark.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_plan.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/gc_receipt.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/holding.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/identities.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/incomplete.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_append.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_io.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_owner.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_primitives.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_recovery.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/journal_state.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/json_update.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/namespace_identity.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/namespace_step.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/namespace_target.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/payload.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/pending.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/protocol.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_admin.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_application.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_commit.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_event.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_gc.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_gc_prepare.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_handoff.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_history.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_metadata.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_progress.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_reader.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_receipt.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_replay.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_retirement.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_roots.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_state.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_task.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/queue_transition.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/reclamation.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/record_index.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/record_manifest.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/reference_validation.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/replay.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/request.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/selection.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/staging_consumption.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/stream.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/traversal.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/typed.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_append.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_device.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_file.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_recovery.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_sink.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/wal_source.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/writer_gate_flow.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/writer_ownership.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/writer_registry.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/rust/writer_retirement.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/__init__.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/backend.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/benchmark.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/errors.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/inspect.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/journal.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/protocol.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/reporting.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/rpc.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/src/straw/tracing.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_artifact_privacy.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_benchmark_profile.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_catalog_encoding.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_commit_consumption.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_commit_protocol.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_consumer_rewind.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_durable_handoff.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_extent_bounds.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_extent_visibility.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_filesystem_queue.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_gc_batch.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_gc_extent_validation.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_gc_missing_parent.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_gc_receipts.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_incomplete_publication.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_journal_contract.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_json_roundtrip.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_lease_selection.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_metadata_recovery.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_offline_aliases.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_offline_inspection.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_offline_recovery.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_online_gc.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_packed_store.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_path_identity.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_pending_publication.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_provisional_holds.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_publication_handoff.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_publication_preparation.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_queue_gc_roots.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_request_replay.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_resume_workflow.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_staging_consumption.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_streaming_write.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_task_recovery.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_tensor.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_tensor_granularity.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_tensor_preflight.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_unlimited_capacity.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_verification_runner.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_visibility_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_wal_recovery.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tests/test_writer_access.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tools/check_artifact_privacy.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tools/check_wheel.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/tools/release_build.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/README_zh.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/probes/runtime_performance.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentCatalog.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentGraph.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentInputs.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentNamespace.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentPersistence.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentProgress.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/common/tla/EnvironmentRead.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/catalog_discovery_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/catalog_discovery_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_cross_client.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_history_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_parent_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_parent_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_receipt_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_scale.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_stat_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/probes/gc_stat_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/EnvironmentParentRepair.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/EnvironmentWriter.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/EnvironmentWriterRetirement.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCBatchDeletion.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCBatchDeletion.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCConcurrentDeletion.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCConcurrentDeletion.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCDeletion.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCDeletion.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCDiscovery.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCDiscovery.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCParentRepair.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCParentRepair.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCReceipt.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/GCReceipt.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/WriterLifetime.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/WriterLifetime.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/WriterRetirement.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/gc/tla/WriterRetirement.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/measurements/20261026-release-100gb.json +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/measurements/20261026-release-comparison.json +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/measurements/20261026-release-visibility.json +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/probes/offline_alias_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/probes/offline_guard_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/probes/offline_guard_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/EnvironmentBindings.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/EnvironmentOffline.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineAliases.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineAliases.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineCleanup.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineCleanup.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineRoots.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/offline/tla/OfflineRoots.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/checks/ownership_model.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/commit_cleanup_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/consumption_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/handoff_extent_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/handoff_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/lease_selection_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/provisional_hold_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/queue_record_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/reactivation_peer_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/reactivation_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/probes/workflow_extent_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CommitApplication.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CommitApplication.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CommitCleanup.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CommitCleanup.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/Completion.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/Completion.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CrossLogComposition.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/CrossLogComposition.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/DurableHandoff.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/DurableHandoff.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentApplication.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentClock.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentCommitCleanup.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentConsumption.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentCrossComposition.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentCrossLog.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentHandoff.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentReaders.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentRequest.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/EnvironmentTraining.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/Ownership.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/Ownership.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ProvisionalHold.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ProvisionalHold.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/PublicationHandoff.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/PublicationHandoff.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/QueueRecordWorkflow.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/QueueRecordWorkflow.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ReactivationRace.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ReactivationRace.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ReactivationScan.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/ReactivationScan.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/RequestReplay.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/RequestReplay.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/SharedRecordWorkflow.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/SharedRecordWorkflow.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/StagingConsumption.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/StagingConsumption.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/TrainingResume.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/protocol/tla/TrainingResume.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/runners/check_mutations.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/runners/check_tla.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/runners/environment_manifest.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/catalog_encoding_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/directory_sync_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/directory_sync_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/extent_visibility_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/filesystem_bandwidth_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/incomplete_cleanup_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/incomplete_publication_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/large_extent_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/metadata_scaling.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/namespace_lookup_count.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/path_identity_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/pending_publication_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/positioned_extent_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/preparation_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/preparation_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/publication_finalize_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/publication_retry_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/publication_sync_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/read_latency_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/read_latency_trace.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/read_lookup_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/read_lookup_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/standalone_extent_probe.rs +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/tensor_granularity_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/typed_preflight_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/writer_access_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/probes/writer_lifetime_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/DependencyTraversal.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/DependencyTraversal.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/DirectoryDurability.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/DirectoryDurability.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentAuthentication.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentIncomplete.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentLocalAccess.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentLookup.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentPreparation.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentTyped.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/EnvironmentVisibility.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ExtentVisibility.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ExtentVisibility.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/IncompletePublication.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/IncompletePublication.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/NamespaceIdentity.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/NamespaceIdentity.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PendingPublication.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PendingPublication.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationFinalization.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationFinalization.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationPreparation.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationPreparation.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationRetry.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/PublicationRetry.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/RangeRead.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/RangeRead.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ReadAttempt.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ReadAttempt.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ReadLookup.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/ReadLookup.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/TypedRead.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/TypedRead.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/WriterAccess.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/storage/tla/WriterAccess.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/README.md +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/checks/crash_campaign.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/probes/catalog_fsync_fault.c +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/probes/catalog_history_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/probes/catalog_replay_probe.py +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogReadBuffer.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogReadBuffer.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogReplay.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogReplay.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogTransaction.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/CatalogTransaction.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/EnvironmentWal.tla +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/WalRecovery.cfg +0 -0
- {straw_queue-0.1.6 → straw_queue-0.1.8}/verification/wal/tla/WalRecovery.tla +0 -0
|
@@ -2,6 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
[中文版](CHANGELOG_zh.md)
|
|
4
4
|
|
|
5
|
+
## 0.1.8
|
|
6
|
+
|
|
7
|
+
### Supervised workers and reclamation
|
|
8
|
+
|
|
9
|
+
- Add `Coordinator(..., lease_seconds=None)` for externally supervised workers.
|
|
10
|
+
Leases do not expire with elapsed time; attempt/epoch fencing and explicit
|
|
11
|
+
worker retirement remain enforced. The default is still 300 seconds, and
|
|
12
|
+
recovery requires the queue's original lease configuration.
|
|
13
|
+
- Release both Python and native coordinator locks after GC commits root
|
|
14
|
+
retirement and tombstones, allowing heartbeats, acquisitions and completions
|
|
15
|
+
during physical deletion and directory synchronization. GC calls on the same
|
|
16
|
+
coordinator remain serialized. Return separate queue-lock wait, preparation
|
|
17
|
+
and detached-collection timings.
|
|
18
|
+
- Add opt-in `retire_writer(..., discard_staging=True)` to release only that
|
|
19
|
+
writer's registered transfer staging after retirement and sealing. Preserve
|
|
20
|
+
independent queue, checkpoint, reader and other writer owners. Retrying after
|
|
21
|
+
an uncertain retirement remains supported.
|
|
22
|
+
- Add `retention_summary()` for owner categories, retained and reclaimable
|
|
23
|
+
packs, pending deletions and open writers, with bounded examples and no
|
|
24
|
+
payload reads. Category pack counts can overlap.
|
|
25
|
+
|
|
26
|
+
### Compatibility and limits
|
|
27
|
+
|
|
28
|
+
- WAL and packed-record formats remain unchanged. The new lease and staging
|
|
29
|
+
options require 0.1.8; existing timed leases and staging retention remain the
|
|
30
|
+
defaults. Supervised mode requires external failure detection and confirmation
|
|
31
|
+
that a worker has exited before retirement. Before discarding staging, stop
|
|
32
|
+
its readers and preserve accepted results through independent durable owners;
|
|
33
|
+
returned references no longer have staging protection.
|
|
34
|
+
- Models retain their existing expiration, owner-release and deletion-plan
|
|
35
|
+
abstractions. Concrete regressions cover supervised fencing, concurrent queue
|
|
36
|
+
calls during GC and retirement/staging retries; they do not establish a
|
|
37
|
+
shared-filesystem latency bound or automatic failure detection.
|
|
38
|
+
|
|
39
|
+
## 0.1.7
|
|
40
|
+
|
|
41
|
+
### Batched reads and validation
|
|
42
|
+
|
|
43
|
+
- Add `TensorRef.load_many(..., reader=reader, workers=4)` for caller-bounded,
|
|
44
|
+
ordered tensor batches. Native workers reuse extent handles and coalesce nearby
|
|
45
|
+
reads in bounded windows (1 MiB by default, at most 8 MiB per worker), avoiding
|
|
46
|
+
read-ahead across gaps larger than 4 KiB. Each result has independent writable
|
|
47
|
+
storage; typed layout, selected frames and touched checksum chunks remain
|
|
48
|
+
authenticated. Failed attempts discard handles and windows before retrying.
|
|
49
|
+
- Read tensor member envelopes through one native call and reuse canonical path
|
|
50
|
+
information within a publication, reducing Python/native transitions and
|
|
51
|
+
repeated shared-filesystem path resolution.
|
|
52
|
+
- Add `store.validation_scope(coordinator)` to reuse immutable dependency proofs
|
|
53
|
+
during one local publication/queue handoff. New roots still check descriptors
|
|
54
|
+
and task/attempt identity; catalog changes still check ownership, namespace
|
|
55
|
+
and tombstones under lock. Scopes are thread-local, do not pin data, and close
|
|
56
|
+
on exit or participating errors. Explicit validation and payload reads retain
|
|
57
|
+
their normal checks.
|
|
58
|
+
- Sample the coordinator lease clock after acquiring its call lock, so queued
|
|
59
|
+
calls do not submit stale timestamps. Log slow calls with separate lock-wait
|
|
60
|
+
and operation times.
|
|
61
|
+
|
|
62
|
+
### Compatibility and limits
|
|
63
|
+
|
|
64
|
+
- Existing Python call signatures and stored WAL/packed-record formats remain
|
|
65
|
+
compatible; the new batch and scope APIs require 0.1.7. Keep input owners alive
|
|
66
|
+
throughout reads and validation scopes. Callers must bound the total payload
|
|
67
|
+
bytes returned by a batch; the read-ahead limit only bounds worker scratch.
|
|
68
|
+
- These changes reduce small-read calls and repeated immutable-graph work.
|
|
69
|
+
Throughput depends on request locality, cache state and storage; they do not
|
|
70
|
+
establish a shared-filesystem bandwidth guarantee or change GC durability
|
|
71
|
+
requirements.
|
|
72
|
+
|
|
5
73
|
## 0.1.6
|
|
6
74
|
|
|
7
75
|
- Reuse confirmed writer-registry state and index operation lookup; rebuild after uncertain outcomes. Cache only successfully synchronized writer directories with pinned inode identity. Keep existing publication WAL barriers and wire formats.
|
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
[English](CHANGELOG.md)
|
|
4
4
|
|
|
5
|
+
## 0.1.8
|
|
6
|
+
|
|
7
|
+
### 受监督的 worker 与回收
|
|
8
|
+
|
|
9
|
+
- 新增 `Coordinator(..., lease_seconds=None)`,由外部监督器管理 worker 存活性。租约不会随时间自动过期,仍执行 attempt/epoch fencing 和显式 worker 退休;默认仍为 300 秒,恢复时必须沿用队列原有的 lease 配置。
|
|
10
|
+
- GC 持久化根退休和 tombstone 后,释放 Python 与原生 coordinator 锁,使 heartbeat、acquire 和 complete 可以与物理删除、目录同步并行。同一 coordinator 的 GC 调用仍串行;返回队列锁等待、准备和锁外回收的独立耗时。
|
|
11
|
+
- 新增显式选项 `retire_writer(..., discard_staging=True)`,在退休、封口完成后,仅释放该 writer 已登记的 transfer staging。保留独立的 queue、checkpoint、reader 和其他 writer owner;支持退休结果不确定后的重试。
|
|
12
|
+
- 新增 `retention_summary()`,报告 owner 类别、受保留/可回收 pack、待完成删除和未封口 writer,限制示例数量且不读取 payload。不同类别的 pack 计数可能重叠。
|
|
13
|
+
|
|
14
|
+
### 兼容与限制
|
|
15
|
+
|
|
16
|
+
- WAL 和 packed-record 格式不变。新的 lease 与 staging 选项需要 0.1.8;默认仍使用定时租约并保留 staging。受监督模式要求外部故障探测,并在退休前确认 worker 已退出。放弃 staging 前须停止相关 reader,以独立持久 owner 保留已接受结果;返回引用不再受 staging 保护。
|
|
17
|
+
- 模型沿用既有的过期、owner 释放与删除计划抽象;实际回归覆盖受监督 fencing、GC 期间的队列并发调用和退休/staging 重试,不据此承诺共享文件系统延迟上限或自动故障探测。
|
|
18
|
+
|
|
19
|
+
## 0.1.7
|
|
20
|
+
|
|
21
|
+
### 批量读取与校验
|
|
22
|
+
|
|
23
|
+
- 新增 `TensorRef.load_many(..., reader=reader, workers=4)`,按调用方限定的批量大小并行读取 tensor,并保持输入顺序。Native worker 复用 extent 句柄,在有界窗口中合并相邻读取(默认每个 worker 1 MiB,最多 8 MiB),不跨越大于 4 KiB 的空隙预读。每个结果拥有独立可写存储;typed layout、选中的 frame 和触及的 checksum chunk 仍需认证。失败尝试在重试前丢弃句柄和窗口。
|
|
24
|
+
- 通过一次 native 调用读取 tensor 成员 envelope,并在同一 publication 内复用规范路径信息,减少 Python/native 边界调用和共享文件系统路径解析。
|
|
25
|
+
- 新增 `store.validation_scope(coordinator)`,在一次本地 publication/queue 交接中复用不可变依赖证明。新根仍核对 descriptor 和 task/attempt 身份;catalog 变更仍在锁内检查所有权、namespace 和 tombstone。Scope 按线程隔离、不负责 pin 数据,并在退出或参与操作报错时关闭。显式 validate 和 payload 读取保留原有检查。
|
|
26
|
+
- Coordinator 在取得调用锁后才读取 lease 时钟,避免排队调用提交过时的时间戳。慢调用日志分别记录锁等待与实际操作耗时。
|
|
27
|
+
|
|
28
|
+
### 兼容与限制
|
|
29
|
+
|
|
30
|
+
- 现有 Python 调用签名及已存储 WAL/packed-record 格式保持兼容;新增批量与 scope API 需要 0.1.7。读取和 validation scope 期间仍须保留输入 owner。调用方需限制 batch 返回的 payload 总字节数;预读上限只约束 worker 临时缓冲区。
|
|
31
|
+
- 本版减少小读取调用和重复不可变图处理。吞吐仍取决于请求局部性、缓存状态和存储环境,不构成共享文件系统带宽保证,也不改变 GC 持久化要求。
|
|
32
|
+
|
|
5
33
|
## 0.1.6
|
|
6
34
|
|
|
7
35
|
- 复用已确认的 writer registry 状态并为操作查找建立索引;不确定结果后重建。只缓存完整同步成功的 writer 目录,并保持 inode 身份。保留既有 publication WAL 屏障与 wire format。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "straw"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.8"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
rust-version = "1.89"
|
|
6
6
|
license = "MIT"
|
|
@@ -31,6 +31,9 @@ sha2 = "0.10"
|
|
|
31
31
|
uuid = { version = "1.23", features = ["v4"] }
|
|
32
32
|
pyo3 = { version = "0.23.5", optional = true }
|
|
33
33
|
|
|
34
|
+
[target.'cfg(target_os = "linux")'.dependencies]
|
|
35
|
+
libc = "0.2"
|
|
36
|
+
|
|
34
37
|
[dev-dependencies]
|
|
35
38
|
tempfile = "3.27"
|
|
36
39
|
|
|
@@ -109,6 +109,9 @@ payload may already have been collected. Conflicting content is an error. A new
|
|
|
109
109
|
request must pass current task/attempt/epoch and expiry checks. Recovery revokes
|
|
110
110
|
old work authority but preserves outstanding reader roots. External fencing must
|
|
111
111
|
exclude concurrent coordinators; an `exclusive_owner` string is not enforcement.
|
|
112
|
+
With `lease_seconds=None`, time does not expire a lease: an external supervisor
|
|
113
|
+
must detect failure and confirm process exit before `retire_worker`. Attempt and
|
|
114
|
+
epoch checks remain mandatory, and recovery must preserve the lease mode.
|
|
112
115
|
|
|
113
116
|
<a id="c4"></a>
|
|
114
117
|
|
|
@@ -272,8 +275,11 @@ tombstone; late retain cannot revive that path. Live extents protect whole packs
|
|
|
272
275
|
Collectors may overlap: unlink is idempotent, and every collector completes its
|
|
273
276
|
own parent barriers. Never include targets added after this attempt's snapshot
|
|
274
277
|
in its receipt. A failed attempt leaves durable pending work for a later call.
|
|
275
|
-
The lower `LockedCatalog::collect` compatibility API retains its enclosing lock
|
|
276
|
-
|
|
278
|
+
The lower `LockedCatalog::collect` compatibility API retains its enclosing lock.
|
|
279
|
+
Python coordinator GC calls serialize with each other, but release both queue
|
|
280
|
+
locks after root retirement and tombstone preparation. Other queue calls may
|
|
281
|
+
proceed during physical deletion; receipt completion refreshes the catalog and
|
|
282
|
+
uses only the captured plan.
|
|
277
283
|
Offline cleanup requires stopped clients, no shared catalog/queue markers, a
|
|
278
284
|
complete accepted-root/path-binding trace and a fresh unchanged inspection.
|
|
279
285
|
|
|
@@ -288,6 +294,15 @@ persists the retirement receipt. Recover authenticates complete results and stag
|
|
|
288
294
|
them before release; abandon makes no readable-result claim. A retry may repeat
|
|
289
295
|
any already-effective step. PID, age and timeout never establish safe retirement.
|
|
290
296
|
|
|
297
|
+
Explicit `discard_staging=True` releases the exact staging owners of that
|
|
298
|
+
writer's registered results in a separate catalog transaction after retirement.
|
|
299
|
+
It does not recursively release dependency writers' staging. The caller must
|
|
300
|
+
first stop relevant readers and independently retain results still needed;
|
|
301
|
+
returned references have no staging protection. A retry must finish retirement
|
|
302
|
+
before releasing staging again and must preserve other owners. `WriterRetirement`
|
|
303
|
+
models through the retirement receipt; subsequent explicit abandonment uses the
|
|
304
|
+
owner-release rules, with concrete regressions checking the API composition.
|
|
305
|
+
|
|
291
306
|
Safety holds while owners remain and errors recur. Eventual reclamation concerns
|
|
292
307
|
sealed **permanently unowned** objects and additionally requires continued GC calls,
|
|
293
308
|
returning lock/I/O operations, eventual stabilization and fair scheduling. No
|
|
@@ -72,6 +72,8 @@ Catalog 与队列日志独立。步骤之间崩溃可以多保留保护,不能
|
|
|
72
72
|
|
|
73
73
|
**C2 — 身份与重试。** 稳定请求 ID 绑定内容和结果。先查询匹配的已记录回执,再考虑旧 payload 或 lease 校验;payload 可能已经回收。内容冲突必须报错。新请求必须校验当前 task/attempt/epoch 和过期状态。恢复撤销旧工作权限,但保留尚未退出的 reader 根。外部 fencing 必须排除并发协调器;`exclusive_owner` 字符串不执行 fencing。
|
|
74
74
|
|
|
75
|
+
`lease_seconds=None` 时,时间不会使 lease 过期:外部监督器必须探测故障,并在调用 `retire_worker` 前确认进程退出。Attempt/epoch 检查仍然必需,恢复时必须保留原有 lease 模式。
|
|
76
|
+
|
|
75
77
|
<a id="c4"></a>
|
|
76
78
|
|
|
77
79
|
**C4 — Checkpoint 回退。** 持久保存 model/optimizer/RNG checkpoint 及其匹配的 consumer 位置。该 checkpoint 之后已经处理的结果,需要在确认处理前有独立 replay owner。恢复 checkpoint 的位置,而非队列最新 cursor。回退 WAL 更新前先重新保留变为必需的 receipt/batch 根;保护缺失或数据损坏必须拒绝更新。替代版本持久化后才释放旧 checkpoint/replay owner。真实 checkpoint 提交和全部 rank 完成信号由应用提供。
|
|
@@ -172,12 +174,14 @@ unlink 本轮全部目标(包括 advisory stat 声称不存在的目标)
|
|
|
172
174
|
|
|
173
175
|
Unlink `NotFound` 是幂等缺失,不是持久删除。已经缺失的 pending 文件仍需父目录屏障。其他错误上报并保留待办。回执停止重复删除/计数,但保留永久 tombstone;迟到 retain 不得复活路径。存活 extent 保护整个 pack。离线清理要求客户端停止、无共享 catalog/queue 标记、完整接受根及路径绑定追踪,以及新的未变化检查结果。
|
|
174
176
|
|
|
175
|
-
多个 collector 可以重叠执行:unlink 幂等,各自完成自己目标的父目录屏障。回执不能包含本轮快照之后加入的目标。失败后持久 pending 留给后续调用处理。底层 `LockedCatalog::collect` 兼容 API
|
|
177
|
+
多个 collector 可以重叠执行:unlink 幂等,各自完成自己目标的父目录屏障。回执不能包含本轮快照之后加入的目标。失败后持久 pending 留给后续调用处理。底层 `LockedCatalog::collect` 兼容 API 仍持有外层锁。Python coordinator 的 GC 调用彼此串行,但在根退休和 tombstone 准备完成后释放两层队列锁;物理删除期间其他队列调用可以继续。回执阶段重新获取新鲜 catalog,只使用已捕获的计划。
|
|
176
178
|
|
|
177
179
|
<a id="g4"></a>
|
|
178
180
|
|
|
179
181
|
**G4 — Writer 退休与进展。** 每次 writer 修改持有准确 incarnation 的 gate 并检查持久 fence。产生效果前先登记操作身份、准备 owner 和依赖。退休获取相同 gate,持久化 fence,排空旧 I/O,对账已登记操作,然后释放准备 owner、记录结算、seal 预留文件、持久化退休回执。Recover 在释放前认证完整结果并 staging;abandon 不声称结果可读。重试可能重复任意已生效步骤。PID、年龄和超时都不能证明退休安全。
|
|
180
182
|
|
|
183
|
+
显式 `discard_staging=True` 在上述退休完成后,以独立 catalog 事务释放该 writer 已登记结果的准确 staging owner,不递归释放依赖 writer 的 staging。调用者必须先停止相关 reader,并以独立持久 owner 保留仍需使用的结果;此时返回引用不受 staging 保护。错误后的重试仍须完成退休后再释放,其他 owner 保持不变。`WriterRetirement` 模型覆盖到退休回执;后续显式放弃沿用 owner 释放规则,由实际回归检查接口组合。
|
|
184
|
+
|
|
181
185
|
Owner 持续存在或错误反复发生时,安全性仍须成立。最终回收只针对 sealed 且**永久无主**的对象,还要求持续调用 GC、锁/I/O 返回、故障最终稳定及公平调度。这不提供延迟上限,也不意味着存在自动后台回收器。
|
|
182
186
|
|
|
183
187
|
<details>
|
|
@@ -354,6 +354,26 @@ On recovery, first restore the chosen checkpoint's model/optimizer/RNG and its m
|
|
|
354
354
|
|
|
355
355
|
## Scoped batch reads
|
|
356
356
|
|
|
357
|
+
`TensorRef.load_many(refs, reader=reader, workers=4)` loads a caller-bounded batch
|
|
358
|
+
in its original order. Bound the total requested payload bytes before calling;
|
|
359
|
+
each returned tensor has independent writable storage. Native workers sort
|
|
360
|
+
requests by pack/extent/ordinal, reuse the extent handle and combine nearby reads
|
|
361
|
+
in a window of at most 1 MiB per worker. Gaps larger than 4 KiB are not prefetched.
|
|
362
|
+
Every selected frame, typed layout and touched checksum chunk is still checked.
|
|
363
|
+
Failed attempts discard both the handle and window before the ordinary bounded
|
|
364
|
+
visibility retry; windows are discarded at batch exit. The lower-level
|
|
365
|
+
`reader.read_tensor_ranges(..., read_ahead_bytes=0)` disables read-ahead for
|
|
366
|
+
comparisons (the maximum supported setting is 8 MiB per worker).
|
|
367
|
+
|
|
368
|
+
For one publish/queue handoff, `with store.validation_scope(coordinator):` reuses
|
|
369
|
+
successful immutable dependency proofs across participating operations in the
|
|
370
|
+
current thread. Each new root still checks its descriptor and task/attempt;
|
|
371
|
+
catalog transfers still check namespace identity, ownership authorization and
|
|
372
|
+
tombstones under the catalog lock. The scope never pins data, never crosses
|
|
373
|
+
storage identity, closes on exit, and is invalidated by any participating error.
|
|
374
|
+
Keep input owners alive throughout it. Explicit `store.validate` and later
|
|
375
|
+
operations still revalidate; the scope does not cache payload read results.
|
|
376
|
+
|
|
357
377
|
Use one `with store.read_session() as reader:` block for adjacent immutable publications. The reader provides `validate`, `manifest`, `read`, `read_record`, `envelope`, and checked tensor reads. Pass it to `TensorRef.from_record_set_many(store, publication, reader=reader)` and `tensor.load(reader=reader)` to avoid repeatedly parsing a shared extent index.
|
|
358
378
|
|
|
359
379
|
The Rust reader caches up to eight authenticated indexes using an LRU keyed by the complete extent descriptor, with an 8 MiB encoded-metadata budget. A single oversized active index evicts all other entries. Each manifest and record read still authenticates its frame and payload; tensor reads authenticate touched chunks. `validate` rechecks logical descriptors and task/attempt authorization on every call. Index authentication runs again on a cache miss or in a new session. Calls within one session serialize; use independent sessions for parallel reads. Keep a durable owner or `store.pin` for the entire operation: a read session is not an ownership pin. Sessions close on context exit and reject all inherited operations after fork.
|
|
@@ -443,3 +463,22 @@ matching queue view, pending/buffered/prefetched dependencies and post-checkpoin
|
|
|
443
463
|
replay owners. A latest marker or queue acknowledgement cannot replace it. See
|
|
444
464
|
[restart APIs](#what-resumes-after-a-restart). Application tests cover real schemas,
|
|
445
465
|
abort/resume, shared tensors, multiple-reader completion and whole-job recovery.
|
|
466
|
+
|
|
467
|
+
### Externally supervised workers
|
|
468
|
+
|
|
469
|
+
`Coordinator(..., lease_seconds=None)` delegates liveness to an external supervisor;
|
|
470
|
+
attempt and epoch fences remain enforced. The supervisor must detect failures,
|
|
471
|
+
confirm the old process has exited, and call `retire_worker`. The default remains
|
|
472
|
+
300 seconds, and recovery cannot change this queue identity setting.
|
|
473
|
+
Queue GC serializes root retirement and durable tombstones, then releases queue
|
|
474
|
+
locks before deleting files and syncing directories. Its result includes
|
|
475
|
+
`queue_lock_wait_seconds`, `queue_prepare_seconds`, and `detached_collection_seconds`.
|
|
476
|
+
|
|
477
|
+
After readers and writers have exited and accepted results have durable owners,
|
|
478
|
+
`retire_writer(writer_id, policy="abandon", discard_staging=True)` also relinquishes
|
|
479
|
+
that writer's registered transfer staging after retirement and sealing. This is
|
|
480
|
+
opt-in; other queue, checkpoint, reader, and writer owners are preserved. Returned
|
|
481
|
+
references have no staging protection in this mode and are not recovery handles.
|
|
482
|
+
`retention_summary()` reports owner categories and open packs with bounded
|
|
483
|
+
examples, without reading tensor payloads. Category pack counts can overlap and
|
|
484
|
+
must not be added together.
|
|
@@ -193,6 +193,22 @@ b.submit_tasks("b-1", [TaskSpec("task-b", input_ref=dependency)])
|
|
|
193
193
|
|
|
194
194
|
## 批量读取会话
|
|
195
195
|
|
|
196
|
+
`TensorRef.load_many(refs, reader=reader, workers=4)` 按原顺序读取调用方限定的批次。
|
|
197
|
+
调用前应限制请求载荷的总字节数;返回张量各自拥有可写存储。
|
|
198
|
+
Native worker 按 pack/extent/ordinal 排序,复用 extent 句柄,以每个 worker
|
|
199
|
+
最多 1 MiB 的窗口合并邻近读取,不预读超过 4 KiB 的间隙。
|
|
200
|
+
每个选中 frame、typed layout 和触及的 checksum chunk 仍逐一检查。
|
|
201
|
+
读取失败后,先丢弃句柄和窗口,再执行原有有限可见性重试;批次结束也丢弃窗口。
|
|
202
|
+
底层 `reader.read_tensor_ranges(..., read_ahead_bytes=0)` 可关闭预读用于对照,
|
|
203
|
+
该参数最大为每个 worker 8 MiB。
|
|
204
|
+
|
|
205
|
+
单次发布/队列交接可用 `with store.validation_scope(coordinator):`,
|
|
206
|
+
在当前线程的参与操作之间复用成功的不可变依赖校验证据。
|
|
207
|
+
新根仍检查描述符和 task/attempt;catalog 转移仍在锁内检查 namespace 身份、
|
|
208
|
+
所有权授权和 tombstone。Scope 不保留数据所有权,不跨存储身份,退出时关闭,
|
|
209
|
+
任意参与操作失败立即使其失效。整个操作期间仍须保持输入 owner。
|
|
210
|
+
显式 `store.validate` 和后续操作仍重新校验;scope 不缓存载荷读取结果。
|
|
211
|
+
|
|
196
212
|
连续读取不可变 publication 时,可共用一个 `with store.read_session() as reader:`。Reader 提供 `validate`、`manifest`、`read`、`read_record`、`envelope` 和带校验的张量读取。将它传给 `TensorRef.from_record_set_many(store, publication, reader=reader)` 与 `tensor.load(reader=reader)`,可避免重复解析同一 extent 的索引。
|
|
197
213
|
|
|
198
214
|
Rust reader 使用最多八条已认证索引的 LRU,以完整 extent 描述符区分身份,编码元数据预算为 8 MiB;一个超大活动 index 会淘汰其他条目。每次 manifest/record 读取仍校验 frame 和载荷;张量读取仍校验触及的 chunk。每次 `validate` 都重新检查逻辑描述符与 task/attempt 权限。缓存未命中或开启新会话后重新认证索引。同一会话的调用串行,并行读取应使用独立会话。整个读取过程必须由持久 owner 或 `store.pin` 保护:读取会话本身不保留存储所有权。退出上下文会关闭会话,fork 后继承的会话拒绝所有操作。
|
|
@@ -256,3 +272,19 @@ receipt = peer.publication_receipt(
|
|
|
256
272
|
Rollout 的路由/分数采集必须完整、一致后才能发布 continuation,不能仅以 token 生成结束为准。所有必要消费者完成后才确认原始输出,全部训练 rank 读完后才确认 ready batch。应用监督进程应锁存并传播后台 GC 失败、停止接收新任务、保留不确定存储,并对远端在途工作实施 fencing。
|
|
257
273
|
|
|
258
274
|
联合 checkpoint 的提交与回退遵循 [C4](DESIGN_zh.md#c4):包含模型/优化器/RNG 和匹配队列视图,保留 pending/buffered/prefetched 依赖及 post-checkpoint replay owner;不能只用 latest 标记或队列确认代替。重启 API 见[恢复说明](#重启后分别续上什么)。应用集成测试应覆盖真实 schema、中断续跑、共享张量、多 reader 完成信号与整任务恢复。
|
|
275
|
+
|
|
276
|
+
### 由外部监督器管理的 worker
|
|
277
|
+
|
|
278
|
+
`Coordinator(..., lease_seconds=None)` 显式关闭墙钟租约过期,仍保留 attempt/epoch fencing。
|
|
279
|
+
只有外部监督器负责故障探测、确认旧进程退出并调用 `retire_worker` 时才使用此模式;
|
|
280
|
+
默认仍为 300 秒。已有队列恢复时不能改变该配置。
|
|
281
|
+
队列 GC 的持久化根/墓碑准备仍串行,物理删除和目录同步在队列锁外执行。
|
|
282
|
+
`collect_garbage()` 返回 `queue_lock_wait_seconds`、`queue_prepare_seconds` 和 `detached_collection_seconds`。
|
|
283
|
+
|
|
284
|
+
监督器确认 writer 的读写进程已退出、已接受结果由队列或其他 durable owner 接管后,
|
|
285
|
+
可调用 `retire_writer(writer_id, policy="abandon", discard_staging=True)`:
|
|
286
|
+
先完整退役、封口,再放弃这个 writer 已登记的 transfer staging;默认不放弃。
|
|
287
|
+
这不会释放队列、checkpoint、reader 或其他 writer 的 staging。
|
|
288
|
+
该模式返回的引用没有 staging 保护,不应当作待恢复的裸引用读取。
|
|
289
|
+
`retention_summary()` 提供 owner 类别和未封口 pack 的元数据摘要,限制示例数量且不读取 tensor payload。
|
|
290
|
+
不同类别的 pack 计数可能重叠,不能直接相加。
|