Why
The browser could file, discuss, triage, close, and reopen an issue or a change, but
it could not correct what one of them said. An issue needed vole issue edit, and a
change request’s title or description could not be corrected after it was opened on
either surface. Closes #180.
What changed
- Added
GET/POST /r/{name}/issues/{id}/editand the matching change-request route, each with its own page. - Both pages are offered to the item’s author and to a maintainer. The GET form and the POST handler ask the same capability, and a signed-in stranger gets a 403.
- Issue edits use the existing
metadata.UpdateIssue. Change edits use a newmetadata.SetRequestDetails, which validates the whole record and is not limited to an open request because the prose is not what an approval names. - The writes are audited as
web.issue.editandweb.request.edit, and a change edit re-checks the request tree like the other change writes. - The item page gained an Edit action. Discussion, labels, assignees, checks, and approvals are untouched.
- Documented the browser edit in the issue and change-request docs.
Verification
go test -tags libsqlite3,sqlite_fts5 ./metadata ./server/webgo test -tags libsqlite3,sqlite_fts5 ./server -run '^(TestIssueCanBeClosedAndReopenedInTheBrowser|TestChangeCanBeDiscussedAndClosedInTheBrowser|TestNewIssueAndChangePages|TestIssueAndChangeDetailsCanBeEditedInTheBrowser)$'go vet -tags libsqlite3,sqlite_fts5 ./metadata ./server/web ./servervole workflow checkvole workflow run verify