Skip to content

[docs-agent] Rename Alchemy Rollups overview page title to "Alchemy Rollups"#1263

Closed
JackReacher0807 wants to merge 1 commit intomainfrom
docs/rename-rollups-overview-title
Closed

[docs-agent] Rename Alchemy Rollups overview page title to "Alchemy Rollups"#1263
JackReacher0807 wants to merge 1 commit intomainfrom
docs/rename-rollups-overview-title

Conversation

@JackReacher0807
Copy link
Copy Markdown
Collaborator

Summary

Renames the rollups landing page title from Alchemy Rollups Overview to Alchemy Rollups.

Requested by

@SahilAujla (via Slack thread)

Linear

DOCS-65 — https://linear.app/alchemyapi/issue/DOCS-65/rename-alchemy-rollups-overview-page-title-to-alchemy-rollups

Drop trailing 'Overview' from the rollups landing page (/docs/rollups)
title so it reads simply 'Alchemy Rollups'. Frontmatter only; no slug,
description, or body changes.
@JackReacher0807 JackReacher0807 requested a review from a team as a code owner April 24, 2026 23:39
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 24, 2026

🔗 Preview Mode

Name Status Preview Updated (UTC)
Alchemy Docs ✅ Ready 🔗 Visit Preview Apr 24, 2026, 11:40 PM

@github-actions
Copy link
Copy Markdown

🔍 Link Check

Status: ❌ Failed

Summary

Status Count
🔍 Total 8008
✅ Successful 6853
⏳ Timeouts 0
🔀 Redirected 458
👻 Excluded 676
❓ Unknown 0
🚫 Errors 20
⛔ Unsupported 1
Broken links (20) — click to expand

Errors per input

Errors in ./content/wallets/wallet-integrations/privy/react-migration.mdx

Errors in ./content/wallets/wallet-integrations/privy/jwt-auth-migration.mdx

Errors in ./content/wallets/wallet-integrations/privy/signer-migration-overview.mdx

Errors in ./content/api-reference/arbitrum-nova/arbitrum-nova-deprecation-notice.mdx

View workflow run

@SahilAujla
Copy link
Copy Markdown
Collaborator

closing as it was a test!

@SahilAujla SahilAujla closed this Apr 25, 2026
SahilAujla added a commit that referenced this pull request Apr 25, 2026
…n approvals on day one

