- Gitea Actions workflow with parallel TypeScript and Rust jobs
- TypeScript: bun install, lint, typecheck, test
- Rust: fmt check, clippy, test with Tauri system deps
- Add rust-toolchain.toml to pin Rust 1.93.0 for reproducibility
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- src/lib/searchQuery.ts: query parsing (ticker vs company name), form
type constants, filing item filtering, and error message builders
- src/lib/searchQuery.test.ts: 32 tests covering query classification,
form type validation, filter toggling, and error messages
- FilingsPanel: quick-filter chips for common SEC form types (10-K,
10-Q, 8-K, 20-F, etc.) with toggle behavior
- FilingsPanel.test.tsx: 10 tests including new form type commands and
chip rendering
- src/hooks/useQueryHistory.ts: localStorage-persisted command history
with deduplication and search (max 50 entries)
- src/hooks/useQueryHistory.test.ts: 5 tests for deduplication logic
Co-Authored-By: Paperclip <noreply@paperclip.ing>
- Replace textarea with Tiptap-based ResearchEditor in research capture modal and memo workbench
- Add chat history sidebar with restore-to-tab functionality and workspace preferences
- Add period range selectors to Balance Sheet and Cash Flow panels
- Add research workspace rename, archive, stage management, and search API integration
- Refactor SEC EDGAR service for multi-period fetch with mapping support
- Add agent artifacts, background jobs, and prompts modules
- Fix inline mapping editor ISO date validation and mapping modal formula validation
- Improve ConfirmDialog overflow handling and SettingsPage workspace preferences
- Add MemoOutlineRail drag-and-drop reordering
- Propagate formula evaluation failures as warnings instead of hard errors
- Populate AvailableXbrlConcept.value from XBRL fact numeric values
- Fix topological sort in-degree direction bug for formula dependency ordering
- Fix mappings refresh to skip non-earnings panels instead of returning null
- Parse cached formula ASTs on service startup to catch parse errors early
- Refactor CommandInput: move command shadow below input for cleaner layout
- Render mapping warnings in EarningsPanel footer
- Fix data consistency bug where replace_ghosts_for_workspace returned
stale unmutated ghost data instead of the DB-persisted versions
- Replace 11 RwLock .unwrap() calls with proper error propagation via
read_cache/write_cache helpers to prevent lock poisoning panics
- Add error logging to 3 silently swallowed spawn/scheduler errors
- Replace per-call Vec allocation in get_function with match statement
- Cache 6 regex compilations as LazyLock<Regex> statics
- Cache stop-words BTreeSet and common concepts as LazyLock statics
- Fix O(n*m) merge_unique with HashSet-based membership testing
- Eliminate clone chains in mapping CRUD via ownership transfer
- Change String params to &str where only reading (import_mappings, import)
- Restructure resolver to nested HashMap for zero-alloc borrowed lookups
- Use Arc<str> for streaming event IDs to avoid per-event String clones
- Replace to_ascii_lowercase with eq_ignore_ascii_case (zero-alloc)
- Remove intermediate Vec<f64> allocation in chart summarization
- Add #[non_exhaustive] to public error enums (AppError, ResearchError)
- Implement std::str::FromStr for TargetField instead of inherent method
- Remove 9 unnecessary .to_string() on const store keys
- Add #[must_use] to ~20 pure functions across all modules
- Fix double-clone in save_job, useless_format, needless_borrow,
unnecessary_map_or, and ambiguous boolean expression
Add calculated values for gross_profit_margin, operating_margin, and
other_operating_expenses to provide more comprehensive financial data
matching fiscal.ai methodology.
Implementation:
- Add calculate_gross_profit_margin() function for (Gross Profit / Revenue) × 100
- Add calculate_operating_margin() function for (Operating Profit / Revenue) × 100
- Add calculate_other_operating_expenses() to derive from components
- Include comprehensive unit tests with edge case coverage
Safety features:
- Null propagation using ? operator for missing data
- Division protection with f64::EPSILON checks
- Proper handling of negative values (losses)
- Semantic distinction between Some(0.0) and None
Validation: MSFT FY2024 data shows 68.8% gross margin and 45.6%
operating margin, matching fiscal.ai calculations.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Remove ~400 lines of unused code from facts.rs that was left behind after
migrating to the filing-native XBRL approach for the /em command.
- Remove dead earnings functions (build_earnings_periods, etc.)
- Remove unused utility functions (month_abbreviation, duration_value_for_period, etc.)
- Remove unused concept constants (BASIC_EPS_CONCEPTS, COST_OF_SALES_CONCEPTS, etc.)
- Simplify OverlayPeriodKind enum to only keep Any variant
- Fix unused variable warnings in dei.rs and types.rs
- Update test mocks to remove obsolete fields
Result: 0 compiler warnings (down from 35)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove crabrl dependency completely:
- Remove crabrl from Cargo.toml dependencies
- Remove crabrl Parser usage from facts.rs and xbrl.rs
- Remove latestXbrlParsed field from SourceStatus across TypeScript and Rust
Improve DEI fiscal period extraction:
- Add fallback logic for missing DEI facts in filings
- Add helper functions to extract fiscal year from period end dates
- Add helper functions to infer fiscal period from filing dates
- Update test fixtures to include proper DEI facts
- Make extraction more robust by using context period information
This fixes the "No eligible annual filings were found for MSFT" error
by making the DEI extraction more tolerant of incomplete metadata.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Introduce comprehensive CSS variable token system with RGB color values for better opacity handling
- Add terminal-based component variants (bg, border, text, spacing)
- Implement hard-corner component language (border-radius: 0 globally enforced)
- Add research-specific design tokens for workspace components
- Introduce status-aware color tokens (info, success, error, warning)
- Add Tailwind v4 integration with @theme inline configuration
- Create new terminal components: TerminalBadge, TerminalCard, TerminalInput
- Improve mobile responsiveness with touch-friendly targets (44px min) and better spacing
- Enhance accessibility with improved focus states and keyboard navigation
- Add comprehensive responsive breakpoints (xs, sm, md, lg)
- Maintain backward compatibility with legacy CSS variable aliases
- Update all existing components to use new design tokens
This establishes a cohesive design foundation that unifies the terminal,
research, and panel components under a single linear token system while
maintaining the application's distinct technical aesthetic.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix critical event subscription bug causing stale state when switching workspaces
- Add research notes display to portfolio holdings with expandable note previews
- Implement getNotesByTicker backend command for fetching notes by symbol
- Add portfolio context to terminal tabs showing active portfolio name
- Convert research capture bar to space-saving modal dialog
- Add "New Note" button to research toolbar for quick access
- Improve portfolio switching UX with visual indicators and clear labeling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add overflow-x-hidden to prevent horizontal scrolling at container level
- Add break-words to content container for proper word breaking
- Add break-words to plain text and markdown rendering
- Add break-all to links and inline code for long content
- Ensure all content stays within viewport width
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>