2 months ago
c29385fAuto-connect hardcoded private: true for every open-git repo, so the 10 public
run page was disabled even for a plainly public one. A run opened in incognito
said it did not exist.
open-git HAS the data: repositories.visibility is a real column with a
('public','private') check. It just exposes it nowhere — not on the installation
response, not on the installation webhooks, not on the pull-request payload. So
the honest read left is to ask for the page without credentials.
The inference is safe in one direction only, which is why it is written this way
round. 200 means the page is served to nobody in particular, so public. Anything
else means not CONFIRMED public. A private repo answers 404 unauthenticated, so
it can never be read as public; the opposite mistake only hides a run page, and
that is what tripwire already did for every open-git repo.
Sends no credentials on purpose: an installation token would make a private repo
answer 200 and invert the whole thing. Never follows a redirect either, since a
bounce to a sign-in page is a 200 that means the opposite. A network failure is
not evidence, so it fails closed.
Probed concurrently, or a large installation pays one round trip per repo in
series.
Verified against live open-git with one public and one private repo. Both rows
were seeded WRONG first, and the probe corrected only the public one:
boring/playground private (404 unauthenticated)
boring/v2 PUBLIC (corrected)
The proper fix stays open-git's to make, and is gap 3.3 in
docs/opengit-progress.md: send the column they already store.Parent3ac6514