docs(plan): ship raw-handle-export-contract — fold into §Packages and archive - #1908
Conversation
… archive The change maps 1:1 to #1900, closed 2026-08-22 by PR #1905, so the milestone precondition is one ticket and it is merged. The removal gate has nothing to verify: the change declares no REMOVED bullets, by design — this was additive spelling over plan text #1903 had already merged. The §Packages raw-handle entry is marked SHIPPED. Most of what the change built was already written there by the align, so the fold adds only the three contract facts the entry did not state: - An export is taken from a resolved surface, never from a name. The fd reaches a helper at checkout, so an acquired-but-unresolved texture is refused telling the caller to resolve its surface id first, and every other refusal names the flavour's own door. - The recipe travels because a raw allocation is consumed as an image. A linear buffer mapping over tiled memory yields block-linear bytes, never pixels — the reason tiling, usage and the mip/layer/sample counts are on the export object rather than being the importer's guess. - A successful import pins the payload past the exporter destroying the texture it came from, which is the useful direction of "the surface-id lifetime guarantees end at export". The OPEN zero-copy-per-frame entry is untouched — it is its own align. The system diagram gains the helper→packages edge. Neither #1903 nor #1904 drew this contract, so the entry was unrepresented against the plan's own rule that every DECIDED entry appears in the diagram. Refs #1900 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 35 minutes Limit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Ships
raw-handle-export-contract: folds it intoARCHITECTURE.md§Packages, adds the diagram edge it was missing, and archives the change file under its ticket's merge date.Precondition — every ticket merged
The change file states it maps 1:1 to a single ticket, so the milestone precondition is one row:
Archive date is #1905's merge date,
2026-08-22.Step 1 — the REMOVED gate
This is the change's own declared shape, not an omission — its
## REMOVEDsection reads "Nothing. NoREMOVED:bullets; the ship gate has nothing to verify gone." The change was additive spelling over plan text #1903 had already merged, so nothing in the tree retires with it. Re-run against the archived path is identical.Step 2 — the fold
The §Packages raw-handle entry is marked
[raw-handle-export-contract — SHIPPED #1900]with threeverify:markers.Most of what this change built was already written into the entry by the align that decided it (#1903) — Full-only minting, the use bound, allocation-not-frame semantics, and the full field list the typed export carries. The fold therefore adds only the three contract facts the entry did not state, each verified against the shipped code:
The OPEN zero-copy-per-frame entry is untouched — it is its own align, and out of scope by the change's own statement.
The section header drops the archived change and stays
IN-FLIGHT (→ importable-python-library).Every marker resolves to a real test target, checked with
cargo metadataand by name:opaque_fd_wheel_export_foreign_consumer::a_wheel_exported_opaque_fd_read_by_a_foreign_process_shows_the_kernels_pixels— a secondVkDevicein a genuinely foreign process, driven only by the exported bundleopaque_fd_image_consumer_rhi_round_trip::an_exported_opaque_fd_pins_the_payload_past_source_texture_teardown— the audit addendum probetest_device_exchange.py::test_a_texture_handle_round_trips_across_the_process_boundary— carries the metadata and refusal assertions;requires_gpu, so rig-only, never CIStep 3 — the diagram
system.mmdgains ahelper --> pkgsedge for the Full-gated raw fd. Neither #1903 (the plan text) nor #1904 (the change file) touched the diagram, so this DECIDED entry was unrepresented against the plan's own opening rule that "every DECIDED entry is represented in the diagram". The existingpkgs --> helperarrow covers only the inbound direction — a third-party package exposing handles to Python. The export is the outbound one.Verification
cargo run -p xtask -- check-all-source-gates— all 10 source-walking gates pass.Spot-checked that the change's non-plan claims actually landed:
README.md:251-252now names bothexport_dma_bufandexport_opaque_fdasctx.gpu_full_accessmethods (the doc-rot bullet), andtest_device_exchange.py:279asserts the redirect namesexport_opaque_fd.🤖 Generated with Claude Code