docs(rawcli): roadmap — MVP transponders, binary-autocomplete bug, MFC-first

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 <noreply@anthropic.com>
This commit is contained in:
michael
2026-07-15 19:30:47 -07:00
parent a5c7702398
commit 56fcfec648

56
docs/rawcli-todo.md Normal file
View File

@@ -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.