From fdc709f87249effbff6d5677f5c2ae14bbc4d562 Mon Sep 17 00:00:00 2001 From: Maksim Kostromin Date: Tue, 13 Oct 2026 15:16:02 -0400 Subject: [PATCH] docs: move still-open review findings into readme and drop docs folder Re-checked the 2026-07-13 architecture review (docs/FINDINGS.en.md and its Russian copy) against the current code. Seven findings are still open and now live in a Known Issues section at the end of README.md. The row truncation part of F-03 was fixed in #19 and is dropped. --- README.md | 46 +++++ docs/FINDINGS.en.md | 481 -------------------------------------------- docs/FINDINGS.ru.md | 481 -------------------------------------------- 3 files changed, 46 insertions(+), 962 deletions(-) delete mode 100644 docs/FINDINGS.en.md delete mode 100644 docs/FINDINGS.ru.md diff --git a/README.md b/README.md index c66928b..dd72e7f 100644 --- a/README.md +++ b/README.md @@ -84,3 +84,49 @@ architecture or local offline workspace. This application executes entirely client-side inside your web browser. No financial data, statements, ledger indices, or CSV filenames are transmitted to external cloud systems, tracking networks, or third-party servers. Your investment data remains isolated and completely secure. + +## ⚠️ Known Issues + +Still open from the architecture review of 2026-07-13 (re-checked 2026-10-13). Fixed since then and dropped from +this list: over-wide rows are no longer cut (PR #19) + +### Monolithic `src/main.tsx` +Parser, type detection, filter engine, export, persistence, loading orchestration and every UI component live in one +1800+ line file, so domain logic cannot be tested on its own and every change touches the render file. Fix: move +the domain code to `csv-parser.ts`, `column-types.ts`, `filters.ts`, `export.ts`, `settings-storage.ts` and the +components to their own files, keeping the UX unchanged + +### Large files block the browser +Files are read whole, parsed on the main thread, kept in React state and rendered without virtualization in both +tab and merge views. Big exports or many files at once freeze the tab. Fix: parse in a Web Worker, virtualize rows, +keep remembered datasets in IndexedDB instead of `localStorage` + +### Parser trims quoted values +`parseCSVText` calls `field.trim()` on every field, quoted ones included, so `" keep spaces "` loses its spaces. +Fix: trim only unquoted fields and add parser fixtures (embedded quotes, whitespace, multiline values, extra and +missing columns, Fidelity preambles and footers) + +### Financial data is remembered by default +`rememberData` defaults to `true`, so imported datasets stay in `localStorage` on shared or managed machines, while +the Data Privacy Notice below only talks about network isolation. Fix: default to `false`, word the toggle as +"Store imported data in this browser", mention local retention in the notice + +### Column settings are shared by index across files +Custom names, type overrides, filters and sort are keyed by column index only, so renaming or filtering column 0 in +one file applies to column 0 of every file. Pinned columns are already per file in tab view. Fix: key the rest by +file (or schema) plus column index and decide per setting whether it is global or per file + +### README and dependencies drift from the code +This README says Vite, the build is Parcel. `clsx`, `lucide-react`, `recharts`, `tailwind-merge`, `papaparse` and +`@types/papaparse` are declared but never imported. `bun audit` reports 33 vulnerabilities, all in dev tooling +(`pm2`, Parcel, Jest), the production graph is clean. Fix: describe the real stack, drop unused packages, drop or +upgrade `pm2` + +### No tests +`bun run test` only runs the build and CI only builds. Fix: unit tests for the parser, filter grammar, type +detection and export, fixture tests on real Fidelity CSVs, run them in CI + +### Accessibility and error reporting +The empty-state upload area is a clickable `
` (not reachable by keyboard), per-file import errors only go to +`console.error`, and invalid JSON or oversized data is reported with `alert()`. Fix: a real `