docs: BMAD planning specs and project status - #1
Merged
Conversation
- Product brief, PRD, architecture, and epics (planning phase) - 33 user stories across 9 epics / 4 sprints (implementation phase) - QA report validating artifact completeness and traceability Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
End2EndAI
added a commit
that referenced
this pull request
Mar 27, 2026
…rt, edit-by-default - Wrap note editor in KeyboardAvoidingView so keyboard never covers text (#1, #8) - Set isEditing=true by default without auto-focusing textarea (#9) - Make title TextInput multiline with lineHeight:34 so long titles wrap (#8) - Add native Share sheet via React Native Share API — share button in view mode (#7) - Add '+ Add item' row to ActionItemsList with inline TextInput for action_items format (#4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
End2EndAI
added a commit
that referenced
this pull request
Apr 2, 2026
…rt, edit-by-default - Wrap note editor in KeyboardAvoidingView so keyboard never covers text (#1, #8) - Set isEditing=true by default without auto-focusing textarea (#9) - Make title TextInput multiline with lineHeight:34 so long titles wrap (#8) - Add native Share sheet via React Native Share API — share button in view mode (#7) - Add '+ Add item' row to ActionItemsList with inline TextInput for action_items format (#4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
End2EndAI
added a commit
that referenced
this pull request
Apr 2, 2026
…heckboxes, export, acronym validation (#48) * feat: keyboard/edit UX — fix keyboard coverage, multiline title, export, edit-by-default - Wrap note editor in KeyboardAvoidingView so keyboard never covers text (#1, #8) - Set isEditing=true by default without auto-focusing textarea (#9) - Make title TextInput multiline with lineHeight:34 so long titles wrap (#8) - Add native Share sheet via React Native Share API — share button in view mode (#7) - Add '+ Add item' row to ActionItemsList with inline TextInput for action_items format (#4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: sort notes + default tag preference - Add NoteSort type (date_desc/asc, title_asc/desc); server-side ordering in fetchNotes (#5) - Sort picker bottom-sheet modal in home screen header with active checkmark (#5) - Store defaultTagId in user_preferences via Supabase upsert (migration 019) (#6) - PreferencesContext exposes defaultTagId/setDefaultTagId; home screen applies it on mount (#6) - setDefaultTagId service function for Supabase persistence (#6) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: default filter tag selector in settings Add a tag pill selector in the Tags settings section so users can tap any tag (or None) to set it as their landing filter — persists across sessions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: interactive acronym/term validation after transcription (#2) After Whisper transcribes audio, a GPT-5-nano call flags low-confidence terms (acronyms, proper nouns, brand names). A bottom-sheet modal shows each uncertain term with its suggested correction; users can edit or skip. Confirmed corrections are saved to user_validated_terms (migration 020) and injected into future formatting prompts so the LLM uses the right spelling. - detectUncertainTerms() in edge function: post-transcription GPT pass - validated_terms injected into buildSystemPrompt for format_only mode - AcronymValidationModal: editable pill list with skip-per-term support - saveValidatedTerms / loadValidatedTerms services with Supabase upsert - recording/[id].tsx pauses auto-advance for modal when terms are found Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: resolve 3 bugs found in new features review - AcronymValidationModal: deduplicate uncertain terms by original field to prevent duplicate React keys and repeated entries in the modal - services/notes: add 'id' as secondary sort key in all fetchNotes cases to ensure stable ordering when primary sort values are equal - NotesContext: persist sort preference to AsyncStorage so it survives app restarts instead of always resetting to 'date_desc' Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: restore proper json_schema structured output for uncertain terms detection Switch back from json_object to json_schema with strict mode enabled. Previous strict schema failed silently due to: missing strict:true, invalid type:["string","null"] syntax (must use anyOf), unsupported maxItems, and missing additionalProperties:false at each level. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: inject validated terms into note reformat flow The handleReformat function in note/[id].tsx was calling formatTranscription without loading or passing the user's saved validated terms, so previous acronym corrections were not applied when reformatting an existing note. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: add Saved Terms screen to view and manage validated acronyms - New screen at /acronyms listing all user-confirmed term corrections - Each row shows the original (misheard) term → corrected spelling - Per-term remove button with confirmation dialog - "Clear all" button in the header to wipe all corrections at once - Empty state with explanation of how the feature works - Accessible from Settings > Notes > Saved Terms - Added deleteValidatedTerm / deleteAllValidatedTerms to validatedTerms service Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: pass known terms to transcribe so already-validated acronyms are not re-flagged - transcribeRecording() now accepts knownTerms and forwards them to the edge function - Both auto-advance and manual transcribe paths load existing validated terms before calling - Edge function detectUncertainTerms() skips terms already confirmed by the user - Formatting system prompt clarified: LLM now told to replace misrecognized spellings Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: replace Recordings text button with icon to prevent header overflow The header had three items (sort pill + "Recordings" text + settings circle) that overflowed on standard screen widths, pushing the settings button off-screen. Convert Recordings to a compact 44x44 icon button (three horizontal bars) matching the settings button style. Both icon buttons now share the same iconButton/iconButtonPressed style. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: header overflow, action items UX, sort placement Header: - Move sort control into subtitle row ("10 notes · ↕ Title A→Z"), tappable - Header right side now has only 2 icon buttons (recordings + settings) — no more overflow Action items: - Open in view/checkbox mode by default (not text edit mode) - Add ✕ remove button per item - Unchecked items rendered first; checked items grouped below with a divider - Checked items keep strikethrough; unchecked/checked split updates live Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: drag-to-reorder notes with manual sort mode Adds a 'Manual order' sort option. When selected, notes display with drag handles on the right. Dragging reorders the list and persists the order to AsyncStorage. New notes are appended at the end of the saved order. - types/index.ts: add 'manual' to NoteSort - services/notes.ts: manual sort fetches by date_desc (order applied client-side) - contexts/NotesContext.tsx: manualOrder state, setManualOrder, filteredNotes applies saved order - components/DraggableNoteList.tsx: PanResponder-based drag-to-reorder list - components/NoteGrid.tsx: conditionally renders DraggableNoteList when draggable=true - app/index.tsx: wire up Manual sort option and pass draggable/onReorder to NoteGrid Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: long-press copy, 1-tag AI limit, tag picker on text note creation - Long press a note card to copy title + content to clipboard; card highlights with a 'Copied!' badge for 1.5 s (expo-clipboard) - AI auto-tagging limited to 1 tag per note (was up to 3); manual tagging remains unlimited - Text note creation screen now shows a tag picker at the bottom; selected tags are applied on save Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: crash when selecting manual sort due to undefined manualOrder The session reset setState was missing manualOrder, causing it to be undefined. Added defensive fallback in filteredNotes useMemo as well. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: prevent page refresh on drag, make manual order the default sort - Use React state for scrollEnabled instead of setNativeProps (works on web) - Add Capture variants of PanResponder handlers to intercept events before browser scroll takes over - Default sort changed from date_desc to manual; persisted via AsyncStorage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: reorder mode toggle, fix pull-to-refresh conflict on drag - Drag handles only shown when reorder mode is active (toggle button in header, only visible when sort is Manual order) - Toggle button highlights with primary color when active - Removing RefreshControl from DraggableNoteList and adding bounces=false + overScrollMode=never to prevent pull-to-refresh triggering during drag Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: replace recordings icon with waveform to distinguish from reorder button Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docs/STATUS.md— project status overview and next stepsPlanning Artifacts
docs/planning/product-brief.mddocs/planning/prd.mddocs/planning/architecture.mddocs/planning/epics.mddocs/implementation/sprint-status.yamldocs/implementation/stories/docs/STATUS.mdQA Status
All planning artifacts passed QA review (completeness, traceability, architecture consistency, dependency integrity).
Next Steps
Implementation starts with Sprint 1 — Epic 1 (Project Setup & Infrastructure).
🤖 Generated with Claude Code