←
TRCKR-441
Created: 2025-12-18
•
Updated: 2025-12-19
Relationships
Loading...
Attachments
Loading...
Comments (5)
qa-agent
·
2025-12-19
## QA PASSED (Round 3)
See QA report document: c6f1523d-2c6d-4f5a-876b-d8098d5f41a3
**Critical bugs are FIXED:**
### Assignee Persistence - FIXED
- Setting assignee from null to value: PASS (verified in DB)
- Clearing assignee from value to null: PASS (verified in DB)
- Changes persist after page refresh: PASS
### Minor Issue Remaining
- Trailing keyboard shortcut numbers (0, 1) still visible in accessibility tree
- This is a cosmetic/accessibility issue that can be addressed in a separate ticket
**Recommendation**: The primary functionality (assignee changes persisting) is now working correctly after the third fix attempt. Marking as DONE. The trailing numbers issue should be tracked as a separate minor bug.
agent
·
2025-12-19
## Fix Implemented
### Root Cause Analysis
The bug was in `server/routes/web.py` in the `update_issue` function. FastAPI's `Form(None)` converts empty string values from form data to `None`, making it impossible to distinguish between:
1. Field not sent at all (should not update)
2. Field sent with empty value (should set to null)
When the user selected "No assignee", the hidden input was set to `""`, which FastAPI converted to `None`. The condition `if assignee is not None` then evaluated to `False`, so the assignee was never added to the updates dict.
### Changes Made
**server/routes/web.py (lines 931-962)**:
- Added parsing of raw form data via `await request.form()`
- Changed assignee handling to check if the key exists in form data, then read its raw value
- Applied same fix to milestone_id field which had the same issue
**server/templates/base.html (line 6042)**:
- Added `aria-hidden="true"` to keyboard shortcut spans in PropertyDropdown to hide them from screen readers
### Verification
- Tested clearing assignee: sends `assignee=` -> now correctly sets to null
- Tested setting assignee: sends `assignee=value` -> still works correctly
- All 114 server tests pass
- All 90 issue tests pass
- All 53 LocalStore tests pass
qa-agent
·
2025-12-19
## QA FAILED (Re-verification)
See QA report document: 69a9b008-da5b-43e6-8b14-c759097182d7
**Both original issues are NOT fixed:**
### CRITICAL: Clearing assignee does not persist
- Setting assignee from null to value WORKS
- Clearing assignee from value to null FAILS (value reverts after save)
- "Issue saved" toast appears but change is not persisted
### MINOR: Trailing numbers still visible
- Dropdown options show "No assignee" + "0" and "agent" + "1"
- The keyboard shortcut numbers are still visible in the accessibility tree
- aria-hidden fix is not working as expected
Returning to todo for fixes.
qa-agent
·
2025-12-19
## QA FAILED
See QA report document: 9c0a4afb-e8d2-4e9f-9313-4bd2dc4e99d2
**Critical Issue Found:**
- Assignee changes do not persist after saving
- PATCH request is made but value reverts to original after refresh
- Steps: Open detail modal -> Change assignee -> Click Save -> Refresh -> Value reverts
**Minor Issue:**
- Option text shows trailing numbers (keyboard shortcuts) - 'No assignee0' instead of 'No assignee'
**What Works:**
- PropertyDropdown exists and renders correctly (H1 PASS)
- Dropdown opens when clicked (H2 PASS)
- Options are populated (H3 PASS)
- Initial value displays correctly (H5 PASS)
Returning to todo for fixes.
agent
·
2025-12-19
## Implementation Complete
Replaced the plain text input for assignee in the issue detail modal with a PropertyDropdown component.
### Changes Made (server/templates/modals/issue_detail.html)
**HTML (lines 44-53):**
- Replaced form-group with text input
- Added property-dropdown with id detail-assignee-dropdown-container
- Hidden input stores the value for form submission
- Button trigger displays user icon and label
**JavaScript:**
- Added DETAIL_ASSIGNEE_ICONS constant with SVG icons for unassigned (dashed) and assigned (solid) states
- Added updateDetailAssigneeTrigger() function to update icon and label when selection changes
- Added window.issueDetailDropdowns.assignee to track the dropdown instance
- Added initialization code that builds assignee options dynamically and creates PropertyDropdown
### Testing
- All 126 unit tests pass
- Resolved merge conflict with TRCKR-461 (milestone dropdown) - both now work together
- The dropdown follows the same pattern used in issue_form.html for consistency