Skip to content

feat(slice-005): tab bar + empty Portfolio tab#6

Merged
fredericomozzato merged 6 commits into
mainfrom
feat/005-tab-bar-empty-portfolio-tab
Apr 12, 2026
Merged

feat(slice-005): tab bar + empty Portfolio tab#6
fredericomozzato merged 6 commits into
mainfrom
feat/005-tab-bar-empty-portfolio-tab

Conversation

@fredericomozzato
Copy link
Copy Markdown
Owner

Summary

  • Introduces two-tab shell: AppModel becomes a lean root/router; all markets logic extracted to MarketsModel in markets.go
  • Adds minimal PortfolioModel (empty state: "no portfolios — press n to create one")
  • Tab switching via Tab / Shift+Tab / 1 / 2; suppressed when InputActive() returns true

Test Plan

  • make check passes — gofumpt clean, golangci-lint 0 issues, all tests race-clean, govulncheck clean
  • 17 AppModel tests: tab switching, quit, window size propagation
  • 40 MarketsModel tests: cursor, refresh, tick, status bar, load/seed logic
  • 6 PortfolioModel tests: empty state, window size, input suppression
  • QA revision-1 findings resolved: removed redundant terminal size guard from MarketsModel.View(), consolidated duplicate context.Background() test vars

🤖 Generated with Claude Code

fredericomozzato and others added 6 commits April 11, 2026 20:15
- Refactor AppModel into thin root/router model with tab switching
- Extract MarketsModel with all markets-specific state and logic
- Add PortfolioModel with empty state placeholder
- Implement tab bar rendering with active/inactive styling
- Add Tab/Shift+Tab/1/2 for tab navigation
- Add global q/Ctrl+C quit handling
- Suppress tab switching when child input is active (InputActive method)
- Propagate WindowSizeMsg to children with height-1 for tab bar
- Add comprehensive tests for all new functionality
…x skill

- Move docs/reviews/NNN-name.md → docs/reviews/NNN-name/revision-1.md for all 4 slices
- Update 005 revision-1 frontmatter: status open → in_progress (new lifecycle)
- Add .claude/skills/fix/SKILL.md: resolves OPEN findings highest-severity first,
  each fix is one atomic commit, gates on make check, marks revision done when complete
- Update .claude/skills/qa/SKILL.md: create per-revision files instead of appending,
  status lifecycle: in_progress → done (fix) | passed (clean qa)

Status lifecycle: in_progress → done | passed
Token benefit: fix skill reads only the in_progress revision file, never loads history

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…consolidate duplicate test context vars

Closes findings I1 and I2 in docs/reviews/005-tab-bar-empty-portfolio-tab/revision-1.md
…onfirmed

Clean qa pass leaves no file — last done revision stands as audit record.
Revision file is only created when findings exist (status: in_progress).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@fredericomozzato fredericomozzato merged commit 3f38192 into main Apr 12, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant