Array response from Gitea now returns "path X is a directory, not a file — use dir_list" instead of a JSON unmarshal panic
Notes
repo_tree always uses recursive=true — agents need the full tree; partial trees require SHA traversal which adds round-trips
repo_topics_update is a full replacement (Gitea's API is PUT, not PATCH)
file_read fix is in the client layer (GetFileContents) so dir_list also benefits
task check passes (lint + race test + vet + govulncheck).
## What
Batch 2 of the v0.2 sprint — quality-of-life tools.
### Changes
| Issue | Change | Detail |
|-------|--------|--------|
| #14 | `repo_tree` | `GET /git/trees/{ref}?recursive=1` — full file tree in one call |
| #18 | `repo_topics_update` | `PUT /repos/{owner}/{repo}/topics` — replaces topic list |
| #15 | `file_read` dir-path fix | Array response from Gitea now returns `"path X is a directory, not a file — use dir_list"` instead of a JSON unmarshal panic |
### Notes
- `repo_tree` always uses `recursive=true` — agents need the full tree; partial trees require SHA traversal which adds round-trips
- `repo_topics_update` is a full replacement (Gitea's API is PUT, not PATCH)
- `file_read` fix is in the client layer (`GetFileContents`) so `dir_list` also benefits
`task check` passes (lint + race test + vet + govulncheck).
repo_tree: GET /git/trees/{ref}?recursive=1 — full recursive file tree
repo_topics_update: PUT /repos/{owner}/{repo}/topics — replace topic list
file_read: detect array response and return descriptive error for dir paths
mathias
merged commit a69d3a8b76 into main2026-05-15 08:24:35 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Batch 2 of the v0.2 sprint — quality-of-life tools.
Changes
repo_treeGET /git/trees/{ref}?recursive=1— full file tree in one callrepo_topics_updatePUT /repos/{owner}/{repo}/topics— replaces topic listfile_readdir-path fix"path X is a directory, not a file — use dir_list"instead of a JSON unmarshal panicNotes
repo_treealways usesrecursive=true— agents need the full tree; partial trees require SHA traversal which adds round-tripsrepo_topics_updateis a full replacement (Gitea's API is PUT, not PATCH)file_readfix is in the client layer (GetFileContents) sodir_listalso benefitstask checkpasses (lint + race test + vet + govulncheck).repo_tree: GET /git/trees/{ref}?recursive=1 — full recursive file tree repo_topics_update: PUT /repos/{owner}/{repo}/topics — replace topic list file_read: detect array response and return descriptive error for dir paths