feat(hashing): add deterministic GeoJSON feature digests - #2099
Merged
Conversation
bartytime4life
marked this pull request as ready for review
August 7, 2026 04:12
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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.
Final disposition
924921864fe2aace5f72a45f66f2b57cb1edd1a5a6bbaa2a7986858bd72629cf3a77181b9e72a761de8eb2cb1f8e63d2044670e5bb0d10da4f2b05b4Goal
Implement a bounded, deterministic GeoJSON integrity slice derived from the attached New Ideas.pdf pattern for separate geometry and record digests.
Implemented change
packages/hashing/src/hashing/geojson.pywith the versionedkfm-geojson-feature-digest-v1profile.geometry_sha256andrecord_sha256identifiers using the repository's RFC 8785 JCS + SHA-256 implementation and currentsha256:<hex>grammar.idout ofrecord_sha256by default and admits it only through an explicit option.geojson-featureCLI command with deterministic JSON output and finite failure states.Trust boundary
Digest equality proves only equality under the declared structural profile. This change does not reproject coordinates, repair or validate topology, rotate rings, canonicalize line direction, sort collections, or establish topological or real-world spatial equivalence.
The command emits
authority: NONEand creates no source admission, EvidenceBundle, PolicyDecision, review, PromotionDecision, release, publication, or public-use authority.Directory Rules basis
The change uses existing responsibility roots only:
packages/hashing/src/hashing/tools/spec_hash/tests/validators/.github/workflows/data/receipts/generated/No parallel schema, contract, policy, registry, receipt, proof, release, or publication home is introduced. Placement follows adopted Directory Rules v2 through ADR-0029.
Files
.github/workflows/spec-hash.ymlpackages/hashing/src/hashing/__init__.pypackages/hashing/src/hashing/cli.pypackages/hashing/src/hashing/geojson.pytests/validators/test_validate_spec_hash_geojson.pytools/spec_hash/GEOJSON_FEATURE_DIGESTS.mddata/receipts/generated/genrec-geojson-feature-digests-20260806.jsonValidation record
PASS
Post-merge gate finding
The hosted run failed only after the deterministic tests passed, in generated-receipt validation. The workflow revalidated the historical
genrec-spec-hash-validator-20260806.jsonagainst newly changed current workflow bytes. That historical receipt is immutable process memory, not a perpetual current-state assertion. Draft PR #2107 preserves the historical receipt, adds a current-state receipt, and changes the workflow to validate the current receipt only.Commits
7056706987ba595514aa1b135fa3577cdaabbdc8— implementationde8eb2cb1f8e63d2044670e5bb0d10da4f2b05b4— normalized test layout and final PR receipt binding924921864fe2aace5f72a45f66f2b57cb1edd1a5— merge commitRollback
Revert merge commit
924921864fe2aace5f72a45f66f2b57cb1edd1a5. If follow-up PR #2107 is later merged, revert its merge commit first. No source deactivation, data migration, release withdrawal, cache invalidation, public correction, or published-artifact rollback is required because this slice performs no lifecycle or publication transition.