Found reviewing PR #144 (round 10). Not a defect in that PR's diff — a cost its correctness fix makes permanent for one class of repo, worth fixing in a PR that is about it.
What #144 does
/internal/* refuses to serve any partial and 503s instead. The rationale is right: a partial with firstRelease: null renders as a definite "not yet released", and a partial with a firstRelease carries the gallop hit whose bisect confirmation the deadline cut short. Neither may be pinned into a 24h OG card, and an OG card cannot render the best-effort caveat the result card does.
The cost
gitlab.gnome.org/GNOME/gimp (large tag set, relayed through the single-instance Anubis container) routinely returns partial with a gallop firstRelease. After #144:
- unfurl → 503 → web-og renders the neutral placeholder at
max-age=60
- 60s later the crawler retries; the recorded partial has just aged past
HARD_TTL_PARTIAL (resolve.ts:38 — also 60), so unpinnable forces a recompute
- another full
findRelease out to the 28s hard deadline, another partial, another 503
HARD_TTL_PARTIAL and web-og's placeholder max-age are both 60 seconds, so the two cadences coincide: the "throttled to one traversal per 60s per key" property internal.ts claims is real but buys nothing against a crawler asking once a minute. Net effect for a deadline-heavy repo:
- the OG card never converges — permanently the neutral placeholder
- upstream load for that key goes from ~0 to one full traversal per minute, for as long as the URL is being unfurled, on the shared token and through a
max_instances = 1 relay DO
Before #144 the route cached the gallop tag flat for 30 minutes, so the card rendered something.
Sketch of a fix
Serve the gallop-hit shape but have web-og short-cache it rather than long-cache it. The pin duration is web-og's result ? longCache : shortCache; /internal/* could influence it with a response header (e.g. an explicit cache-control or an x-released-partial: 1 web-og keys off). That restores a card with content while keeping it revalidatable, instead of trading a possibly-wrong 24h pin for a permanently blank one.
Adjacent to #151 (the OG card's cache policy for non-terminal answers) — likely the same change. The firstRelease: null shape should keep 503ing regardless; only the gallop-hit shape is in question.
Found reviewing PR #144 (round 10). Not a defect in that PR's diff — a cost its correctness fix makes permanent for one class of repo, worth fixing in a PR that is about it.
What #144 does
/internal/*refuses to serve anypartialand 503s instead. The rationale is right: a partial withfirstRelease: nullrenders as a definite "not yet released", and a partial with afirstReleasecarries the gallop hit whose bisect confirmation the deadline cut short. Neither may be pinned into a 24h OG card, and an OG card cannot render the best-effort caveat the result card does.The cost
gitlab.gnome.org/GNOME/gimp(large tag set, relayed through the single-instance Anubis container) routinely returnspartialwith a gallopfirstRelease. After #144:max-age=60HARD_TTL_PARTIAL(resolve.ts:38— also 60), sounpinnableforces a recomputefindReleaseout to the 28s hard deadline, another partial, another 503HARD_TTL_PARTIALand web-og's placeholdermax-ageare both 60 seconds, so the two cadences coincide: the "throttled to one traversal per 60s per key" propertyinternal.tsclaims is real but buys nothing against a crawler asking once a minute. Net effect for a deadline-heavy repo:max_instances = 1relay DOBefore #144 the route cached the gallop tag flat for 30 minutes, so the card rendered something.
Sketch of a fix
Serve the gallop-hit shape but have web-og short-cache it rather than long-cache it. The pin duration is web-og's
result ? longCache : shortCache;/internal/*could influence it with a response header (e.g. an explicitcache-controlor anx-released-partial: 1web-og keys off). That restores a card with content while keeping it revalidatable, instead of trading a possibly-wrong 24h pin for a permanently blank one.Adjacent to #151 (the OG card's cache policy for non-terminal answers) — likely the same change. The
firstRelease: nullshape should keep 503ing regardless; only the gallop-hit shape is in question.