QFrame+Qt.Popup and QDialog popups are unreliable on macOS inside
QDialog parents — they may appear behind the parent or not receive
clicks. Replace with a simple inline QLabel that toggles visibility
when the ? button is clicked. This is the most reliable approach
across all platforms.
- Add self._inline_help QLabel below the mapping input (hidden by default)
- _toggle_inline_help() simply shows/hides the label
- Styled with dark background, blue border, matching the app theme
- No external popup windows needed
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Qt.Popup flag is unreliable on macOS inside QDialog parents — popup may
appear behind the parent or not receive clicks. Replace with a small
QDialog using Qt.Tool|Qt.FramelessWindowHint which is stable on macOS.
- Add explicit close button (✕) in the popup
- Call activateWindow() to ensure popup gets focus
- Position 4px below the help button for visual separation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Native Qt tooltips on macOS are unreliable (delayed or invisible). Replace
with a QFrame popup that appears on click, positioned below the ? button,
and closes when clicking elsewhere (Qt.Popup flag handles ESC and outside-click).
- Store help text in self._help_text instead of setToolTip()
- Add _toggle_help_popup() method: creates/destroys floating QFrame
- Update test to check _help_text attribute instead of toolTip()
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Add QToolButton help icon (?) next to Project Mapping label
- Implement comprehensive tooltip explaining Project ID and Jira Key concepts
- Add inline validation to detect common mistake: entering issue keys (ABC-123) instead of project keys (ABC)
- Add 13 new i18n keys for help text in English, Vietnamese, and Japanese
- Add 15 comprehensive UX tests covering icon presence, tooltip content, validation logic, and accessibility
- Update jira-knowledge-guide.md with help icon reference and setup instructions
- Fix missing _on_paste method that was causing AttributeError
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Phase 9: Extend JiraConnectDialog with Project Knowledge config, mapping, and Sync Now button
- Phase 10: Wire JiraSyncService to CanonicalAuditLogger for sync start/complete/fail events
- Phase 11: Add retrieval regression suite with synthetic corpus and baseline metrics
- Phase 14: Add comprehensive production guide (docs/jira-knowledge-guide.md)
- Fix UI status label references (self.status -> self.conn_status)
- Implement real sync trigger logic in UI using JiraSyncService
Jira Server self-hosted instances (e.g. insight.fsoft.com.vn) reject
Basic Auth with email+API token (403). Auto-detect by hostname:
- *.atlassian.net → Basic Auth (email + API token)
- everything else → Bearer header with Personal Access Token
User pastes PAT into the same 'API token' field in UI Connectors.
Copy of sections VI-IX from Feature_Architecture_Proposal.md
(roadmap, team assignment/KPI, anti-patterns, function migration map).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>