# pm3py Refactor Progress **Design:** [2026-03-18-refactor-design.md](2026-03-18-refactor-design.md) **Branch:** `refactor/core-package` **Started:** 2026-03-18 ## Phase 1 — Create `core/`, normalize names, fix imports **Status: Complete** ### What was done - Created `pm3py/core/` sub-package - Moved all source modules into `core/`: - `protocol.py`, `transport.py`, `client.py`, `hw.py`, `hf.py`, `lf.py` — moved as-is - `hf_14a.py` → `hf_iso14a.py` (renamed) - `hf_15.py` → `hf_iso15.py` (renamed) - `hf_mf.py` → `hf_mfc.py` (renamed) - Normalized client attributes: - `hf.a14` → `hf.iso14a` - `hf.mf` → `hf.mfc` - `hf.iso15` — unchanged - Created `core/__init__.py` re-exporting: `Proxmark3`, `FirmwareInfo`, `PM3Transport`, `PM3Error`, `PM3Response`, `PM3Status`, `Cmd` - Updated `pm3py/__init__.py` to import from `.core.*` - Updated all 10 test files (imports + attribute references) - **30/30 tests passing** ### Backward compatibility - `from pm3py import Proxmark3` still works (re-exported) - **Breaking:** `hf.a14` → `hf.iso14a`, `hf.mf` → `hf.mfc` - **Breaking:** Direct imports like `from pm3py.hf_14a import ...` → `from pm3py.core.hf_iso14a import ...` ## Phase 2 — Extract `sniff/` **Status: Deferred — no sniff infrastructure exists yet** `hf_iso15.py` is 94 lines of clean reader commands + thin `sniff()` firmware call. The trace parsing, 15693 decoders, NDEF annotation, and ANSI formatting described in the design doc haven't been written yet. Nothing to extract. Will revisit when sniff infrastructure is implemented. ## Phase 3 — Scaffold `transponders/` **Status: Not started — models live in sim worktree** Transponder models exist in `.worktrees/sim-framework/` but haven't been merged to master. Scaffold when ready to migrate. ## Phase 4 — Scaffold `reader/` and `sim/` **Status: Not started** Depends on Phase 3 and sim worktree merge.