gh shim: adopt Plexus's not-sent pre-read refusals (fixtures at fec01fef)

Merged
AF
1d ago
+2662-153

Stacked on #1181 (refusal explanations), which is in the merge queue. Until #1181 merges, this diff also shows its commits.

Plexus changed its contract at fec01fef: a bot write that fails before anything reaches GitHub now comes back as a refusal marked "not sent". Before, it came back as "outcome unknown". This PR adopts that contract.

Fixtures: the README and all 27 reply fixtures are vendored byte for byte at Plexus fec01fefcd8aee8a5e25ced70585ecb12a7d8685, with per-file SHA-256 in PROVENANCE.md. The 144 request fixtures stay at 0025bdf6, and the .gitattributes LF pinning is kept. All 27 replies are decoded and validated. The 18 that AFT supports today run through the real shim. The nine merge-queue vectors are listed in one constant until the merge-queue shim change (#1125) lands. They are byte-identical to the vectors at the pin #1125 uses.

Behavior:

  • Not-sent refusals stop immediately. The exceptions are transport_unknown and lease_expired pre-reads, which get at most one retry with the same nonce within the original deadline, so Plexus replays rather than writes twice.
  • Changed: retry_same_nonce: true with not_sent no longer triggers an automatic retry for request_deadline_exceeded. Those replies now stop immediately. Already-sent legs keep their existing "undetermined" warning.
  • Unchanged: a write with outcome_unknown still never resends, and prior-write partial reporting stays as it was.
  • Wording: no new agent-visible text. Both new reasons use the approved generic "The GitHub read did not finish." Reason-specific sentences are proposed separately for operator approval.

Verification: 12-core Linux shim library tests and wire goldens, plus the Windows compile check.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adopts Plexus's new not-sent pre-read refusal contract so bot writes that fail before reaching GitHub are reported as refusals rather than unknown outcomes.

Behavior

  • Not-sent refusals stop immediately, except transport_unknown and lease_expired pre-reads get one same-nonce retry within the original deadline.
  • request_deadline_exceeded with not_sent no longer retries when retry_same_nonce is true.
  • outcome_unknown writes still never resend; partial posted-step reporting is unchanged.

Fixtures

  • Vendors the README and 27 reply fixtures at the updated Plexus reply pin; the 144 request fixtures stay at the previous pin. Nine merge-queue replies are listed together and remain fixture-only until merge-queue routing lands.