Skip to content

m-19 TASK-321.02: persona registry seeded β€” 14 captured fixtures#61

Merged
jvgomg merged 1 commit into
mainfrom
feat/m-19-persona-captures
May 14, 2026
Merged

m-19 TASK-321.02: persona registry seeded β€” 14 captured fixtures#61
jvgomg merged 1 commit into
mainfrom
feat/m-19-persona-captures

Conversation

@jvgomg

@jvgomg jvgomg commented May 13, 2026

Copy link
Copy Markdown
Owner

Summary

Hardware-capture pass for TASK-321.02. 14 personas committed under packages/device-testing/src/personas/ with per-persona provenance.md linking raw Mac + Linux probe data back to capture sessions. Follows documents/persona-capture-playbook.md (also new in this PR β€” the canonical workflow doc the captures themselves were directed by).

Personas

Persona Path Linux Notes
ipod-video-5g-iflash-1tb SCSI deferred TERAPOD, 94 MiB MBR firmware gap
ipod-mini-2g-pink SCSI deferred PID 0x1205 shared with mini 1G (documented)
ipod-nano-2g-green SCSI deferred Pre-2006 SysInfo
ipod-nano-3g-black USB βœ“ Boundary device β€” USB-inquiry begins here
ipod-nano-4g-black USB βœ“ HFS+/APM topology sample
ipod-nano-7g-blue USB βœ“ HFS+/APM sibling, hashAB checksum
ipod-nano-7g-space-gray USB deferred FAT32/MBR Windows-restored sibling
ipod-touch-5g-unsupported rejection N/A iOS, no disk mode
echo-mini mass-storage βœ“ Dual-LUN, both lsblk dumps captured
sony-nw-hd5 rejection deferred Original Network Walkman, OpenMG v1.1 + MACLIST DRM
sony-nw-a1000 / a1200 / a3000 rejection deferred SonicStage-era HDD Walkmans
sony-nwz-e384 rejection deferred Newest Walkman; capability_00.xml authoritative

Linux strategy: 4 topologically-distinct devices fully reconciled; siblings have explicit "Linux capture deferred (shape expected to match X)" markers in their provenance. Re-plug is cheap if a downstream test surfaces a need.

Also in this PR

  • documents/persona-capture-playbook.md β€” agent-directive doc covering full Mac β†’ Linux capture pipeline, raw-probe file layout, expected-* derivation strategies, synthesised rejection cases.
  • 3 device profiles in devices/ β€” sony-walkman-nw-a-series.md, sony-walkman-nw-hd-series.md, sony-walkman-nwz-e380.md. Family-level alongside existing devices/ipod.md / echo-mini.md.
  • documents/test-devices.md updated with capture timestamps + persona IDs.

Backlog hygiene

  • TASK-321.02 β†’ Done. Full final summary documents over-delivery (14 personas vs originally-planned 3 starters). AC Music video sync supportΒ #4 (per-persona smoke tests) explicitly left unchecked β€” fixtures are informational + future-test inputs; smoke tests deferred to TASK-301..311 implementers.
  • TASK-324 (Phase 5) description rewritten to acknowledge what 321.02 over-delivered; remaining scope narrowed to state variants (corrupt-db, populated), firmware variant (rockbox), and 3 synthesised rejection personas.
  • TASK-331 created β€” extend ReadinessLevel with 'unsupported' variant; the current 'unknown' workaround in touch 5G + Sony personas is documented but pending normalisation.
  • TASK-332 created β€” DevicePersona schema v2 (USB descriptor hierarchy, partition LUN field, nullable serial). Blocks TASK-322.05 (FunctionFS daemon).

Findings

  • USB PID 0x1205 is shared between iPod mini 1G + 2G per linux-usb.org. packages/devices-ipod/src/tables/usb-ids.ts documents this and intentionally maps to mini_1g with a generic display name; SysInfo cascade resolves precise generation. Earlier provenance characterised this as a "known bug" β€” corrected. Codebase right; documentation now reflects it.
  • Linux sysfs bNumConfigurations = 2 for nano 3G vs Mac ioreg 1. Not a host disagreement: Apple iPods advertise two USB configurations (Mass Storage + iAP) and macOS surfaces only the active one. Folded into TASK-332's schema v2 scope.

Test plan

  • bun run typecheck --filter @podkit/device-testing β€” pass (verified pre-push)
  • bun run test:unit --filter @podkit/device-testing β€” 83 pass / 2 skip / 0 fail (verified pre-push)
  • All 14 personas load via the registry; runtime.test.ts personas.size > 0 assertion green
  • CI on this PR confirms full workspace builds + tests still pass

