Skip to content

CI: add muffet --rate-limit to reduce transient external 504 failures - #103

Merged
mithro merged 1 commit into
mainfrom
ci/muffet-rate-limit
Jun 8, 2026
Merged

CI: add muffet --rate-limit to reduce transient external 504 failures#103
mithro merged 1 commit into
mainfrom
ci/muffet-rate-limit

Conversation

@mithro

@mithro mithro commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds --rate-limit=20 to the muffet invocation in preview-verification.yml to reduce intermittent verify-preview failures caused by external hosts (notably github.com) returning bursts of 504 Gateway Timeout mid-scan.

             --max-connections=10 \
             --max-connections-per-host=5 \
+            --rate-limit=20 \
             --buffer-size=16384 \

Why

A recent run timed out every github.com URL at once — including rock-solid repos like google/skywater-pdk — and took ~9 minutes (vs. the usual ~3-4). That all-one-host-at-once pattern is throttling/availability, not link rot. muffet fires requests as fast as its connection limits allow; a global rate cap smooths the bursts.

Why not send a GitHub token instead

muffet's --header has no per-host scoping (confirmed in the muffet usage docs: --header = "Custom headers", with no per-host/auth option). An Authorization: Bearer <token> header would therefore be sent to every host muffet crawls — including arbitrary external sites — leaking a pull-requests: write-scoped token. A token also wouldn't reliably help: muffet fetches github.com HTML pages, not the rate-limited api.github.com API surface. --rate-limit needs no secret and cannot leak anything.

Notes

🤖 Generated with Claude Code

The preview-verification job intermittently fails when an external host
(notably github.com) returns a burst of 504s mid-scan — muffet issues
requests as fast as connection limits allow, which can overwhelm a host
or trip its throttling. A recent run timed out every github.com URL at
once (including rock-solid repos) and took ~9 minutes.

Cap muffet at 20 requests/second globally to smooth out request bursts.
This is a safe, host-agnostic throttle: unlike sending an auth token via
--header (which muffet would leak to every external host, since it has
no per-host header scoping), --rate-limit needs no secret and cannot
leak anything.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions
github-actions Bot temporarily deployed to pr-preview-103 June 8, 2026 09:05 Destroyed
@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown

🚀 Preview Deployment Ready!

Status Preview URL Commit
✅ Success View Preview 11a215d

This preview will be automatically updated when you push new commits to this PR.

Browse all previews: https://preview.wafer.space


⚡ Deployed to custom domain • Preview will be removed when PR is closed

@github-actions

github-actions Bot commented Jun 8, 2026

Copy link
Copy Markdown

❌ Preview Site Verification FAILED

Preview Site Verification Report

PR: #103
URL: https://preview.wafer.space/pr-103/
Timestamp: Mon Jun 8 09:09:16 UTC 2026

1. Basic Connectivity ✅

  • ✅ Site is accessible
  • ✅ HTTP Status: 200

2. Content Verification

  • ✅ Site contains expected content
  • ✅ Tagline present
  • ✅ JavaScript baseurl configuration found

3. Multi-Page Asset Verification

