Severity: MEDIUM
All four `PackCommand` subcommands repeat identical initialization (`Environment`, `CLIOutput`, `ShellRunner`, `PackRegistryFile`) and three share the same registry data loading `do/catch` pattern (~7 lines verbatim 3x).
Fix: Extract a `PackCommandContext` struct with a `loadRegistry()` method.