Skip to content

Commit bdd5a98

Browse files
committed
docs: split into HISTORY (past) / PLAN (future) / LEARNINGS (lessons)
Rename CHANGELOG.md -> HISTORY.md and add two new docs: - HISTORY.md (renamed from CHANGELOG.md, with framing rewritten as a historical record rather than a changelog). Updated test counts to current state (585 tests = 557 unit + 28 live), added the 6 batched/nested live tests to the catalog. - PLAN.md (new): forward-looking roadmap. Confirmed gaps vs. upstream internxt/cli (trash lifecycle is the only must-fix), potential differentiators (folder copy, quota — neither side has them, easy win), maintenance debt (drive.py too big, stale-cache audit, pre-commit hooks). Workspaces explicitly skipped per user feedback (out of scope, personal accounts only). Includes a substantial WebDAV-providers reliability test plan addressing the field reports of intermittent issues — outline of an in-process server fixture with parameterized waitress vs cheroot coverage; the biggest real-world blind spot we have today. - LEARNINGS.md (new): retrospective. What each audit tool actually catches (with examples — pylint's no-name-in-module flagged the PROPPATCH ImportError that no other tool caught), why unit tests miss certain bugs (3 concrete examples — cache coherency, /users/me 404, fuzzy-search semantics), the trust-roots-at-100% policy, workarounds for testing wsgidav (construct via __new__, inject fake submodules via sys.modules), live-test safety patterns (sentinel folder, per-call UUIDs, .env gitignore audit), rate-limit / eventual-consistency mitigation via pytest-rerunfailures, crypto-compatibility annotation pattern (#nosec WITH reason), the code-smell-to-bug correlation (5 separate "minor cleanup" findings hiding real bugs), mypy union-attr vs assignment value calibration, what to do differently next time. readme.md: updated documentation index to point at the three new docs.
1 parent 21f4057 commit bdd5a98

4 files changed

Lines changed: 700 additions & 10 deletions

File tree

CHANGELOG.md renamed to HISTORY.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1-
# Changelog
1+
# History
22

3-
## Unreleased — Audit, Bug Fixes, Test Infrastructure
3+
A historical record of the work done in this repo. New work is added to
4+
the top. For forward-looking work see [`PLAN.md`](PLAN.md); for the
5+
retrospective lessons see [`LEARNINGS.md`](LEARNINGS.md).
6+
7+
---
8+
9+
## Audit + Test Infrastructure (initial pass)
410

511
A multi-tool security/correctness audit (ruff, mypy, bandit, pylint,
612
vulture, pyflakes) was run across the codebase. Every medium+ finding was
7-
either fixed or annotated with rationale, and a 557-test pytest suite was
8-
built up alongside CI to lock in those fixes.
13+
either fixed or annotated with rationale, and a 585-test suite (557 unit
14+
+ 28 live integration) was built up alongside CI to lock in those fixes.
915

1016
End state: **0 ruff errors, 0 mypy errors, 0 Bandit medium+ findings,
11-
557/557 pytest passing in ~3 seconds, 90% line coverage**.
17+
585 tests passing (557 unit in ~3 seconds + 28 live in ~60-90s),
18+
90% line coverage**.
1219

1320
---
1421

@@ -271,7 +278,7 @@ a live Internxt backend, not more unit mocks.
271278

272279
#### Live integration smoke test
273280

274-
`tests/test_live_smoke.py`**22 opt-in tests** that run against the real
281+
`tests/test_live_smoke.py`**28 opt-in tests** that run against the real
275282
Internxt backend. Auto-skipped unless `IXT_ACCOUNT` and `IXT_PWD` are
276283
set in env (or in a gitignored `.env` file).
277284

@@ -302,6 +309,7 @@ Coverage:
302309
| Trash | trash_file removes from listing |
303310
| Search | server-side fuzzy finds uniquely-named upload (with retry for index latency); bogus query returns low-similarity results without crashing |
304311
| Find | client-side wildcard search returns exact match set |
312+
| Batched / nested ops | recursive folder upload+download tree; move non-empty folder brings children with same UUIDs; rename folder preserves child paths; trash non-empty folder removes children; on_conflict='skip' preserves original UUID+bytes; on_conflict='overwrite' produces new UUID with replaced bytes |
305313

306314
To run:
307315

@@ -317,8 +325,9 @@ pytest tests/test_live_smoke.py -v
317325
PYTEST_SKIP_LIVE=1 pytest
318326
```
319327

320-
Live test results across 3 consecutive runs against a live account:
321-
22/22 → 22/22 → 22/22 (zero retries on the third run).
328+
Live test results across consecutive runs against a live account:
329+
28/28 → 28/28 (rerun mechanism handles transient API flakiness from
330+
rate-limit / eventual-consistency).
322331

323332
These tests surfaced two real bugs that all 557 unit-mocked tests had
324333
missed:

0 commit comments

Comments
 (0)