Skip to content

feat: v0.20.0 — expose exact GraphQL response bytes - #31

Open
scarver2 wants to merge 1 commit into
masterfrom
feat/exact-response-payload
Open

feat: v0.20.0 — expose exact GraphQL response bytes#31
scarver2 wants to merge 1 commit into
masterfrom
feat/exact-response-payload

Conversation

@scarver2

@scarver2 scarver2 commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • preserve exact HTTP response bytes before Faraday JSON parsing
  • expose immutable binary response evidence through ResponseEnvelope#response_payload and bounded contact pages
  • add zero-network GraphqlClient#envelope_from_response_payload and Contacts#page_from_response_payload replay seams
  • converge live and replay parsing on one envelope builder so validation, malformed-response handling, metadata allowlisting, and GraphQL error sanitization cannot drift
  • keep raw provider payloads out of ordinary to_h serialization and inspection
  • preserve every existing parsed-data, sanitized-error, metadata, success, and partial-response contract
  • require Faraday 2.14 for its byte-preserving preserve_raw support
  • bump the unreleased package contract to 0.20.0

Security boundary

  • captures and rehydrates response body bytes only
  • accepts only String payloads and explicit safe metadata
  • performs zero network I/O during payload replay
  • does not expose or accept request headers, credentials, Faraday environments, or connection objects
  • raw provider payloads may contain customer PII and require an explicit encrypted evidence boundary
  • no Rodeo dependency or persistence policy enters the SDK

Test plan

  • bundle exec rspec — 783 examples, 0 failures
  • SimpleCov — 100.0% line coverage (1,887 / 1,887)
  • bundle exec rubocop — 226 files, 0 offenses
  • gem build — printavo-ruby-0.20.0.gem
  • isolated gem install and require smoke — 0.20.0
  • git diff --check
  • exact-byte fixture covers noncanonical spacing, key order, Unicode escapes, and numeric representation
  • live/replay golden equivalence for envelopes and bounded contact pages
  • malformed JSON, partial GraphQL results, safe metadata, immutable payloads, and zero-network behavior
  • mutation and ordinary-inspection non-disclosure

Closes #30

No gem publication is authorized by this PR. Sheriff release authorization remains a separate gate.

🤖 Generated with Codex

@scarver2
scarver2 force-pushed the feat/exact-response-payload branch from 77acdce to 6e582bc Compare August 18, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose exact immutable GraphQL response bytes

1 participant