From 56fcfec6488720936e87ccbcb2d2f3243521aa2f Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 15 Jul 2026 19:30:47 -0700 Subject: [PATCH] =?UTF-8?q?docs(rawcli):=20roadmap=20=E2=80=94=20MVP=20tra?= =?UTF-8?q?nsponders,=20binary-autocomplete=20bug,=20MFC-first?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Captures the named-transponder MVP (NTAG21x/UL EV1 done; MIFARE Classic next; then ICODE SLIX/SLIX2/NTAG5), the UX contract (all hints in the completion dropdown, hex + binary), the binary-mode autocomplete bug (entry._regroup_after resetting buf.document cancels the menu), and the 15693 header-builder + per-chip-identify foundations. Co-Authored-By: Claude Opus 4.8 --- docs/rawcli-todo.md | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 docs/rawcli-todo.md diff --git a/docs/rawcli-todo.md b/docs/rawcli-todo.md new file mode 100644 index 0000000..fb226e5 --- /dev/null +++ b/docs/rawcli-todo.md @@ -0,0 +1,56 @@ +# rawcli — catalog & memory-hinting roadmap + +The MVP is a list of **named transponders**, each surfaced through the **same UX**: a command +catalog + a datasheet memory map, both offered as **autocomplete suggestions in the completion +dropdown** — never on the bottom bar, never in command output. + +## The UX contract (applies to every transponder) + +- Completion dropdown offers: command names (by letter → `READ(`), opcodes (by hex/binary value → + raw byte inserted, command as the label), and page/block landmarks with datasheet roles. +- **Must work in both hex AND binary entry modes**, rendering in the active base. +- Function-call args are base-10 (`READ(4)`); raw bytes are hex, `0b` to intermix binary. + +## BUG — binary-mode autocomplete does not fire in the live prompt + +The completer logic is correct when fed the text directly (hex and binary), but in the running +REPL the completion menu doesn't reliably appear while entering **binary**. +- Prime suspect: `entry._regroup_after` sets `buf.document = Document(...)` directly on + auto-spacing, which resets prompt_toolkit's `complete_state` and cancels the menu. Binary + regroups every 8 digits, so it bites almost immediately. +- Fix direction: regroup via a completion-preserving path (don't replace `buf.document` + wholesale); re-arm `complete_while_typing` after regroup. Also confirm the Ctrl-t / Ctrl-_ + toggle actually flips the breadcrumb to `0b`. +- Verify on hardware in binary mode (needs a tag on the antenna). + +## Priority 1 — MIFARE Classic (do this first) + +- **Identify**: distinguish 1K (SAK 0x08) / 4K (0x18) / Mini (0x09); today only named, no map. +- **Memory map** (block → role), mirroring the NTAG page map: + - Block 0 = manufacturer block: UID + BCC + SAK + ATQA + manufacturer data. + - Sector trailer (block 3,7,…,63 on 1K; last block of each sector on 4K): **Key A (0-5), + access bits (6-8) + GPB (9), Key B (10-15)** — the access bits are the bit-level detail. + - Other blocks = data block (with sector number). + - 4K: sectors 0-31 are 4 blocks; sectors 32-39 are 16 blocks each. +- **Catalog**: READ/WRITE/HALT exist; note that reads/writes need prior AUTH (Key A/B) — the + authenticate step is the reader's job before these. +- Autocomplete must work in hex + binary (see the bug above). + +## After MFC — 15693 vicinity chips: ICODE SLIX, ICODE SLIX2, NTAG5 + +1. **15693 header builder** (shared foundation). Replace the ad-hoc `bytes([0x02, cmd, …])` with a + real request-header builder: flags (data rate, addressed-vs-nonaddressed + 8-byte UID, option, + protocol-extension) + command + NXP **manufacturer code 0x04** for ICODE/NTAG5 custom commands. +2. **Per-chip identify.** Today identify stamps `"ISO15693"` generically; resolve the actual IC + (UID mfg byte `E0 04…` + GET_SYSTEM_INFO / IC-reference) so catalog + map key off SLIX2 / NTAG5. +3. **Catalogs + memory maps** per chip (blocks, config, counters, EAS/AFI, password/AES) — sourced + from the models in `transponders/hf/iso15693/nxp/` (`icode_slix`, `icode_slix2`, `ntag5_*`). +4. Same autocomplete UX (hex + binary). + +## Also queued + +- **T5577 config block (block 0)** bitfield decode (modulation, bit-rate, block count, PWD/AOR) — + currently just "config block". +- NTAG I2C plus (model exists, identify names it) — catalog + map. + +See [[project_rawcli_mvp]] in memory for the named-transponder scope.