25cb3eb9c1
gates / gates (push) Successful in 29s
- R-463 CLOSED: rallly, outline, sparkyfitness -> PostgreSQL 18 (catalog 25ffd89 / aeb0cd6 / 1666572), each proven on the bench and on 9202 through the guarded Update with one undo case; zipline, adventurelog, immich stay on 16 by 09 decision 42's rule (upstream runs 16 / 16 / 14). - Part F: bookstack, kimai, audiobookshelf, n8n, navidrome, grafana, komga moved on both venues; immich not (R-732: its first start OOM-killed its database on the bench). - R-687 item 4 PROVEN LIVE on demo-hp: two deferrals while the leg stepped two apps, the whole-guest backup on the first poll after, success; config + window put back and read back. - Catalog currency audit (Part D): 25/53 behind inside a major, 19 across; night-updatable 28 -> 31 (+1). - R-446 and R-440 narrowed (measured on demo-hp); R-624 corrected (outline, rallly, zipline have routes); R-548 note (demo-hp's local tier refused for space since 09-27). - New rows: R-730 (the ISO 1.29.0 build commit cannot be proven -> no tag; installer-v* is the script's line), R-731 (tag-shape switches), R-732. Register 361 -> 364. - 09 §3: the 2026-09-30 operator notes (by day; Tester-2 pre-checks done; decision 52 not needed, not recorded); §6.4 dated currency note. STATUS, CONTEXT, REPORT-pg-last-six-2026-09-30.md. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
33 lines
1.6 KiB
Python
33 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Re-measure the rows 00-currency.py recorded as HTTP 429 (ghcr rate limit), slower, and merge them
|
|
into 01-currency-raw.json. Same functions, same rules; only the pacing differs."""
|
|
import importlib.util, json, sys, time
|
|
sys.argv = ["x", "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu", "."]
|
|
spec = importlib.util.spec_from_file_location("c", "00-currency.py")
|
|
c = importlib.util.module_from_spec(spec); spec.loader.exec_module(c)
|
|
orig = c.S.get
|
|
def slow_get(*a, **k):
|
|
for i in range(8):
|
|
r = orig(*a, **k)
|
|
if r.status_code != 429:
|
|
time.sleep(1.0)
|
|
return r
|
|
wait = int(r.headers.get("Retry-After", "0") or 0) or 20 * (i + 1)
|
|
print("429, waiting", wait, "s"); time.sleep(wait)
|
|
return r
|
|
c.S.get = slow_get
|
|
rows = json.load(open("01-currency-raw.json"))
|
|
for row in rows:
|
|
if "429" not in row.get("error", ""):
|
|
continue
|
|
host, hrepo = c.host_repo(row["repo"])
|
|
tags = c.tags_all(host, hrepo)
|
|
res = c.newest(tags, row["tag"])
|
|
row.pop("error"); row["status"] = "ok"; row["n_tags"] = len(tags); row["pinned_tag_listed"] = row["tag"] in tags
|
|
ba, bm = res["all"], res["maj"]
|
|
row["newest_all"] = ba[0] if ba else None; row["newest_major"] = bm[0] if bm else None
|
|
row["behind_within_major"] = bool(bm and bm[1] > res["cur"]); row["behind_across_major"] = bool(ba and ba[1][0] > res["cur"][0])
|
|
row["major"] = res["cur"][0]; row["retried_after_429"] = True
|
|
print(row["ref"], len(tags), row["newest_major"], row["newest_all"])
|
|
json.dump(rows, open("01-currency-raw.json", "w"), indent=1)
|