Commit graph

97 commits

Author SHA1 Message Date
6fbbf48486
add new review command/tab 2026-06-05 13:16:25 -07:00
79ffbeb078
bump size of chart numbers on history tui tab
All checks were successful
Generic zig build / build (push) Successful in 10m28s
Generic zig build / publish-macos (push) Successful in 12s
Generic zig build / deploy (push) Successful in 18s
2026-06-03 07:09:20 -07:00
a3cfc4e4d2 portfolio loading fixes + full lint pass 2026-05-23 09:51:55 -07:00
415123f6a6 single code path for portfolio loading 2026-05-23 08:44:46 -07:00
b92447b8e7 handle multiple portfolio paths - default file name portfolio*.srf 2026-05-21 14:04:59 -07:00
c925a1a07c fix tui command line args and make benchmarks configurable 2026-05-21 12:40:18 -07:00
c410bf97b1 create a set of fetch options and wire it into CLI for flags to work properly 2026-05-21 12:17:48 -07:00
6c32e94ab4 use adjClose for charting 2026-05-19 13:43:52 -07:00
9131cdb62e reorder tabs 2026-05-19 13:30:21 -07:00
987f472226 clean up tui tab framework 2026-05-19 10:22:50 -07:00
f2f0b53009 data refresh policy 2026-05-18 17:58:27 -07:00
0d934b4565 complete tui.zig architectural refactor 2026-05-16 12:01:53 -07:00
d0d1fd8a91 move tab-modals into tabs from global 2026-05-15 17:47:23 -07:00
f6cb902708 begin cleanup on remaining tab/app separation of concerns 2026-05-15 17:05:59 -07:00
f622205a25 get tab-scoped keys into the default keys output 2026-05-15 15:28:50 -07:00
7483da30ac add more tests in tui tabs 2026-05-15 15:18:46 -07:00
f089649b7f extract help logic from presentation/add tests 2026-05-15 13:59:36 -07:00
7ff1d4f833 portfolio tab help cleanup 2026-05-15 13:40:24 -07:00
4d538cc24a begin help cleanup 2026-05-15 13:17:33 -07:00
b31db345ad remove remaining tab-specific keybindings from global space and introduce compile-time checking for conflicts 2026-05-15 11:43:35 -07:00
816653e812 migrate portfolio tab to new keybindings 2026-05-15 11:29:59 -07:00
b8b6dffcb5 migrate projections tab to new keybindings 2026-05-15 10:59:24 -07:00
4948484a46 migrate options tab to new keybindings 2026-05-15 10:53:27 -07:00
b9f4c42b42 migrate history tab to new keybindings 2026-05-15 10:50:22 -07:00
18d3031456 add scoped bindings support in keys.srf 2026-05-15 10:31:42 -07:00
d1478c501b add function for tab local key dispatch and ctrl+f/ctrl+b keybinds 2026-05-15 09:40:02 -07:00
58b23c9fd1 derive tab labels 2026-05-15 08:54:50 -07:00
166e8b4e6b derive tab states from tab modules/remove file level imports 2026-05-15 08:33:32 -07:00
492774c04e migrate portfolio tab to new framework 2026-05-15 08:06:34 -07:00
afe9eacf1d migrate projections tab to new framework 2026-05-14 22:43:28 -07:00
13145590d1 migrate history tab to new framework 2026-05-14 18:29:37 -07:00
e27904df69 perf -> performance 2026-05-14 14:52:53 -07:00
dd6fad9184 move most tabs to new framework 2026-05-14 14:50:36 -07:00
4ffddb44a2 migrate earnings tab to new framework 2026-05-14 11:47:47 -07:00
2431f6a6b1 add TUI framework foundation
We're going to move to an interface-like pattern for tabs to remove a
lot of shared state and UI logic from tui.zig to the individual tabs. It
is not a full interface like Allocator because we do not need dynamic
dispatch here...the tabs are still known by tui.zig. This gives us the
ability to perform comptime evaluation and adherence to the spec.
2026-05-14 10:49:33 -07:00
cf948d607b initial implementation of projections actual (note TODO comments) 2026-05-13 13:05:01 -07:00
80a00009d8 land date refactor (similar to money) 2026-05-12 21:40:32 -07:00
2616209614 add ability to use imported history data 2026-05-12 10:52:43 -07:00
53b807d12e upgrade to zig 0.16.0
IO-as-an-interface refactor across the codebase. The big shifts:
- std.io → std.Io, std.fs → std.Io.Dir/File, std.process.Child → spawn/run.
- Juicy Main: pub fn main(init: std.process.Init) gives gpa, io, arena,
  environ_map up front. main.zig + the build/ scripts use it directly.
