Fix #119: milestone picker + milestone issue links #128
No reviewers
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 milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
crueber/walhub!128
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/issue-119"
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 #119 (no way to add a milestone to an issue).
Issue sidebar: new
MilestonePicker(web/src/components/MilestonePicker.jsx) mirroring the LabelPicker+idiom — radio rows per repo milestone plus aNo milestoneclear row, PATCH on select (web/src/lib/milestones.jshelpers,node --testcovered), triage-gated like labels, Esc/outside-click close with focus restore, dark+light via shared classes. Sidebar shows the milestone title (bare-id fallback for deleted milestones).Milestone page: each milestone now lists/links its issues via the existing server-side
milestone=list filter (no client-side filtering); the title links to the filtered issue list. Counts were already server-derived.Backend fix (required for the clear option):
PATCH .../issues/{num}with explicit{"milestone": null}silently no-op'd — encoding/json maps null onto a nil**string, indistinguishable from an absent key. The handler now decodes the key as a valuejson.RawMessage(absent=nil, null=clear, string=set, else 400). Covered byTestPatchIssueMilestoneHTTP; package coverage 96.2% (gate 95%).Verification:
node --test web/test/unit/*.test.js270/270;go test ./internal/issues/ -raceclean;go vet+ gofmt clean; headless-Chrome CDP drive (assign via picker, visible on issue + milestone page counts/link, both themes, clear back to none, server state confirmed via API). Only console entries are pre-existing 404s for unwired optional endpoints (/api/social, /api/tasks, lane root) on origin/main — untouched by this diff. Docs/features/02_issues.md updated in-change (11 table + Wave B notes).Issue sidebar gets a MilestonePicker (+ dropdown mirroring LabelPicker: radio rows per repo milestone + No-milestone clear row, PATCH on select, triage-gated, Esc/outside-click, dark+light). Sidebar shows the milestone title (bare id fallback for deleted milestones). Milestone page lists/links each milestone's issues via the existing server-side milestone= list filter (+ title link to the filtered list). Backend: PATCH .../issues/{num} now distinguishes explicit null (clear) from an absent milestone key (no-op) via value json.RawMessage — encoding/json maps null onto a nil **string, so clear silently no-op'd before. Docs/features/02_issues.md (11, Wave B notes) updated in-change.