feat: phase 2.5 — operator's 10-item GUI sweep + nonnegotiable workflow retrofit #27

Open
opened 2026-05-17 04:25:32 +00:00 by hartle-tech · 0 comments
hartle-tech commented 2026-05-17 04:25:32 +00:00 (Migrated from github.com)

S01E37 — The Operator's Sweep

Operator dumped a 10-item product roadmap on 2026-05-17; this issue tracks the validated subset of that sweep that shipped in a single phase-2.5 working-tree pass before any commits. Validated items are listed below; the rest stay open as separate follow-up issues.

Validated 2026-05-17

  • Task #2 — top white chrome bar removed. Sidebar runs full window height; macOS traffic-light region (~36 px) reserved via padding-top: 42px on .sidebar. Killed the empty <header class="chrome"> strip and the --chrome-h math from .layout.
  • Task #3 — iPhone-row click no longer lands in DumpSock.app's folder. Dropped the bogus AppleScript (`sidebar of window 1` isn't a real Finder property); now opens Finder at `~` and toasts the user to find their iPhone in the sidebar Locations.
  • Task #4 — byte-based progress bar + files-remaining counter. `backup.ProgressEvent` gained `BytesTotal` + `BytesPulled`; engine sums total bytes after planning and atomically adds size on each successful pull. Frontend's progress bar tracks bytes (more honest than files when sizes vary wildly), plus a new "N of M files copied · K remaining" line below.
  • Task #1 — Password-protect grays out when Compress is unchecked. Encryption is applied to the produced `.zip` artifact; the UI now enforces that dependency (auto-uncheck Password when Compress unchecks).
  • Task #8 — Browse iPhone tab. New `App.BrowseRemote` + `afc.Client.List`/`Stat` open a one-level AFC view; `backup.Options.OnlyPaths` short-circuits the recursive Walk so "Back up selected" pulls just the ticked files.
  • Task #9 — Storage breakdown click-through. Donut segments + legend rows carry `data-browse-to`; clicking Photos/Videos navigates Browse to `/DCIM`, clicking Apps/Other to `/`.
  • Task #10 — Third-party app data browser. `App.ListFileSharingApps` enumerates user apps with UIFileSharingEnabled; `App.BrowseApp` routes through a new `internal/afc/housearrest.go` wrapper that tries VendDocuments first (production-signed apps) and falls back to VendContainer (dev-signed). go-ios's hardcoded VendContainer was the InstallationLookupFailed root cause.
  • Task #12 — folder selection + folder ops in Browse. Folder checkboxes now active; `ExpandRemoteSelection` flattens a folder selection to files for the engine's OnlyPaths. Per-row Delete works on files and folders via `afc.Client.RemoveAll`. (Rename is stubbed pending upstream go-ios AFC RENAME_PATH opcode wrapper — separate follow-up.)
  • Task #14 — RemoteRemove verification. Post-delete `cl.Stat` re-check so iOS "reported success but kept the file" cases surface honestly to the user.
  • Task #15 — Delete button + in-app confirm modal. New `.btn-text-danger` (transparent bg, red text) avoids the previous red-on-red invisibility. `window.confirm()` replaced with an in-app modal that actually works inside the Wails webview.
  • Task #16 — UIFileSharingEnabled filter. Discovered go-ios's `BrowseFileSharingApps()` is misnamed: under the hood it sends `{Command: "Browse"}` with no filter, returning every app. Host-side UIFileSharingEnabled filter added.
  • Task #17 — AFC error code humanisation. Codes 8/9/10/11/13/15/16/18/20 now read like English ("Unlock your iPhone…", "This subtree is hardened by iOS 15+…", "Unplug and replug…").
  • Task #18 — App picker drops com.apple. system bundles.* Switched picker from `BrowseFileSharingApps` to `BrowseUserApps` + the host-side UIFileSharingEnabled filter; com.apple.Fitness / com.apple.icq and other Apple bundles no longer appear.
  • Task #19 — iOS-hardened entries rendered as greyed-out rows. Previously dropped silently; now appear with a 🔒 icon, "hidden by iOS" size column, disabled checkbox/Delete, plus a footer note ("🔒 N entries are hidden by iOS — accessing them over AFC requires Finder, jailbreak, or the app's own UI").

Workflow rules cemented this session

Saved as a binding memory feedback: every future change goes through task-before-touchingtest before commitdocs/wiki/landing + memory + board update on every state change. See `feedback_nonnegotiables.md` in the project memory directory.

Still in flight (separate issues / follow-up tasks)

  • Task #5 — Session restore via `.dumpsock-session.json`
  • Task #6 — Backups list + `.dumpsock.json` metadata + Move/Forget
  • Task #7 — Wring it dry / Compress / Password (operator reported "hung then said done, no zip"; surfacing fix in progress)
  • Task #11 — Scope expansion for iCloud + full-device backup (CLAUDE.md non-goals softened; scaffolds at `internal/icloud/` and `internal/mb2/`; CLI subcommands `dumpsock icloud pull` + `dumpsock backup-device` return ErrNotImplemented; plan at `docs/phase-6-roadmap.md`)
  • Task #20 — `onDone` surfacing for `package_error` / `zip_path` / `encrypted_path`
  • Task #21 — AFC rename via go-ios PR or in-repo opcode wrapper
