Polish release_gate_geotiff.rst for maintainer use (#2345 PR 3, closes #2381)#2388
Merged
Conversation
* Add a "How a maintainer runs this gate" section at the top covering the pytest invocation, skip-handling guidance, and the promote / demote decision rule. * Add an Epic column to every list-table so each row links to its owning epic (#2286, #2321, #2340, #2341, #2342, #2344). Epic anchors are collected at the bottom of the page. * Fix tier mismatches against SUPPORTED_FEATURES: ``reader.allow_rotated`` and ``reader.allow_unparseable_crs`` move to ``experimental`` to match the runtime constant. Replace freeform tier strings like "rejected at writer boundary" with the parent feature's tier where the row is a sub-gate of an existing feature. * Refresh the placeholder PR cross-reference block: drop the stale sub-PR list now that the gate sub-PRs are landing, and reframe the parent-issue note as an epic reference list at the bottom of the page.
brendancol
commented
May 25, 2026
Contributor
Author
brendancol
left a comment
There was a problem hiding this comment.
PR Review: Polish release_gate_geotiff.rst for maintainer use (#2345 PR 3, closes #2381)
Docs-only PR. Algorithm / backend / performance parts of the review template don't apply. I checked doc accuracy and the acceptance criteria from #2381.
Blockers
None.
Suggestions
release_gate_geotiff.rst:23-27: the top note names the six owning epics but skips #2345, which is the epic this PR is part of. Add a line pointing at #2345 so the file traces back to its own parent.release_gate_geotiff.rst:312-315: thereader.httprow still says(see ``#2321`` sub-PR 5). The "Placeholder PR cross-references" section that gave that label meaning is gone (good), so the reference now dangles. Replacesub-PR 5with #2326 or drop the parenthetical.release_gate_geotiff.rst:326-335and336-342: the SSRF and per-tile byte-cap rows arestablewhile their parent rows (reader.http,reader.http_cog) areadvanced. The mismatch is intentional but reads as drift. One sentence in "How a maintainer runs this gate" noting that sub-gates can carry a stricter tier than their parent row would head off a future audit flag.geotiff_release_contract.md:93-94(out of scope for this PR): the companion doc still tiersreader.allow_rotatedandreader.allow_unparseable_crsatadvanced, which now conflicts with this PR'sexperimental. File a follow-up so the two files don't drift.
Nits
release_gate_geotiff.rst:46-51: the-k release_gatefilter assumes every release-gate test file is namedtest_release_gate_*.py. Worth onelscheck; if any cited file does not match, the recommended pytest invocation under-runs the gate.release_gate_geotiff.rst:79-82: the "newly-passingxfail" guidance says re-tier the row but does not say "remove thexfailmarker in the same commit". Worth spelling out.release_gate_geotiff.rst:172: row titleeager / dask parity (sub-gate of ``reader.dask``)uses a parenthetical, while rows likereader.windowed -- shifted-transform parityuse a dash. Pick one form so the row index scans.
What looks good
- All three required pieces of the "how to run" section are present: pytest invocation, skip handling, promote/demote rule.
- Every row has all five required pieces (feature, tier, acceptance, test, epic).
- The two
SUPPORTED_FEATUREStier mismatches (reader.allow_rotated,reader.allow_unparseable_crs) are fixed. - 99/99 cited test paths exist on disk. No missing-test follow-up needed.
Checklist
- Doc parses (docutils; local Sphinx env unrelated)
- Every row has acceptance + test path + epic + tier
- Every tier value matches
SUPPORTED_FEATURES - Every cited test exists on disk
- "How a maintainer runs this gate" covers the three required pieces
-
geotiff.rsttier table untouched - No new tests added (scope: file follow-up if needed)
- [n/a] Algorithm / backend correctness (docs-only)
- [n/a] README matrix (docs-only)
* Add a reference to the doc-readiness epic (#2345) in the top note so the file traces back to its own parent epic, the same way every row traces back to its owning epic. * Replace the dangling "see #2321 sub-PR 5" parenthetical on the ``reader.http`` row with a direct ``#2326`` reference. The sub-PR numbering vehicle was removed earlier in this PR; the inline reference was hanging. * Add a "note on sub-gate rows" subsection explaining that sub-gate rows can carry a stricter tier than their parent feature row (the SSRF and per-tile byte-cap rows under ``reader.http`` / ``reader.http_cog``). The mismatch is intentional and should not be flagged as drift by a gate auditor. * Spell out the action on a newly-passing xfail: remove the xfail marker in the same commit that re-tiers the row, otherwise the gate can silently regress. * Normalize sub-gate row titles to the ``parent`` -- description form used elsewhere in the file. Drop the redundant ``(sub-gate)`` parenthetical now that the convention has its own section. Follow-up #2389 filed for the parallel tier drift in ``docs/source/reference/geotiff_release_contract.md`` (out of scope for this PR per the #2381 acceptance).
brendancol
commented
May 25, 2026
Contributor
Author
brendancol
left a comment
There was a problem hiding this comment.
PR Review (round 2): Polish release_gate_geotiff.rst (#2345 PR 3, closes #2381)
Re-reviewed after ac8e979c. Every actionable item from round 1 was addressed in-PR. Round 1 deferral (geotiff_release_contract.md tier drift) is tracked in #2389.
Blockers
None.
Suggestions
None.
Nits
release_gate_geotiff.rst:328: the new#2326reference resolves to a merged PR rather than an issue. The other inline#...references in the file all point at issues. Not a bug (the link works), but if you want full consistency, swap for#2323(the parent issue that #2326 closed) and leave the prose unchanged. Optional; ignore if you'd rather keep the direct PR pointer.
What looks good
- The "doc-readiness epic that owns this checklist itself is
#2345" line at line 27-28 closes the round-1 trace-back gap. - The new "A note on sub-gate rows" subsection explains the intentional tier-mismatch (SSRF row
stablewhile parentreader.httpisadvanced) cleanly. Future audit passes will not file this as drift. - Row title
reader.dask -- eager / dask paritynow matches the dash convention used elsewhere. The redundant(sub-gate)parentheticals are gone. - The "newly-passing xfail" guidance now says exactly what to do: remove the marker in the same commit.
Checklist
- Round-1 blockers / suggestions / nits addressed in-PR (or deferred to filed follow-up)
- Every gate row still has acceptance + test path + epic + tier
- Every tier value still matches
SUPPORTED_FEATURES - Every cited test still exists on disk
- RST parses cleanly (docutils round-trip)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #2381. Part of epic #2345 (PR 3 of the release-gate doc polish wave).
What changed
docs/source/reference/release_gate_geotiff.rst. It covers thepytest selection / marker for the gate suite, skip-handling guidance
(GPU absent, optional codecs, COG validator opt-in), and the tier
promote / demote decision rule that a maintainer follows when a row
passes or regresses.
its owning epic (Promote COG support to ready/stable with compliance and parity gates #2286, GeoTIFF release hardening: define and lock down supported VRT contract #2321, Epic: GeoTIFF release contract and feature tiering #2340, Epic: GeoTIFF correctness and backend parity release gate #2341, Epic: Conservative VRT support contract for GeoTIFF release #2342, or Epic: GeoTIFF remote/source safety hardening #2344). The
six epic anchors are collected in an "Owning epics" section at the
bottom of the page.
SUPPORTED_FEATURES.reader.allow_rotatedand
reader.allow_unparseable_crsmove fromadvancedtoexperimentalto match the runtime constant. Replaced freeformtier strings ("rejected at writer boundary", "rejected") with the
parent feature's tier where the row is a sub-gate of an existing
feature (the COG tile-layout pre-flight rows now sit under
writer.cog, and VRT mixed-band nodata sits under the nodatafail-closed contract).
bottom of the file with an "Owning epics" section that lists each
epic title alongside its anchor.
Out of scope
points at a missing test, file a follow-up issue rather than write
the test here". I checked every test path referenced in the file
and all 99 cited tests exist, so no follow-up was needed.
geotiff.rst's tier table is untouched per the issue scope.Test plan
pytest xrspatial/geotiff/tests/test_release_gate_2321.py xrspatial/geotiff/tests/test_supported_features_tiers_2137.pypasses (24 passed, 1 xpassed).stable/advanced/experimental/internal_onlyand matchesSUPPORTED_FEATURESwhere the featurekey appears in that constant.
skip-handling rule, and the promote / demote decision rule.