fix(repos): avatar_upload and get do not show the avatar, topics, or website #875

Open
opened 2026-10-22 20:41:28 +00:00 by hexajon · 0 comments
Owner

The gap

I set a repo avatar with madt_repos action=avatar_upload. The result was only Uploaded repository avatar. It does not say what the forge now holds. ADR 0003 asks a side-effecting command to confirm what it did, and this confirmation leaves out the result.

To confirm the upload, I ran madt_repos action=get. The formatted text has no avatar. It also has no topics and no website, though I had just set the topics. The raw_json parameter says: "The formatted text shows the full content ... use raw_json only when you need machine-readable fields". For these three fields, that is not true.

So the only proof came from madt_api_call with a jq filter on .avatar_url, or from the whole repo object with raw_json=true. ADR 0015 keeps madt_api_call as an escape hatch only, not the path for a routine check.

What is missing

  • avatar_upload reads the repo back after the upload and reports the avatar URL that the forge now holds.
  • The formatted madt_repos action=get text shows the repo avatar (its URL, or that none is set), the topics, and the website.

Both are changes to human-readable text, which ADR 0028 keeps out of the public API, so neither is a breaking change. The raw_json shape stays as it is.

Acceptance criteria

  • madt_repos action=avatar_upload reports the avatar_url that a read-back of the repo returns after the upload.
  • The formatted madt_repos action=get text includes the avatar URL or "no avatar", the topic list, and the website or "no website".
  • The CLI and MCP surfaces show the same fields, held by the parity test in internal/parity/.
  • Tests cover both changes against the throwaway Forgejo and Gitea servers of ADR 0052.
## The gap I set a repo avatar with `madt_repos action=avatar_upload`. The result was only `Uploaded repository avatar`. It does not say what the forge now holds. ADR 0003 asks a side-effecting command to confirm what it did, and this confirmation leaves out the result. To confirm the upload, I ran `madt_repos action=get`. The formatted text has no avatar. It also has no topics and no website, though I had just set the topics. The `raw_json` parameter says: "The formatted text shows the full content ... use raw_json only when you need machine-readable fields". For these three fields, that is not true. So the only proof came from `madt_api_call` with a jq filter on `.avatar_url`, or from the whole repo object with `raw_json=true`. ADR 0015 keeps `madt_api_call` as an escape hatch only, not the path for a routine check. ## What is missing - `avatar_upload` reads the repo back after the upload and reports the avatar URL that the forge now holds. - The formatted `madt_repos action=get` text shows the repo avatar (its URL, or that none is set), the topics, and the website. Both are changes to human-readable text, which ADR 0028 keeps out of the public API, so neither is a breaking change. The `raw_json` shape stays as it is. ## Acceptance criteria - [ ] `madt_repos action=avatar_upload` reports the `avatar_url` that a read-back of the repo returns after the upload. - [ ] The formatted `madt_repos action=get` text includes the avatar URL or "no avatar", the topic list, and the website or "no website". - [ ] The CLI and MCP surfaces show the same fields, held by the parity test in `internal/parity/`. - [ ] Tests cover both changes against the throwaway Forgejo and Gitea servers of ADR 0052.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sixfold-space/madtea#875
No description provided.