mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-14 02:50:51 +08:00
Move repo facts outside the project payload
Repos need not carry a `xyz.radicle.project` payload; the default branch can come from `xyz.radicle.crefs` alone. Such repos got no counts and no default branch, and failed schema validation in explorer, which broke the parse of a whole listing. httpd: - Add top-level `cobs` with issue, patch and bucketed release counts - Add top-level `defaultBranch`, qualified like the crefs payload - Omit a count the node cannot determine instead of reporting zero - Drop `head`: the tip is `refs[defaultBranch]` - Keep counts in the project payload for older clients until a major release - Keep the project payload when a COB read fails - Keep `meta.releases` a single count: delegate + other - Log and skip canonical ref rules and refs that fail to read, so one bad ref doesn't drop the default branch tip explorer: - Model `cobs` and `defaultBranch`, adapting older nodes to one shape - Resolve the default branch from the crefs HEAD on older nodes - Collect the shims for older httpd in http-client/lib/compat.ts, each naming the httpd release that the client can drop it with - Add `defaultBranchTip`, replacing `head`, with a fallback to the legacy `meta.head` - Make the project payload and its legacy meta optional - Fall back to the RID for the repo name, and show a placeholder for a missing name in repo cards and the header - Hide a counter instead of reading a missing count as zero - Fall back to a full-page check for "More" without counts - Add a `repo.sourceUnavailable` route for repos without a default branch or tip - Browse explicit revisions and offer the branch selector without a default branch - List these repos in repo grids and on the landing page - Say the node is older or built without releases - Scope release pages in the client, so views never call the shims - Read OG worker repos through the same compat shims - Share the repo name and default branch helpers with the OG worker CI: - Add check:open-graph, a wrangler deploy dry run - Run it in GitHub CI, Buildkite and check:ci - Install explorer's dependencies first: the worker resolves compat.ts imports, such as zod, from there Tests: - Test that a build without releases omits the count - Test that one failing rule keeps the others - Test the repo shape across httpd versions and the release shims - Test `hasMorePages` and `repoName` - Test repos without a project payload end to end
This commit is contained in:
@@ -40,13 +40,14 @@ Contract:
|
||||
### Repo facts outside the project payload
|
||||
|
||||
Expand: `cobs`, `releaseCount` and a qualified `defaultBranch` move out of the
|
||||
project payload. The legacy `meta` (counts and `head`) stays inside it. Read by
|
||||
the explorer client and the Open Graph worker.
|
||||
project payload. The legacy `meta` (counts and `head`) stays inside it. Only
|
||||
`repos/:rid` sends the release counts: counting reads every release, so repo
|
||||
lists leave them out. Read by the explorer client and the Open Graph worker.
|
||||
|
||||
Contract:
|
||||
|
||||
- Client, when explorer drops httpd 0.30: `legacyMetaSchema` and
|
||||
`legacyRepoFields` in `http-client/lib/compat.ts`
|
||||
- Client, when explorer drops httpd 0.30: `legacyMetaSchema`,
|
||||
`crefsPayloadSchema` and `legacyRepoFields` in `http-client/lib/compat.ts`
|
||||
- Client, when explorer drops httpd 0.30: `normalizeRepo` in
|
||||
`workers/open-graph/index.js`
|
||||
- Server, a major release: legacy `meta` and `head` in
|
||||
|
||||
Reference in New Issue
Block a user