- Threading io through everywhere that touches the outside world (HTTP,
  files, stderr, sleep, terminal detection). Functions taking `io` now
  announce side effects at the call site — the smell is the feature.
- date math takes `as_of: Date`, not `today: Date`. Caller resolves
  `--as-of` flag vs wall-clock at the boundary; the function operates
  on whatever date it's given. Every "today" parameter renamed and
  the as_of: ?Date + today: Date pattern collapsed.
- now_s: i64 (or before_s/after_s pairs) for sub-second metadata
  fields like snapshot captured_at, audit cadence, formatAge/fmtTimeAgo.
  Also pure and testable.
- legitimate Timestamp.now callers (cache TTL math, FetchResult
  timestamps, rate limiter, per-frame TUI "now" captures) gain
  `// wall-clock required: ...` comments justifying the read.

Test discovery: replaced the local refAllDeclsRecursive with bare
std.testing.refAllDecls(@This()). Sema-pulling main.zig's top-level
decls reaches every test file transitively through the import graph;
no explicit _ = @import(...) lines needed.

Cleanup along the way:
- Dropped DataService.allocator()/io() accessor methods; renamed the
  fields to drop the base_ prefix. Callers use self.allocator and
  self.io directly.
- Dropped now-vestigial io parameters from buildSnapshot,
  analyzePortfolio, compareSchwabSummary, compareAccounts,
  buildPortfolioData, divs.display, quote.display, parsePortfolioOpts,
  aggregateLiveStocks, renderEarningsLines, capitalGainsIndicator,
  aggregateDripLots, printLotRow, portfolio.display, printSnapNote.
- Dropped the unused contributions.computeAttribution date-form
  wrapper (only computeAttributionSpec is called).
- formatAge/fmtTimeAgo take (before_s, after_s) instead of io and
  reading the clock internally.
- parseProjectionsConfig uses an internal stack-buffer
  FixedBufferAllocator instead of an allocator parameter.
- ThreadSafeAllocator wrappers in cache concurrency tests dropped
  (0.16's DebugAllocator is thread-safe by default).
- analyzePortfolio bug surfaced by the rename: snapshot.zig was
  passing wall-clock today instead of as_of, mis-valuing cash/CDs
  for historical backfills.

83 new unit tests added due to removal of IO, bringing coverage from 58%
-> 64%
2026-05-09 22:40:33 -07:00
91bdd1d648 move ** -> @splat 2026-05-08 12:36:12 -07:00
f7c6224a1b periodic review: projections --as-of, contributions --since, comparison and tui projections date picker 2026-05-01 15:59:17 -07:00
0bf44581e1 tui implementation of compare mode 2026-05-01 10:27:25 -07:00
b241feeaf0 incorporate life events (e.g. social security) into projections 2026-04-30 10:10:44 -07:00
4174e9bc09 hide projections when not in portfolio mode 2026-04-28 15:54:21 -07:00
e5c8f6f144 add graph and set up scrolling 2026-04-28 11:46:17 -07:00
33d5d7cbb4 initial commit projections TUI tab 2026-04-28 10:30:13 -07:00
9af99ef8c8 history view refactor 2026-04-23 16:02:34 -07:00
e68372036d cleanup of _mod imports 2026-04-23 02:01:25 -07:00
9acf3115db dedup the snapshot loading function 2026-04-23 01:25:00 -07:00
5196a320f6 initial tui history implementation 2026-04-23 00:32:18 -07:00