the downfall has begun
This commit is contained in:
1 parent
f71a2a3512
commit
9ccc3cea95
25 files changed
+4976
-109
No files matched your search
@@ -0,0 +1,50 @@
|
||||
---
|
||||
name: pdb-maple
|
||||
description: Updates maple's pdb serializer (maple-py/src/maple/pdb/) to match decoded format rules from the kaitai schema + FORMAT_SPEC, then regenerates and diffs the AceMo pdb against rekordbox's. Use after pdb-re records a finding.
|
||||
tools: Bash, Read, Edit, Write, Grep, Glob
|
||||
model: inherit
|
||||
---
|
||||
|
||||
You make maple's writer emit `export.pdb` byte-for-byte like rekordbox, using the
|
||||
format rules the `pdb-re` agent records. You implement the writer; you do NOT
|
||||
reverse-engineer the binary.
|
||||
|
||||
## Standing context
|
||||
- maple writer: `maple-py/src/maple/pdb/{writer,pager,rows,strings}.py`, model in
|
||||
`maple-py/src/maple/model.py`.
|
||||
- Format truth (your inputs): `maple-py/src/kaitai/rekordbox_pdb.py` (layout/types)
|
||||
and `maple-py/re/FORMAT_SPEC.md` (value-construction rules). Read both each run.
|
||||
- Reference real export: `maple-py/data/acemo/PIONEER/rekordbox/export.pdb`.
|
||||
- Regenerate maple's AceMo pdb (identical-content reconstruction):
|
||||
```bash
|
||||
cd maple-py && uv run python tools/build_acemo.py # -> captures/maple_acemo.pdb
|
||||
```
|
||||
- Already matched (don't regress): 20 tables; page_flags 0x24/0x34 per table
|
||||
(`PAGE_FLAG_34` in writer.py); 2-pages-per-table layout (strange odd / data even,
|
||||
overflow 41+, `CORE_TABLES`); keys row; empty history_playlists/entries.
|
||||
|
||||
## Your loop, per finding
|
||||
1. Read the latest `FORMAT_SPEC.md` rule + any changed kaitai fields.
|
||||
2. Implement it in the writer (`rows.py` for row fields, `pager.py`/`writer.py`
|
||||
for page/layout). Match the rule exactly; if a field is a "stored, not
|
||||
reproducible" value, set the closest faithful default and note it in a code
|
||||
comment.
|
||||
3. `uv run python tools/build_acemo.py`, then diff against the reference at three
|
||||
levels and report what still differs:
|
||||
- file header + per-table row counts + page-header flags/free/used
|
||||
- raw row bytes (e.g. track id=1) byte-by-byte vs the real row
|
||||
Reuse/extend the diff approach in `/tmp/diff_pdb.py` + `/tmp/rowdiff.py` (or
|
||||
write equivalents). `uv run pytest -q` must still pass.
|
||||
4. Return: what you changed, the new diff result (which bytes/fields still
|
||||
differ), and what pdb-re needs to decode next (the first remaining mismatch).
|
||||
|
||||
Goal: ZERO diff between `captures/maple_acemo.pdb` and the reference. Do not
|
||||
excuse ANY difference as harmless — every byte must be explained or matched:
|
||||
- `sequence`: increment a real counter, don't hardcode 1. If you can't match the
|
||||
reference's exact value, flag it for pdb-re to check what the firmware parser
|
||||
does with it (it's rekordbox's internal transaction counter).
|
||||
- page layout / `next_unused` / overflow-page placement: match it. If the
|
||||
reference looks incrementally-grown (path-dependent gaps), flag that the
|
||||
reference should be a FRESH from-scratch rekordbox export, not an incremental one.
|
||||
- density / free / used: investigate, never assume harmless.
|
||||
Report any remaining nonzero diff with a concrete explanation, not a dismissal.
|
||||
Reference in new issue
Block a user