Three bugs caught before any workflow run hit production. Two flagged
by codex review (P1 #3141497645, P1 #3141497647); the third I caught
during local end-to-end testing of the fixes.

1. gh api needs --method GET (codex #3141497645)

   `gh api -F per_page=100 ...` defaults to POST per the gh manual
   ("If the request is not GET, automatically uses POST when -f/-F
   are given"). The pull-request commits endpoint is GET-only; the
   POST request hit a non-existent endpoint and returned 404,
   sending every approval through the fail-closed dismissal path.
   Net effect would have been: every approval on every docs-agent PR
   silently dismissed, blocking all merges.

   Fix: explicit --method GET.

2. VALIDSIG fingerprint match was on signing subkey, not primary
   (codex #3141497647)

   GPG's status-line format:
     [GNUPG:] VALIDSIG <signing_key_fpr> <date> ... <primary_key_fpr>

   When a key has signing subkeys (the default for keys generated
   with `gpg --full-generate-key`), the FIRST fingerprint after
   VALIDSIG is the signing subkey and the LAST field is the primary
   key. Our pinned EXPECTED_FPR is the primary fingerprint, so
   matching against the first field never matched. Every signed
   commit was filtered out as untrusted; ALL_REQUESTED_BY ended
   up empty; missing-attribution path fired on every PR; rule
   never enforced.

   Fix: extract the LAST field of the VALIDSIG line via awk and
   compare against EXPECTED_FPR.

3. Payload needed trailing newline before gpg verification (caught
   in local testing — not flagged by codex)

   Git signs the commit object as raw bytes with a trailing \n.
   GitHub's verification.payload preserves those bytes, but jq -r
   decodes them as a string, and writing back via printf '%s' drops
   the trailing newline. Without it, gpg outputs BADSIG on every
   commit. Same downstream effect as #2.

   Fix: write payload with printf '%s\n'.

End-to-end tested locally against PR #1263's docs-agent commit:
fetch returns the commit, gpg verifies, primary fpr matches
expected. Trailer extraction would proceed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SahilAujla added a commit that referenced this pull request Apr 25, 2026
Codex P1 (id 3141513483) plus three additional gaps caught in a full
audit before pushing this commit. End-to-end tested locally against
PRs #1261 (no trailer), #1263 (no trailer), and #1264 (trailer present)
across 6 cases: originator dismissal (canonical + case-variant),
non-originator allow, missing-attribution warn for various approvers.
All 6 cases produce the expected outcome.

1. Add `contents: read` permission (codex P1)

   Setting `permissions:` explicitly removes any unlisted permission
   (sets to `none`). Without `contents: read`, `actions/checkout`
   fails on private/internal repos before the dismissal logic runs,
   so the self-approval rule is never enforced. Adds the read-only
   permission needed for sparse checkout of the pubkey file.

2. Verify pubkey loaded after gpg --import (audit gap)

   If the pubkey import silently succeeded-but-loaded-no-keys
   (corrupted file, empty file, etc.), every commit's signature
   verification would fail the trust filter, ALL_REQUESTED_BY would
   end up empty, and the workflow would silently degrade to the
   missing-attribution warn-only path on EVERY PR — never enforcing.
   Now: `gpg --list-keys $EXPECTED_FPR` after import; if absent,
   dismiss the approval and exit 1.

3. Paginate the comments-list call used for duplicate-warning
   suppression (audit gap)

   PRs that accumulate >30 comments (over weeks) could push the
   existing warning comment off the first page; without pagination
   the duplicate-suppression check would miss it and post a
   duplicate every approval. Adds `--paginate -F per_page=100` +
   `jq -s 'add'`.

4. Explicit `event=DISMISS` on dismissals API calls (audit gap)

   The PUT /dismissals endpoint defaults `event` per most-recent
   docs but historical behavior has varied. Setting it explicitly
   avoids relying on an undocumented default for a security-critical
   call.

Test matrix run locally before this commit:

  PR #1264 approver=SahilAujla    expected=dismiss actual=dismiss OK
  PR #1264 approver=danielcoyle   expected=allow   actual=allow   OK
  PR #1264 approver=SAHILAUJLA    expected=dismiss actual=dismiss OK
  PR #1263 approver=SahilAujla    expected=warn    actual=warn    OK
  PR #1263 approver=anyone        expected=warn    actual=warn    OK
  PR #1261 approver=SahilAujla    expected=warn    actual=warn    OK

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SahilAujla added a commit that referenced this pull request Apr 25, 2026
Codex flagged a P1 where `gpg --verify` returning non-zero (BADSIG on a
tampered payload, NO_PUBKEY for an unrelated signer, malformed signature
data) would abort the step under `set -euo pipefail` before the else
branch could run — turning "skip an untrusted commit" into a hard
workflow failure that prevented the dismissal logic from running for
legitimately verified commits later in the loop.

Wrap the verify in `if gpg_status="$(...)"; then ...` so a non-zero
exit just falls through to the SKIP path with primary_fpr="".

Pre-push audit also caught four init-path gaps where a transient or
silent failure could have left an approval intact:

1. gpg --import itself can fail (corrupted .asc, wrong format) — now
   wrapped in `if !` and fail-closed.
2. .github/workflows/docs-agent-pubkey.asc could be deleted from main —
   added existence check before --import, fail-closed if missing.
3. Dismissal API calls were single-attempt — added dismiss_with_retry()
   with 3 attempts and exponential backoff; used everywhere we dismiss.
4. Originator-match dismissal previously appended `|| true` — now
   exit 1 if all 3 retries fail, so a transient API hiccup surfaces
   instead of silently leaving the approval intact.

Local test matrix (PR #1264 with Requested-by: @SahilAujla, PR #1263
with no trailer, PR #1261 likewise, plus PR #1262 which has only
human-authored commits): all 7 cases produce the expected outcome
(dismiss / allow / warn-only). Tampered-payload BADSIG test confirms
the step survives instead of aborting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

2 participants