## S01E37 — *The Operator's Sweep* Operator dumped a 10-item product roadmap on 2026-05-17; this issue tracks the validated subset of that sweep that shipped in a single phase-2.5 working-tree pass before any commits. Validated items are listed below; the rest stay open as separate follow-up issues. ### Validated 2026-05-17 - **Task #2 — top white chrome bar removed.** Sidebar runs full window height; macOS traffic-light region (~36 px) reserved via `padding-top: 42px` on `.sidebar`. Killed the empty `<header class="chrome">` strip and the `--chrome-h` math from `.layout`. - **Task #3 — iPhone-row click no longer lands in DumpSock.app's folder.** Dropped the bogus AppleScript (\`sidebar of window 1\` isn't a real Finder property); now opens Finder at \`~\` and toasts the user to find their iPhone in the sidebar Locations. - **Task #4 — byte-based progress bar + files-remaining counter.** \`backup.ProgressEvent\` gained \`BytesTotal\` + \`BytesPulled\`; engine sums total bytes after planning and atomically adds size on each successful pull. Frontend's progress bar tracks bytes (more honest than files when sizes vary wildly), plus a new \"N of M files copied · K remaining\" line below. - **Task #1 — Password-protect grays out when Compress is unchecked.** Encryption is applied to the produced \`.zip\` artifact; the UI now enforces that dependency (auto-uncheck Password when Compress unchecks). - **Task #8 — Browse iPhone tab.** New \`App.BrowseRemote\` + \`afc.Client.List\`/\`Stat\` open a one-level AFC view; \`backup.Options.OnlyPaths\` short-circuits the recursive Walk so \"Back up selected\" pulls just the ticked files. - **Task #9 — Storage breakdown click-through.** Donut segments + legend rows carry \`data-browse-to\`; clicking Photos/Videos navigates Browse to \`/DCIM\`, clicking Apps/Other to \`/\`. - **Task #10 — Third-party app data browser.** \`App.ListFileSharingApps\` enumerates user apps with UIFileSharingEnabled; \`App.BrowseApp\` routes through a new \`internal/afc/housearrest.go\` wrapper that tries VendDocuments first (production-signed apps) and falls back to VendContainer (dev-signed). go-ios's hardcoded VendContainer was the InstallationLookupFailed root cause. - **Task #12 — folder selection + folder ops in Browse.** Folder checkboxes now active; \`ExpandRemoteSelection\` flattens a folder selection to files for the engine's OnlyPaths. Per-row Delete works on files and folders via \`afc.Client.RemoveAll\`. (Rename is stubbed pending upstream go-ios AFC RENAME_PATH opcode wrapper — separate follow-up.) - **Task #14 — RemoteRemove verification.** Post-delete \`cl.Stat\` re-check so iOS \"reported success but kept the file\" cases surface honestly to the user. - **Task #15 — Delete button + in-app confirm modal.** New \`.btn-text-danger\` (transparent bg, red text) avoids the previous red-on-red invisibility. \`window.confirm()\` replaced with an in-app modal that actually works inside the Wails webview. - **Task #16 — UIFileSharingEnabled filter.** Discovered go-ios's \`BrowseFileSharingApps()\` is misnamed: under the hood it sends \`{Command: \"Browse\"}\` with no filter, returning every app. Host-side UIFileSharingEnabled filter added. - **Task #17 — AFC error code humanisation.** Codes 8/9/10/11/13/15/16/18/20 now read like English (\"Unlock your iPhone…\", \"This subtree is hardened by iOS 15+…\", \"Unplug and replug…\"). - **Task #18 — App picker drops com.apple.* system bundles.** Switched picker from \`BrowseFileSharingApps\` to \`BrowseUserApps\` + the host-side UIFileSharingEnabled filter; com.apple.Fitness / com.apple.icq and other Apple bundles no longer appear. - **Task #19 — iOS-hardened entries rendered as greyed-out rows.** Previously dropped silently; now appear with a 🔒 icon, \"hidden by iOS\" size column, disabled checkbox/Delete, plus a footer note (\"🔒 N entries are hidden by iOS — accessing them over AFC requires Finder, jailbreak, or the app's own UI\"). ### Workflow rules cemented this session Saved as a binding memory feedback: every future change goes through *task-before-touching* → *test before commit* → *docs/wiki/landing + memory + board update on every state change*. See \`feedback_nonnegotiables.md\` in the project memory directory. ### Still in flight (separate issues / follow-up tasks) - Task #5 — Session restore via \`.dumpsock-session.json\` - Task #6 — Backups list + \`.dumpsock.json\` metadata + Move/Forget - Task #7 — Wring it dry / Compress / Password (operator reported \"hung then said done, no zip\"; surfacing fix in progress) - Task #11 — Scope expansion for iCloud + full-device backup (CLAUDE.md non-goals softened; scaffolds at \`internal/icloud/\` and \`internal/mb2/\`; CLI subcommands \`dumpsock icloud pull\` + \`dumpsock backup-device\` return ErrNotImplemented; plan at \`docs/phase-6-roadmap.md\`) - Task #20 — \`onDone\` surfacing for \`package_error\` / \`zip_path\` / \`encrypted_path\` - Task #21 — AFC rename via go-ios PR or in-repo opcode wrapper
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
hartle-tech/dumpsock#27
No description provided.