Discovering all pages in the site...
Found pages: 7 discovered + homepage
Testing critical assets...

  • ✅ favicon.png
  • ✅ assets/css/style.css
  • ✅ assets/js/jquery.min.js
  • ✅ assets/images/logo-light.webp
    Checking assets across all pages...
    Processing page 1: homepage
  • ✅ bootstrap.min.css (homepage)
  • ✅ plugins.css (homepage)
  • ✅ settings.css (homepage)
  • ✅ layers.css (homepage)
  • ✅ navigation.css (homepage)
  • ✅ type.css (homepage)
  • ✅ style.css (homepage)
  • ✅ sky.css (homepage)
  • ✅ dark.css (homepage)
  • ✅ custom.css (homepage)
  • ✅ jquery.min.js (homepage)
  • ✅ popper.min.js (homepage)
  • ✅ bootstrap.min.js (homepage)
  • ✅ jquery.themepunch.tools.min.js (homepage)
  • ✅ jquery.themepunch.revolution.min.js (homepage)
  • ✅ revolution.extension.actions.min.js (homepage)
  • ✅ revolution.extension.carousel.min.js (homepage)
  • ✅ revolution.extension.kenburn.min.js (homepage)
  • ✅ revolution.extension.layeranimation.min.js (homepage)
  • ✅ revolution.extension.migration.min.js (homepage)
  • ✅ revolution.extension.navigation.min.js (homepage)
  • ✅ revolution.extension.parallax.min.js (homepage)
  • ✅ revolution.extension.slideanims.min.js (homepage)
  • ✅ revolution.extension.video.min.js (homepage)
  • ✅ plugins.js (homepage)
  • ✅ simple-jekyll-search.min.js (homepage)
  • ✅ scripts.js (homepage)
  • ✅ favicon.png (homepage)
  • ✅ logo-light.webp (homepage)
  • ✅ logo.webp (homepage)
  • ✅ logo-light.webp (homepage)
  • ✅ logo-light.webp (homepage)
  • ✅ dummy.webp (homepage)
  • ✅ rocket1.webp (homepage)
  • ✅ rocket2.webp (homepage)
  • ✅ rocket3.webp (homepage)
  • ✅ rocket4.webp (homepage)
  • ✅ 0p5x1_gelpack.jpg (homepage)
  • ✅ 0p5x1_gelpack.jpg (homepage)
  • ✅ 1x0p5_gelpack.jpg (homepage)
  • ✅ 1x0p5_gelpack.jpg (homepage)
  • ✅ 1x1_gelpack.jpg (homepage)
  • ✅ 1x1_gelpack.jpg (homepage)
  • ✅ wafer-space-chip-on-board.jpg (homepage)
  • ✅ gf180mcu-wafer-edge-1.jpg (homepage)
  • ✅ gf180mcu-wafer-isometric.jpg (homepage)
  • concept12@2x.webp (homepage)
  • ✅ logo-light.webp (homepage)
    Processing page 2: about.html (/pr-103/about.html) -> https://preview.wafer.space/pr-103/about.html
  • ✅ bootstrap.min.css (about.html)
  • ✅ plugins.css (about.html)
  • ✅ settings.css (about.html)
  • ✅ layers.css (about.html)
  • ✅ navigation.css (about.html)
  • ✅ type.css (about.html)
  • ✅ style.css (about.html)
  • ✅ sky.css (about.html)
  • ✅ dark.css (about.html)
  • ✅ custom.css (about.html)
  • ✅ jquery.min.js (about.html)
  • ✅ popper.min.js (about.html)
  • ✅ bootstrap.min.js (about.html)
  • ✅ jquery.themepunch.tools.min.js (about.html)
  • ✅ jquery.themepunch.revolution.min.js (about.html)
  • ✅ revolution.extension.actions.min.js (about.html)
  • ✅ revolution.extension.carousel.min.js (about.html)
  • ✅ revolution.extension.kenburn.min.js (about.html)
  • ✅ revolution.extension.layeranimation.min.js (about.html)
  • ✅ revolution.extension.migration.min.js (about.html)
  • ✅ revolution.extension.navigation.min.js (about.html)
  • ✅ revolution.extension.parallax.min.js (about.html)
  • ✅ revolution.extension.slideanims.min.js (about.html)
  • ✅ revolution.extension.video.min.js (about.html)
  • ✅ plugins.js (about.html)
  • ✅ simple-jekyll-search.min.js (about.html)
  • ✅ scripts.js (about.html)
  • ✅ favicon.png (about.html)
  • ✅ logo-light.webp (about.html)
  • ✅ logo.webp (about.html)
  • ✅ logo-light.webp (about.html)
  • ✅ logo-light.webp (about.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (about.html)
  • ✅ hirosh-dabui.jpg (about.html)
  • ✅ tim.jpg (about.html)
  • ✅ boris.jpg (about.html)
  • ✅ bunnie.jpg (about.html)
  • ✅ matt.jpg (about.html)
  • ✅ tom.jpg (about.html)
  • ✅ xobs.jpg (about.html)
  • ✅ map.webp (about.html)
  • ✅ co-email-5.webp (about.html)
  • ✅ logo-light.webp (about.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (about.html)
  • ✅ map.webp (about.html)
    Processing page 3: design-help.html (/pr-103/design-help.html) -> https://preview.wafer.space/pr-103/design-help.html
  • ✅ bootstrap.min.css (design-help.html)
  • ✅ plugins.css (design-help.html)
  • ✅ settings.css (design-help.html)
  • ✅ layers.css (design-help.html)
  • ✅ navigation.css (design-help.html)
  • ✅ type.css (design-help.html)
  • ✅ style.css (design-help.html)
  • ✅ sky.css (design-help.html)
  • ✅ dark.css (design-help.html)
  • ✅ custom.css (design-help.html)
  • ✅ jquery.min.js (design-help.html)
  • ✅ popper.min.js (design-help.html)
  • ✅ bootstrap.min.js (design-help.html)
  • ✅ jquery.themepunch.tools.min.js (design-help.html)
  • ✅ jquery.themepunch.revolution.min.js (design-help.html)
  • ✅ revolution.extension.actions.min.js (design-help.html)
  • ✅ revolution.extension.carousel.min.js (design-help.html)
  • ✅ revolution.extension.kenburn.min.js (design-help.html)
  • ✅ revolution.extension.layeranimation.min.js (design-help.html)
  • ✅ revolution.extension.migration.min.js (design-help.html)
  • ✅ revolution.extension.navigation.min.js (design-help.html)
  • ✅ revolution.extension.parallax.min.js (design-help.html)
  • ✅ revolution.extension.slideanims.min.js (design-help.html)
  • ✅ revolution.extension.video.min.js (design-help.html)
  • ✅ plugins.js (design-help.html)
  • ✅ simple-jekyll-search.min.js (design-help.html)
  • ✅ scripts.js (design-help.html)
  • ✅ favicon.png (design-help.html)
  • ✅ logo-light.webp (design-help.html)
  • ✅ logo.webp (design-help.html)
  • ✅ logo-light.webp (design-help.html)
  • ✅ logo-light.webp (design-help.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (design-help.html)
  • ✅ chipflow-logo.png (design-help.html)
  • ✅ mabrains-logo.png (design-help.html)
  • ✅ precision-logo.png (design-help.html)
  • ✅ slice-logo.jpg (design-help.html)
  • ✅ logo-light.webp (design-help.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (design-help.html)
    Processing page 4: faq.html (/pr-103/faq.html) -> https://preview.wafer.space/pr-103/faq.html
  • ✅ bootstrap.min.css (faq.html)
  • ✅ plugins.css (faq.html)
  • ✅ settings.css (faq.html)
  • ✅ layers.css (faq.html)
  • ✅ navigation.css (faq.html)
  • ✅ type.css (faq.html)
  • ✅ style.css (faq.html)
  • ✅ sky.css (faq.html)
  • ✅ dark.css (faq.html)
  • ✅ custom.css (faq.html)
  • ✅ jquery.min.js (faq.html)
  • ✅ popper.min.js (faq.html)
  • ✅ bootstrap.min.js (faq.html)
  • ✅ jquery.themepunch.tools.min.js (faq.html)
  • ✅ jquery.themepunch.revolution.min.js (faq.html)
  • ✅ revolution.extension.actions.min.js (faq.html)
  • ✅ revolution.extension.carousel.min.js (faq.html)
  • ✅ revolution.extension.kenburn.min.js (faq.html)
  • ✅ revolution.extension.layeranimation.min.js (faq.html)
  • ✅ revolution.extension.migration.min.js (faq.html)
  • ✅ revolution.extension.navigation.min.js (faq.html)
  • ✅ revolution.extension.parallax.min.js (faq.html)
  • ✅ revolution.extension.slideanims.min.js (faq.html)
  • ✅ revolution.extension.video.min.js (faq.html)
  • ✅ plugins.js (faq.html)
  • ✅ simple-jekyll-search.min.js (faq.html)
  • ✅ scripts.js (faq.html)
  • ✅ favicon.png (faq.html)
  • ✅ logo-light.webp (faq.html)
  • ✅ logo.webp (faq.html)
  • ✅ logo-light.webp (faq.html)
  • ✅ logo-light.webp (faq.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (faq.html)
  • ✅ logo-light.webp (faq.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (faq.html)
    Processing page 5: free.html (/pr-103/free.html) -> https://preview.wafer.space/pr-103/free.html
  • ✅ bootstrap.min.css (free.html)
  • ✅ plugins.css (free.html)
  • ✅ settings.css (free.html)
  • ✅ layers.css (free.html)
  • ✅ navigation.css (free.html)
  • ✅ type.css (free.html)
  • ✅ style.css (free.html)
  • ✅ sky.css (free.html)
  • ✅ dark.css (free.html)
  • ✅ custom.css (free.html)
  • ✅ jquery.min.js (free.html)
  • ✅ popper.min.js (free.html)
  • ✅ bootstrap.min.js (free.html)
  • ✅ jquery.themepunch.tools.min.js (free.html)
  • ✅ jquery.themepunch.revolution.min.js (free.html)
  • ✅ revolution.extension.actions.min.js (free.html)
  • ✅ revolution.extension.carousel.min.js (free.html)
  • ✅ revolution.extension.kenburn.min.js (free.html)
  • ✅ revolution.extension.layeranimation.min.js (free.html)
  • ✅ revolution.extension.migration.min.js (free.html)
  • ✅ revolution.extension.navigation.min.js (free.html)
  • ✅ revolution.extension.parallax.min.js (free.html)
  • ✅ revolution.extension.slideanims.min.js (free.html)
  • ✅ revolution.extension.video.min.js (free.html)
  • ✅ plugins.js (free.html)
  • ✅ simple-jekyll-search.min.js (free.html)
  • ✅ scripts.js (free.html)
  • ✅ favicon.png (free.html)
  • ✅ logo-light.webp (free.html)
  • ✅ logo.webp (free.html)
  • ✅ logo-light.webp (free.html)
  • ✅ logo-light.webp (free.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (free.html)
  • ✅ about7.webp (free.html)
  • ✅ logo-light.webp (free.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (free.html)
    Processing page 6: how.html (/pr-103/how.html) -> https://preview.wafer.space/pr-103/how.html
    Processing page 7: price.html (/pr-103/price.html) -> https://preview.wafer.space/pr-103/price.html
  • ✅ bootstrap.min.css (price.html)
  • ✅ plugins.css (price.html)
  • ✅ settings.css (price.html)
  • ✅ layers.css (price.html)
  • ✅ navigation.css (price.html)
  • ✅ type.css (price.html)
  • ✅ style.css (price.html)
  • ✅ sky.css (price.html)
  • ✅ dark.css (price.html)
  • ✅ custom.css (price.html)
  • ✅ jquery.min.js (price.html)
  • ✅ popper.min.js (price.html)
  • ✅ bootstrap.min.js (price.html)
  • ✅ jquery.themepunch.tools.min.js (price.html)
  • ✅ jquery.themepunch.revolution.min.js (price.html)
  • ✅ revolution.extension.actions.min.js (price.html)
  • ✅ revolution.extension.carousel.min.js (price.html)
  • ✅ revolution.extension.kenburn.min.js (price.html)
  • ✅ revolution.extension.layeranimation.min.js (price.html)
  • ✅ revolution.extension.migration.min.js (price.html)
  • ✅ revolution.extension.navigation.min.js (price.html)
  • ✅ revolution.extension.parallax.min.js (price.html)
  • ✅ revolution.extension.slideanims.min.js (price.html)
  • ✅ revolution.extension.video.min.js (price.html)
  • ✅ plugins.js (price.html)
  • ✅ simple-jekyll-search.min.js (price.html)
  • ✅ scripts.js (price.html)
  • ✅ favicon.png (price.html)
  • ✅ logo-light.webp (price.html)
  • ✅ logo.webp (price.html)
  • ✅ logo-light.webp (price.html)
  • ✅ logo-light.webp (price.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (price.html)
  • ✅ 0p5x1_gelpack.jpg (price.html)
  • ✅ 0p5x1_gelpack.jpg (price.html)
  • ✅ 1x0p5_gelpack.jpg (price.html)
  • ✅ 1x0p5_gelpack.jpg (price.html)
  • ✅ 1x1_gelpack.jpg (price.html)
  • ✅ 1x1_gelpack.jpg (price.html)
  • ✅ wafer-space-chip-on-board.jpg (price.html)
  • ✅ gf180mcu-wafer-edge-1.jpg (price.html)
  • ✅ logo-light.webp (price.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (price.html)
    Processing page 8: technology.html (/pr-103/technology.html) -> https://preview.wafer.space/pr-103/technology.html
  • ✅ bootstrap.min.css (technology.html)
  • ✅ plugins.css (technology.html)
  • ✅ settings.css (technology.html)
  • ✅ layers.css (technology.html)
  • ✅ navigation.css (technology.html)
  • ✅ type.css (technology.html)
  • ✅ style.css (technology.html)
  • ✅ sky.css (technology.html)
  • ✅ dark.css (technology.html)
  • ✅ custom.css (technology.html)
  • ✅ jquery.min.js (technology.html)
  • ✅ popper.min.js (technology.html)
  • ✅ bootstrap.min.js (technology.html)
  • ✅ jquery.themepunch.tools.min.js (technology.html)
  • ✅ jquery.themepunch.revolution.min.js (technology.html)
  • ✅ revolution.extension.actions.min.js (technology.html)
  • ✅ revolution.extension.carousel.min.js (technology.html)
  • ✅ revolution.extension.kenburn.min.js (technology.html)
  • ✅ revolution.extension.layeranimation.min.js (technology.html)
  • ✅ revolution.extension.migration.min.js (technology.html)
  • ✅ revolution.extension.navigation.min.js (technology.html)
  • ✅ revolution.extension.parallax.min.js (technology.html)
  • ✅ revolution.extension.slideanims.min.js (technology.html)
  • ✅ revolution.extension.video.min.js (technology.html)
  • ✅ plugins.js (technology.html)
  • ✅ simple-jekyll-search.min.js (technology.html)
  • ✅ scripts.js (technology.html)
  • ✅ favicon.png (technology.html)
  • ✅ logo-light.webp (technology.html)
  • ✅ logo.webp (technology.html)
  • ✅ logo-light.webp (technology.html)
  • ✅ logo-light.webp (technology.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (technology.html)
  • ✅ gf180mcu-wafer-isometric.jpg (technology.html)
  • ✅ logo-light.webp (technology.html)
  • ✅ mpw-one-partial-dice-top-1.jpg (technology.html)
    Checked 8 pages total.
    Asset Summary: 0/286 failed
  • ✅ All assets loaded successfully

4. Link and Asset Verification (muffet)

Running comprehensive muffet validation...

  • ❌ muffet found broken links or assets:
https://preview.wafer.space/pr-103/news/kianv-riscv-soc
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/chip-on-board-progress
	id #ttgf0p2 not found	https://tinytapeout.com/chips/silicon-proven/#ttgf0p2
https://preview.wafer.space/pr-103/news/run1-wafers-arrived
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/openfasoc-sensor
	403	https://ngspice.sourceforge.io/
	403	https://siliconprawn.org/archive/doku.php?id=mcmaster:efabless:gf180mcu-mpw18h1-18100004
	403	https://siliconprawn.org/archive/lib/exe/fetch.php?media=mcmaster:efabless:gf180mcu-mpw18h1-18100004:rapid-prototyping-of-laser-induced-graphene-sensors-with-open-source-silicon-paving-the-way-small.pdf
	403	https://xschem.sourceforge.io/stefan/index.html
https://preview.wafer.space/pr-103/news/recent-publicity
	403	https://linuxgizmos.com/wafer-space-launches-gf180mcu-run-1-for-custom-silicon-fabrication/
	403	https://www.electronics-lab.com/e-lab-interview-wafer-space-founder-aims-to-make-custom-silicon-accessible-again/
	403	https://www.reddit.com/r/chipdesign/
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/run2-announcement
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/getting-help
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
	id #precision-innovations not found	https://wafer.space/design-help.html#precision-innovations
	id #slice-semiconductor not found	https://wafer.space/design-help.html#slice-semiconductor
https://preview.wafer.space/pr-103/news/tinytapeout-feature
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/gf180mcu-run1-live
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
https://preview.wafer.space/pr-103/news/chip-on-board-strategy
	404	https://inductive-kickback.com/2024/07/kicadunlocked-a-course-for-deep-kicad/
	id #/#gf180mcu:fossi-chat.org not found	https://matrix.to/#/%23gf180mcu:fossi-chat.org
	id #gid=0 not found	https://docs.google.com/spreadsheets/d/1pI2BAEWEexXcXN3vah3SR85zPIV6eAXPGXc2bcvoSGU/edit?gid=0#gid=0

Summary: 0
0 broken links, 1 timeouts, 0
0 HTTP errors

5. Performance Check

  • Page load time: 0.035283s
  • ✅ Load time acceptable

6. Mobile Responsiveness

  • ✅ Viewport meta tag present

Summary

Some verification checks failed


🔍 Automated verification • Run ID: 27127176409 • 2026-06-08T09:10:09.604Z

@mithro
mithro merged commit 2f4081d into main Jun 8, 2026
4 of 5 checks passed
@mithro
mithro deleted the ci/muffet-rate-limit branch June 8, 2026 09:21
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.

1 participant