From 354a7e7799b7315511755ec495658a74e807e0fe Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Sat, 27 Jun 2026 12:38:11 -0700 Subject: [PATCH] remove unnecessary todo items --- TODO.md | 83 --------------------------------------------------------- 1 file changed, 83 deletions(-) diff --git a/TODO.md b/TODO.md index bb76851..056d79b 100644 --- a/TODO.md +++ b/TODO.md @@ -39,9 +39,6 @@ ranking; unlabeled items are "someday, if the mood strikes." market return vs contributions" annotation would clarify how much of the trajectory was the model being right vs new money arriving on schedule. - - Mosaic mode: overlay multiple as-of starting points on one chart - ("show me 1Y, 3Y, 5Y, 10Y projections all at once") so the user - can see how the projection envelope tightened as data came in. - **Better composition basis for imported-only as-of.** Today the imported-only path uses today's allocations scaled by `imported_liquid / today_total_liquid`. That's the simplest @@ -70,38 +67,6 @@ ranking; unlabeled items are "someday, if the mood strikes." faithfulness one notch. Pick whichever has the highest payoff vs. complexity when this gets revisited. -## `--export-chart` follow-ups - priority LOW - -V1 of `--export-chart ` shipped for `quote`, `projections` -(bands, `--convergence`, and `--return-backtest` modes), and -`history`. Two adjacent surfaces still don't have PNG export: - -- **`projections --vs `.** No chart at all in this mode - (text-only delta table); `--export-chart` rejected at parse - time. Could grow a side-by-side bands comparison chart, but - that's a feature of its own - not just an export plumbing job. -- **Theme overrides at export time.** Today the export always - uses `theme.default_theme`. A `--theme ` flag at export - time would let users render with their configured theme or a - presentation-friendly one. Out of scope for V1; gate when - someone asks for it. - -## Refactor: trim `src/format.zig` once Money / Date have absorbed their helpers - priority LOW - -`src/format.zig` is still a ~1600-line grab-bag, but the money- and -date-shaped helpers that used to live there have been moved out: -money formatting now lives in `src/Money.zig` (with `{f}` / -`whole()` / `trim()` / `signed()` / `padRight(N)` / `padLeft(N)`), -date formatting lives in `src/Date.zig` (with `{f}` / -`padRight(N)` / `padLeft(N)`), and the braille sparkline chart now -lives in `src/charts/braille.zig`. What's left in `format.zig` is -the genuinely-format-domain stuff: return formatters, allocation -notes, signed-percent rendering. - -If the file ever grows enough to be annoying again, consider -renaming to `src/render.zig` to better describe what's left. -Not blocking - file it as cleanup if and when it bites. - ## Investigate: detailed 401(k) contributions data source Found a more detailed contributions screen on at least one @@ -130,46 +95,6 @@ opts ESPP/HSA accounts into cash-based attribution. Related: ESPP-style accrual blind spot in the "Audit: manual-check accounts mechanism" section above. -## Torn SRF files from server sync (root cause unknown) - -**Status:** Root cause still unidentified. We have mitigations and -diagnostics in place that keep torn responses from corrupting the -cache, but we don't yet know *why* responses arrive torn. Until we -have a root cause, this is not resolved - it's mitigated. - -Mitigations landed so far: - -- `syncFromServer` (`src/service.zig`) validates responses via - `cache.Store.looksCompleteSrf` before `writeRaw`. Torn HTTP bodies - (empty, missing `#!srfv1` header, or no trailing newline) are - rejected with a warn-level log and NOT written to cache. -- HTTP responses are checked for an `ETag` sha256 header; on mismatch - we retry the request once before giving up and falling back to the - provider. -- Read-path self-heal: on SRF parse failure during read, the cache - entry is invalidated so a subsequent refresh can repair without - user intervention. -- Diagnostics: richer error capture around the sync path. So far, - HTTP transit is the dominant source of torn responses - but that's - an observation, not a root cause. - -**Remaining work:** - -- Identify root cause. Candidates to investigate: proxy/load-balancer - behavior, HTTP keepalive reuse, partial reads on the server side, - client-side buffer handling. The etag retry tells us whether the - problem is per-request or persistent; dig into the diagnostics - output when the next occurrence is captured. -- Once root cause is known, decide whether the current mitigations - are sufficient or whether a targeted fix is needed. The - mitigations may end up being the whole answer, but we can't - conclude that without understanding the underlying cause. - -(Content-Length validation was considered and rejected: once the -server starts compressing response bodies, Content-Length reflects -the compressed byte count, not the decoded payload, so it's not a -reliable integrity check.) - ## On-demand server-side fetch for new symbols Currently the server's SRF endpoints (`/candles`, `/dividends`, etc.) are pure @@ -330,14 +255,6 @@ taxonomy. The following items are acknowledged but not prioritized. Listed here so they don't get lost; pick up opportunistically. -### UX - -- **CLI options command UX.** The `options` command auto-expands only - the nearest monthly expiration and lists others collapsed. Reconsider - the interaction model - e.g. allow specifying an expiration date, - showing all monthlies expanded by default, or filtering by strategy - (covered calls, spreads). - ### Audit - **Audit large-lot threshold tuning.** `src/commands/audit.zig` uses