Annotate output is not reproducible: properties[] order varies between runs on identical sources
@avillar đang làm issue này rồi.
Từ ngày 8/10/2026.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 56/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- github-actions, python
- Lĩnh vực
- build-system
Hướng nghiên cứu
Start by tracing how the postprocess builds and serializes properties[] in the outputs under build/annotated/, especially resolvedProperties.json; the issue provides a concrete example with three sibling entries changing order. Reproduce with identical inputs and check whether iteration over an unordered collection determines the output. Done when repeated runs produce byte-stable ordering for these outputs without changing their contents.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Running the postprocess twice over byte-identical sources produces build/annotated/** output that differs only in the order of the properties[] array. The entries are the same; their positions move.
Because this output is committed in our repository, every run looks like a ~1300-file change that contains no change at all, which makes "regenerate and compare" unusable as a check and buries real diffs.
Evidence
Two runs of validate-and-process.yml@v1 (skip-pages: true), producing commits 9496e7c15 and 88eedbaf6 in amds-ldeo/geochemBuildingBlocks. Between those two commits:
_sources/— 0 files changedtappsubmodule — unchangedbblocks-config.yaml— unchanged- the only non-
build/changes were one GitHub Actions workflow file and a docstring in a tool neither the postprocess nor the schemas read
so the postprocess input was identical. Yet:
build/— 1310 files changed, +166607 −166607 (symmetric)- 40 of 40 sampled JSON outputs are order-insensitively identical (comparison canonicalising both dict key order and list element order); 0 genuinely different
- affected output kinds:
resolvedProperties.json(131),index.json(198),_report.json(242),schema-oas3.0.json/.yaml
Minimal example
build/annotated/BaseSchema/tappDefinition/resolvedProperties.json — 215 properties[] entries in both runs, identical multiset, 3 positions differing, a clean rotation:
[123] A: schema:actionProcess.schema:step.schema:additionalProperty.schema:unitText
B: schema:actionProcess.schema:step.schema:additionalProperty.schema:name
[124] A: schema:actionProcess.schema:step.schema:additionalProperty.schema:name
B: schema:actionProcess.schema:step.schema:additionalProperty.schema:propertyID
[125] A: schema:actionProcess.schema:step.schema:additionalProperty.schema:propertyID
B: schema:actionProcess.schema:step.schema:additionalProperty.schema:unitText
Three sibling properties of one object, emitted in a different order each run. That pattern — a small group of siblings rotating — is what an unordered collection (a set, or a dict built in traversal order and iterated without sorting) looks like when it reaches the output.
Suggested fix
Sort properties[] before serialising — by path (and id as a tiebreak) would be stable and also easier to read. More generally, any collection that reaches committed output needs a defined order.
We hit the same class of bug in our own generators and fixed it the same way; we also added a CI check that regenerates under two different PYTHONHASHSEED values and compares, which catches exactly this. If the ordering here derives from set/dict iteration, that check would likely reproduce it in your CI cheaply.
Why it matters downstream
build/annotated/** is committed in our repository because our Pages deploy reads it without regenerating. With non-deterministic ordering:
- a "regenerate and diff" check cannot distinguish a real change from reordering
- every source change produces a large spurious diff, so genuine changes are not reviewable
- the postprocess reports success, so nothing signals that the output is unstable
Happy to supply fuller diffs, the comparison script, or run an instrumented build if that helps isolate it.
Environment
opengeospatial/bblocks-postprocess/.github/workflows/validate-and-process.yml@v1, defaultimage_tag- observed 2026-10-07
- Ngôn ngữ chính
- Python
- Star
- 1
- Fork
- 6
- Merge trung bình
- 1 ngày
- Pull request đã merge (30 ngày)
- 6
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Không có mẫu pull request
- Không có hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của opengeospatial/bblocks-postprocess
-
Improve build strategyĐang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
opengeospatial/bblocks-postprocess#102 · 4 bình luận ·
-
Độ khó 3/5 Nửa ngày Mức phù hợp với người mới 68/100
-
if no bblocks highlighted, assume all are.Có thể đã có người làm @avillar đã nhận 5 ngày trước. Đang mở
opengeospatial/bblocks-postprocess#96 · 3 bình luận · 1 người được giao ·
-
JSON schema library version review.Có thể đã có người làm @avillar đã nhận 23 ngày trước. Đang mở
opengeospatial/bblocks-postprocess#89 · 3 bình luận · 1 người được giao ·
-
Test failures cannot distinguish advisory SHACL results (sh:Warning / sh:Info) from sh:ViolationĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
Tất cả issue của opengeospatial/bblocks-postprocess
Issue tương tự
-
Project submission:Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
slavakurilyak/awesome-ai-agents#845 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
tests: pin that the atomic writers in utils/paths.py stage the temporary file in the target's directoryCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mởdifficulty:2 enhancement good first issue
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 92/100
MakazhanAlpamys/Soup#2178 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] dcg.waggr permutation p-values are folded twice, so near-zero scores get the smallest p-valuesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
scverse/rapids-singlecell#854 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Slang input: int8_t4_packed and uint8_t4_packed are copied into CrossGLCó thể đã có người làm @ninglinLiu đã nhận hôm nay. Đang mởarea:frontend backend:slang bug direction:input
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 1 ngày
-
random_elements(unique=True) on an OrderedDict: ZeroDivisionError once only zero weights remain, AssertionError with use_weighting=FalseCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 13 ngày