IW-426: Route iw feedback to Forgejo instead of the archived GitHub mirror #457
No reviewers
Labels
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli!457
Loading…
Reference in a new issue
No description provided.
Delete branch "IW-426"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes IW-426.
Summary
iw feedbackposted every submission togithub.com/iterative-works/iw-cli, an archivedread-only mirror, so the command always failed with
Repository was archived so is read-only.The one channel for reporting an iw-cli problem was dead. Feedback now goes to Forgejo at
https://code.iterative.works, where the project's issues actually live.Defects fixed
Defect 1 — feedback routed to the archived GitHub mirror.
Feedback.submitnow callsenv.tracker.createForgejoIssueagainstConstants.Feedback.Repositoryat the newConstants.Feedback.BaseUrl, replacing thecreateFeedbackIssue/GitHubClientpath. The--type bug|featureselector is carried in the issue body (analysis Option A), together with theworking directory and branch the feedback was filed from, so a triager sees the provenance without
asking. Body rendering lives in
core/model/FeedbackBody.scala; values interpolated into theprovenance footer are wrapped as markdown code spans so they cannot close the span and render as
live markdown.
Defect 2 — no guidance when the token is missing. A missing
FORGEJO_API_TOKENis now caughtbefore any API call and reports what is unset, where iw-cli files feedback, and what access the
token needs — instead of surfacing a raw API error after the request.
Cleanup (Phase 2). The
createFeedbackIssuelayer that Phase 1 orphaned is removed fromCommandEnv,LiveCommandEnvand theFakeCommandEnvrecorder, and the PURPOSE headers,test/feedback.batsheader and test name no longer describe the command as targeting GitHub.Testing
core/test/FeedbackBodyTest.scala— body rendering, type label, provenance footer, and thecode-span escaping of backticks and newlines.
core/test/FeedbackHarnessTest.scala— the Forgejo call and its arguments, the missing-tokenguard and its exact message, and the reported issue number and URL.
test/feedback.bats— E2E wiring smoke test.create-issue API during Phase 1.
Lessons
Triaged before this PR. Two new tracker issues filed (IW-455 dead test-only helper, IW-456 forge
resolution duplicated across five call sites); two entries matched issues already open (IW-450,
IW-437); one lesson went to the global CLAUDE.md; one is retained as issue context. The decision
ledger is in
project-management/issues/IW-426/LESSONS.md.Release notes
project-management/issues/IW-426/release-notes.md(Czech, for non-technical readers).🤖 Generated with Claude Code
Issue: IW-426 Phase: 1 - Route feedback to Forgejo, with a guided missing-token path This commit marks the checkpoint for phase 1 context generation. Use dx-fix IW-426 to return to this point. 🤖 Generated with Claude CodeRoute feedback to Forgejo, with a guided missing-token path Artifacts: - phase-01-tasks.md 🤖 Generated with Claude CodeIssue: IW-426 Phase: 2 - Clear the stale GitHub assumptions left behind This commit marks the checkpoint for phase 2 context generation. Use dx-fix IW-426 to return to this point. 🤖 Generated with Claude CodeClear the stale GitHub assumptions left behind Artifacts: - phase-02-tasks.md 🤖 Generated with Claude Code