diff --git a/.gitignore b/.gitignore index 0837b4b3..6db8505e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ tmp/ *.pkl .idea/ .claude/worktrees/ +.superpowers/ +docs/superpowers/ +.worktrees/ diff --git a/.superpowers/sdd/task-w6-report.md b/.superpowers/sdd/task-w6-report.md deleted file mode 100644 index 44bf07d7..00000000 --- a/.superpowers/sdd/task-w6-report.md +++ /dev/null @@ -1,31 +0,0 @@ -# W6: AleoNetworkClient — Task Report - -## Status: COMPLETE - -## Worktree -`/Users/privacydaddy/dev/python-sdk/.claude/worktrees/agent-a0edcc75d7a9560ad` - -## Test Counts -- Before: 457 passed (base at commit 4dbd621) -- After: 519 passed (+62 new tests) -- Pyright: 0 errors, 0 warnings - -## Files Added -- `sdk/python/aleo/_client_common.py` — shared models, errors, retry, JWT helpers -- `sdk/python/aleo/security.py` — PyNaCl sealed-box encrypt helper -- `sdk/python/aleo/network_client.py` — sync AleoNetworkClient (requests) -- `sdk/python/aleo/async_network_client.py` — async AsyncAleoNetworkClient (httpx) -- `sdk/python/tests/test_network_client.py` — 42 sync tests (mocked) -- `sdk/python/tests/test_network_client_async.py` — 20 async tests (mocked) -- `sdk/python/tests/test_security.py` — 5 sealed-box tests - -## Files Modified -- `sdk/python/aleo/__init__.py` — exports AleoNetworkClient, AsyncAleoNetworkClient, AleoNetworkError, AleoProvingError -- `sdk/pyproject.toml` — added requests dep, async/dps optional extras - -## Deviations from TS Semantics -- `find_records` / `find_unspent_records` omitted per scope change (deprecated in TS, superseded by delegated RecordScanner). -- Python WASM API differs from TS: `Program.from_source()` (not `fromString()`), `Program.imports` list attribute (not `getImports()`), `Transaction.from_json()` (not `fromString()`). -- `get_program_imports` uses a DFS helper `_collect_program_imports` to avoid double-fetching during recursion (same semantics as TS, different implementation to match Python WASM API). -- Helper functions use non-underscore names (`jwt_origin`, `make_default_headers`, etc.) to satisfy pyright's `reportPrivateUsage` rule in strict mode. -- Async retry patches `asyncio.sleep` at module level (not `aleo._client_common.asyncio.sleep`) because asyncio is imported inside the function body.