e3cdd23260df38b8eadd7bc062bc6f0b6b59bd04
create_project_from_template returned files_substituted:null and produced a non-building scaffold. Three root causes, all fixed: 1. Empty branch: /generate omits default_branch, so every SubstituteFile read hit an empty ref and 404'd → nothing substituted. Resolve the branch explicitly (re-fetch the repo; fall back to "main"). The old unit test hid this by mocking default_branch:"main". 2. Incomplete + rename-incapable: substitution ran over a fixed 6-file list that missed cmd/__PROJECT_NAME__/main.go and could not rename the cmd/__PROJECT_NAME__/ directory. Replace with a recursive tree walk: content-substitute every blob, and for any path carrying a placeholder, rename it (POST-create new path + delete old). 3. Stale module host: __MODULE_PATH__ used gitea.d-ma.be (the pre-rename host, which breaks `go mod download` downstream). Use git.d-ma.be. Also: fail loud — if nothing was substituted, populate partial_failure instead of returning silent success (the null that started this). Tests rewritten to drive the tree-walk flow and assert: cmd/ rename (new path POST + old path delete), git.d-ma.be module substitution, empty-generate-branch fallback, and the loud-on-nothing path. Closes #42. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gitea-mcp
Streamable HTTP MCP service exposing Gitea repo operations to Claude apps.
See ~/dev/AI/infra/docs/superpowers/specs/2026-05-04-gitea-mcp-gitops-workflow-design.md.
Quickstart
task setup:hooks # installs .githooks/pre-push — runs task check before every push
task check # context sync + lint + test + vet
task build # produces bin/gitea-mcp
This repo uses Trunk-Based Development. Commit directly to main. The pre-push
hook enforces the quality gate locally; CI re-runs task check on every push.
Languages
Go
98.3%
Shell
1.5%
Dockerfile
0.2%