From 768f37575035161c8ed6437283786e980caa6e01 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Tue, 1 Sep 2026 16:18:09 +1000 Subject: [PATCH 1/2] TEMP: probe FRED endpoints from a GitHub runner (do not merge) --- .github/workflows/fred-probe.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/fred-probe.yml diff --git a/.github/workflows/fred-probe.yml b/.github/workflows/fred-probe.yml new file mode 100644 index 0000000..e5a015d --- /dev/null +++ b/.github/workflows/fred-probe.yml @@ -0,0 +1,24 @@ +# TEMPORARY diagnostic — never merge. Which FRED endpoints answer from a +# GitHub-hosted runner, and with which user agent? +name: fred-probe +on: + workflow_dispatch: +jobs: + probe: + runs-on: ubuntu-latest + steps: + - name: fredgraph.csv and the API, several user agents, 25s cap each + run: | + probe () { + printf '%-70s %-22s ' "$1" "$2" + curl -sS -o /dev/null -m 25 -A "$2" -w "http %{http_code} %{size_download}B %{time_total}s\n" "$1" || echo "FAILED (curl exit $?)" + } + U="https://fred.stlouisfed.org/graph/fredgraph.csv?id=UNRATE" + probe "$U" "qeld-builder" + probe "$U" "python-urllib/3.12" + probe "$U" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/128 Safari/537.36" + probe "$U" "curl/8.5.0" + probe "https://fred.stlouisfed.org/data/UNRATE.txt" "qeld-builder" + probe "https://api.stlouisfed.org/fred/series/observations?series_id=UNRATE&file_type=json" "qeld-builder" + probe "https://fred.stlouisfed.org/series/UNRATE" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/128 Safari/537.36" + echo "--- runner egress IP: $(curl -s -m 10 https://api.ipify.org)" From ab46733fb0b73c3720864f8a24b19aba812da7aa Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Tue, 1 Sep 2026 16:19:10 +1000 Subject: [PATCH 2/2] TEMP: FRED probe step (probe branch only, do not merge) --- .github/workflows/consumed-file-check.yml | 28 +++++++++++++++++++++++ .github/workflows/fred-probe.yml | 24 ------------------- 2 files changed, 28 insertions(+), 24 deletions(-) delete mode 100644 .github/workflows/fred-probe.yml diff --git a/.github/workflows/consumed-file-check.yml b/.github/workflows/consumed-file-check.yml index 6d6a713..7e07834 100644 --- a/.github/workflows/consumed-file-check.yml +++ b/.github/workflows/consumed-file-check.yml @@ -52,3 +52,31 @@ jobs: echo "::error file=CATALOG.md::CATALOG.md is stale. A manifest changed without regenerating the catalog — run 'python scripts/build_catalog.py' and commit the result." exit 1 } + + # TEMPORARY diagnostic (probe branch only, never merge): which FRED + # endpoints answer from a GitHub-hosted runner, with which user agent? + - name: FRED probe + run: | + probe () { + printf 'PROBE %-75s %-20s ' "$1" "$2" + curl -sS -o /dev/null -m 25 -A "$2" -w "http %{http_code} %{size_download}B %{time_total}s\n" "$1" || echo "FAILED (curl exit $?)" + } + U="https://fred.stlouisfed.org/graph/fredgraph.csv?id=UNRATE" + probe "$U" "qeld-builder" + probe "$U" "Python-urllib/3.12" + probe "$U" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/128 Safari/537.36" + probe "$U" "curl/8.5.0" + probe "https://fred.stlouisfed.org/data/UNRATE.txt" "qeld-builder" + probe "https://api.stlouisfed.org/fred/series/observations?series_id=UNRATE&file_type=json" "qeld-builder" + echo "PROBE egress IP: $(curl -s -m 10 https://api.ipify.org)" + echo "PROBE python urllib, qeld-builder UA, 25s timeout:" + python - <<'PY' + import urllib.request, time + for ua in ['qeld-builder', 'Python-urllib/3.12', 'Mozilla/5.0']: + t=time.time() + try: + r=urllib.request.urlopen(urllib.request.Request('https://fred.stlouisfed.org/graph/fredgraph.csv?id=UNRATE', headers={'User-Agent': ua}), timeout=25) + print(f'PROBE urllib {ua!r}: {r.status} {len(r.read())}B {time.time()-t:.1f}s') + except Exception as e: + print(f'PROBE urllib {ua!r}: {type(e).__name__} {str(e)[:60]} after {time.time()-t:.1f}s') + PY diff --git a/.github/workflows/fred-probe.yml b/.github/workflows/fred-probe.yml deleted file mode 100644 index e5a015d..0000000 --- a/.github/workflows/fred-probe.yml +++ /dev/null @@ -1,24 +0,0 @@ -# TEMPORARY diagnostic — never merge. Which FRED endpoints answer from a -# GitHub-hosted runner, and with which user agent? -name: fred-probe -on: - workflow_dispatch: -jobs: - probe: - runs-on: ubuntu-latest - steps: - - name: fredgraph.csv and the API, several user agents, 25s cap each - run: | - probe () { - printf '%-70s %-22s ' "$1" "$2" - curl -sS -o /dev/null -m 25 -A "$2" -w "http %{http_code} %{size_download}B %{time_total}s\n" "$1" || echo "FAILED (curl exit $?)" - } - U="https://fred.stlouisfed.org/graph/fredgraph.csv?id=UNRATE" - probe "$U" "qeld-builder" - probe "$U" "python-urllib/3.12" - probe "$U" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/128 Safari/537.36" - probe "$U" "curl/8.5.0" - probe "https://fred.stlouisfed.org/data/UNRATE.txt" "qeld-builder" - probe "https://api.stlouisfed.org/fred/series/observations?series_id=UNRATE&file_type=json" "qeld-builder" - probe "https://fred.stlouisfed.org/series/UNRATE" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/128 Safari/537.36" - echo "--- runner egress IP: $(curl -s -m 10 https://api.ipify.org)"