Design around Issue milestones #132
Labels
No labels
actions
bug
cli
duplicate
enhancement
fork
forum
git storage
help wanted
insights
invalid
issues
moderation
oidc
ownership transfer
packages
pr/merge protection rules
projects
pull requests
question
releases
sponsorships
tags
webhooks
wiki
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub#132
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
It says "anon added this to the “000001” milestone · 2026-09-05 14:29Z"
It should be the name of the milestone, not the id number
There is no way to remove it from the milestone once added. There needs to be a way to remove it.
Fixed by #136 (not merged — needs review): system lines now show the milestone title ("v1.1") instead of the id, resolved via the cached milestones list with bare-id fallback for deleted milestones. Removal verified working end to end: the + dropdown's "No milestone" row clears via PATCH null — no picker change needed. Details + test results in the PR.
PR #136 review (fix/issue-132 @
86c76ae) — reviewed the diff + full verify in scratch worktree /tmp/opencode/wt132 (pre-existing, left in place).BEFORE shot confirms the bug: timeline reads
anon added this to the "000001" milestonewhile the sidebar shows V1.1. This PR resolves exactly that.found?.title ?? id); undefined/empty list falls back the same way via(milestones ?? [])(milestones.js:17). Tests cover all three (issue-events.test.js:63-98). Transient bare-id first paint (cache not yet loaded → [] → bare id, then reactive re-render with titles): ACCEPTABLE — suspending timeline rows on the milestones fetch would hold the whole timeline hostage for one fragment kind, and the sidebar has the identical transient (Issue.jsx:392 same helper, same source). Consistent, self-heals, no extra complexity justified.textFor={(ev) => eventText(ev, allMilestones())}). allMilestones() is a signal read of the single page-ownedmilestones:{o}/{r}useData cache (Issue.jsx:53-54); the fetch happens once per page, the closure just re-reads it per row. ThreadTimeline calls textFor(ev) once per row (ThreadTimeline.jsx:26,31) — signature compatible.Verify: node --test web/test/unit/*.test.js → 297 pass / 0 fail; vite build clean (SPA 345.85 kB + repos.js SDK bundle). No fixes pushed (nothing functional to fix).
MERGE RECOMMENDATION: ready to merge.
Fixed by PR #136 (review clean; titles resolved with fallbacks, removal verified working; 297/297 node tests), merged. Closing.