Commit graph

20 commits

Author SHA1 Message Date
d7e7b76933
add backtest and convergence to tui 2026-05-17 10:37:19 -07:00
63adf6c517
update docs 2026-05-16 12:44:12 -07:00
4761de9d28
move most tabs to new framework 2026-05-14 14:50:36 -07:00
2ed34e6c10
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
0987a61634
land date refactor (similar to money) 2026-05-12 21:40:32 -07:00
e62eb5f0a7
add new Money type with format helpers 2026-05-12 18:00:35 -07:00
bdd827734d
initial implementation of pre-retirement projections/accumulation phase 2026-05-12 16:37:28 -07:00
f9d2148c23
add ability to use imported history data 2026-05-12 10:52:43 -07:00
fad9be6ce8
upgrade to zig 0.16.0
All checks were successful
Generic zig build / build (push) Successful in 2m20s
Generic zig build / deploy (push) Successful in 27s
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
a26470f46a
transaction documentation 2026-05-07 14:50:08 -07:00
cab4c291ad
begin transfer log 2026-05-06 22:10:13 -07:00
d15939a9ad
periodic review: projections --as-of, contributions --since, comparison and tui projections date picker 2026-05-01 15:59:17 -07:00
6991e31bdd
move generation to a build step - comptime just too slow 2026-04-27 21:29:03 -07:00
41208f3732
history view refactor 2026-04-23 16:02:34 -07:00
cb77845086
bump coverage floor again 2026-04-23 07:00:40 -07:00
67c62d1550
bump coverage floor 2026-04-23 02:47:17 -07:00
8561a130e0
initial commit for new portfolio history (UI will change) 2026-04-22 12:40:54 -07:00
c938da2e3c
refactor config/add default files 2026-04-21 12:08:16 -07:00
249b5ec2c4
introduce ZFIN_HOME 2026-04-17 12:19:19 -07:00
4f3f795420
add AGENTS.md/add scripts to gitignore
All checks were successful
Generic zig build / build (push) Successful in 36s
2026-04-11 10:35:50 -07:00