Out of scope

  • Per-persona smoke tests (deferred, see TASK-321.02 AC Music video sync supportΒ #4 + TASK-331 dep)
  • Schema v2 migration (TASK-332)
  • ReadinessLevel: 'unsupported' implementation (TASK-331)
  • 9 deferred Linux captures (extrapolation-justified; re-plug if needed)

πŸ€– Generated with Claude Code

Hardware-capture pass following documents/persona-capture-playbook.md.
Mac + Linux probe data committed under packages/device-testing/src/personas/
with provenance.md per persona linking raw artefacts back to their capture
sessions.

Personas (14)
- ipod-video-5g-iflash-1tb β€” TERAPOD, SCSI-fallback, 94 MiB MBR firmware gap
- ipod-mini-2g-pink β€” SALLYS IPOD, SCSI-fallback, PID 0x1205 shared with mini 1G
- ipod-nano-2g-green β€” PARTY IPOD, SCSI-fallback
- ipod-nano-3g-black β€” USB-inquiry boundary device (Linux βœ“)
- ipod-nano-4g-black β€” HFS+/APM, USB-inquiry (Linux βœ“)
- ipod-nano-7g-blue β€” HFS+/APM, hashAB checksum (Linux βœ“)
- ipod-nano-7g-space-gray β€” FAT32/MBR Windows-restored, same PID as blue
- ipod-touch-5g-unsupported β€” iOS rejection case, no disk mode
- echo-mini β€” FiiO mass-storage DAP, dual-LUN (Linux βœ“ both LUNs)
- sony-nw-hd5 β€” original Network Walkman, OpenMG v1.1 + MACLIST DRM
- sony-nw-a1000, sony-nw-a1200, sony-nw-a3000 β€” SonicStage-era HDD Walkmans
- sony-nwz-e384 β€” newest Walkman, capability_00.xml + DeviceInfo.txt captured

Linux session strategy
Four topologically-distinct devices captured end-to-end on linka (Debian 12,
kernel 6.1.0-41-amd64). Each provenance.md carries a 12-field reconciliation
table comparing Mac ioreg vs Linux sysfs USB descriptor fields. Siblings
sharing topology have explicit "Linux capture deferred (shape expected to
match X)" markers β€” re-plug + capture is cheap if a downstream test surfaces
a need.

Device profiles in devices/
- sony-walkman-nw-a-series.md (NW-A1000 / A1200 / A3000)
- sony-walkman-nw-hd-series.md (NW-HD5)
- sony-walkman-nwz-e380.md (NWZ-E380 / E383 / E384 / E385)

documents/persona-capture-playbook.md
Canonical workflow doc that drove the capture pass. Covers per-device
commands for Mac + Linux, raw-probe file layout, expected-* derivation
strategies, provenance template, synthesised rejection cases.

documents/test-devices.md updated
Each device section gains a "Persona captured" line linking to the fixture.

Backlog hygiene
- TASK-321.02 marked Done with full final summary. AC #4 (per-persona smoke
  tests) explicitly left unchecked β€” fixtures committed as informational +
  future-test inputs; smoke-test work blocked on TASK-331 (rejection-case
  ReadinessLevel shape) and picked up organically by TASK-301..311.
- TASK-324 (Phase 5) description rewritten to acknowledge what 321.02
  over-delivered and narrow remaining scope to state variants
  (ipod-video-5g-corrupt-db, echo-mini-populated), firmware variant
  (ipod-classic-rockbox), and synthesised rejection personas (shuffle,
  non-ipod-usb-disk, malformed-sysinfo).
- TASK-331 created β€” extend ReadinessLevel with 'unsupported' variant; the
  current 'unknown' workaround in touch 5G + Sony personas is documented
  but pending normalisation.
- TASK-332 created β€” DevicePersona schema v2: USB descriptor hierarchy
  (configurations[]/interfaces[]/endpoints[] + bNumConfigurations),
  partitionLayout LUN field, nullable deviceSerial. Blocks TASK-322.05
  (FunctionFS daemon).

Findings
- USB PID 0x1205 shared between mini 1G + 2G per linux-usb.org;
  tables/usb-ids.ts documents this and intentionally maps to mini_1g with
  generic display name. SysInfo cascade resolves precise generation.
  Earlier provenance characterised this as a "known bug" β€” corrected.
- Linux sysfs bNumConfigurations=2 for nano 3G; Mac ioreg surfaces only
  active config (1). Apple iPods advertise two USB configurations
  (Mass Storage + iAP). Folded into TASK-332.

Quality gates
- bun run typecheck --filter @podkit/device-testing β†’ pass
- bun run test:unit --filter @podkit/device-testing β†’ 83 pass / 2 skip / 0 fail
- Registry index.ts wires all 14 personas; runtime smoke test confirms
  loading.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jvgomg jvgomg merged commit aeb8283 into main May 14, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant