Grouped low-severity findings from a full-repo review — none urgent individually.
1. API_INTEGRATION.md references a layout that no longer exists
Mentions frontend/ (actual dir: csv-table-hub-main/) and tests/test_api.py (actually split into test_api_unit.py / test_api_integration.py / test_api_coverage.py per commit b35f7ec). Stale since the reorg.
2. Shell loaders don't dedupe sanitized column collisions
build/csv/loader_postgresql.sh (and siblings) sanitize CSV headers to ^[a-z_][a-z0-9_]*$ but don't dedupe collisions the way api/services/csv_parse.py::sanitize_columns() does (which bumps a numeric suffix). Two headers colliding after sanitization produce a CREATE TABLE with a duplicate column → raw Postgres error instead of a clean rejection. Lower priority since todos_2026-08-12.md itself notes this CLI tooling's active-use status is unclear.
3. api/requirements.txt pins only lower bounds
fastapi>=0.140.7, pydantic>=2.13.4, etc. — a fresh pip install isn't reproducible; a future major-version bump could break the API silently.
4. /audit frontend route vs. backend /api/audit/log — naming overlap, not the same data
csv-table-hub-main/src/routes/audit.tsx renders a static hardcoded developer changelog (src/lib/audit-log.ts). The backend's actual /api/audit/log endpoint (deletion history) and /api/te/tables are never called anywhere in the shipped frontend (grepped for fetch( across all of src/ — only one call site exists, in csv.functions.ts, and it only calls /api/csv/upload, /api/csv/files, /api/csv/tables/{}/rows). Given the README markets "Audit log" as a frontend feature, this is worth a naming/scope clarification even though nothing is functionally broken.
Severity
Low — hygiene and clarity, no functional risk.
Grouped low-severity findings from a full-repo review — none urgent individually.
1.
API_INTEGRATION.mdreferences a layout that no longer existsMentions
frontend/(actual dir:csv-table-hub-main/) andtests/test_api.py(actually split intotest_api_unit.py/test_api_integration.py/test_api_coverage.pyper commitb35f7ec). Stale since the reorg.2. Shell loaders don't dedupe sanitized column collisions
build/csv/loader_postgresql.sh(and siblings) sanitize CSV headers to^[a-z_][a-z0-9_]*$but don't dedupe collisions the wayapi/services/csv_parse.py::sanitize_columns()does (which bumps a numeric suffix). Two headers colliding after sanitization produce aCREATE TABLEwith a duplicate column → raw Postgres error instead of a clean rejection. Lower priority sincetodos_2026-08-12.mditself notes this CLI tooling's active-use status is unclear.3.
api/requirements.txtpins only lower boundsfastapi>=0.140.7,pydantic>=2.13.4, etc. — a freshpip installisn't reproducible; a future major-version bump could break the API silently.4.
/auditfrontend route vs. backend/api/audit/log— naming overlap, not the same datacsv-table-hub-main/src/routes/audit.tsxrenders a static hardcoded developer changelog (src/lib/audit-log.ts). The backend's actual/api/audit/logendpoint (deletion history) and/api/te/tablesare never called anywhere in the shipped frontend (grepped forfetch(across all ofsrc/— only one call site exists, incsv.functions.ts, and it only calls/api/csv/upload,/api/csv/files,/api/csv/tables/{}/rows). Given the README markets "Audit log" as a frontend feature, this is worth a naming/scope clarification even though nothing is functionally broken.Severity
Low — hygiene and clarity, no functional risk.