# Installer v2 Rollout Plan

## 1. Overview

The Docker agent installer (`install-docker-agent.sh`) has been refactored into a
modular, testable v2. Key improvements include:

- Shared library usage (`scripts/lib/*.sh`) for logging, HTTP, and systemd
  helpers, reducing duplication and easing maintenance.
- Support for `--dry-run`, enabling administrators to preview actions safely.
- Bundled single-file distribution generated by `scripts/bundle.sh` for curl
  based installs, while keeping modular sources in the repository.
- New smoke and integration tests to catch regressions.

Benefits:

- **Users:** Clearer logging, dry-run validation, safer rollbacks, and improved
  error handling.
- **Developers:** Consistent helper functions, faster iteration on fixes, and
  reusable testing infrastructure.

## 2. Rollout Strategy

### Phase 1: Alpha Testing (Internal)
- Enable v2 via feature flag for internal environments only.
- Exercise on development clusters, CI agents, and dogfood installations.
- Validate dry-run, full install, multi-target, and uninstall scenarios.
- Duration: ~1 week.

### Phase 2: Beta Testing (Early Adopters)
- Announce availability in release notes and internal channels.
- Provide explicit opt-in instructions (`PULSE_INSTALLER_V2=1`).
- Monitor install success metrics, support channels, and gather structured
  feedback from operators.
- Duration: ~2 weeks.

### Phase 3: General Availability
- Flip feature flag default to v2 while retaining v1 as fallback for one full
  release cycle.
- Publish deprecation notice for the legacy installer.
- After the grace period, remove v1 from distribution.
- Duration: 1 release cadence (approx. 4–6 weeks).

## 3. Feature Flag Mechanism

Users can select installer versions via environment variable:

```bash
# Enable v2 (early adopter)
export PULSE_INSTALLER_V2=1
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...

# Force legacy v1
export PULSE_INSTALLER_V2=0
curl -fsSL https://download.pulse.example/install-docker-agent.sh | bash -s -- ...

# Server-side pseudo-code
if [[ "${PULSE_INSTALLER_V2:-0}" == "1" ]]; then
  serve dist/install-docker-agent.sh
else
  serve scripts/install-docker-agent-legacy.sh
fi
```

The download endpoint should inspect the flag (query parameter, header, or
environment variable) and serve the appropriate script.

## 4. Testing Checklist

### Before Rollout
- [ ] Smoke tests (`scripts/tests/run.sh`) passing
- [ ] Integration tests (`scripts/tests/integration/...`) passing
- [ ] Ubuntu 20.04 & 22.04 validated
- [ ] Debian 11 & 12 validated
- [ ] With and without Docker binary
- [ ] Multi-target configuration verified
- [ ] Uninstall path verified
- [ ] Documentation updated (INSTALL, FAQ, etc.)
- [ ] Release notes drafted

### During Rollout
- [ ] Monitor error rates (CI dashboards, telemetry)
- [ ] Watch support channels/tickets for installer issues
- [ ] Sample successful installations daily
- [ ] Collect structured feedback from early adopters

## 5. Success Metrics

- Installation success rate ≥ 99%
- Median installation duration (baseline ±10%)
- Top error categories and frequency trending downward
- Positive/neutral user feedback (no significant negative trend)
- Rollback requests < 1%

## 6. Rollback Plan

If blocking issues surface:

### Quick Rollback (< 5 minutes)
1. Replace served script with v1 variant:
   ```bash
   cp scripts/install-docker-agent-legacy.sh /var/www/html/install-docker-agent.sh
   # or update symlink pointing to dist/install-docker-agent.sh
   ```
2. Update documentation to reflect temporary rollback.
3. Broadcast notice in release channels/support chat.

**File references**
- Legacy: `scripts/install-docker-agent-legacy.sh`
- Bundled v2: `dist/install-docker-agent.sh`
- Served location: `/download/install-docker-agent.sh` (symlink/HTTP root)

## 7. Communication Plan

**Announcements**
- Release notes covering v2 highlights and rollout phases.
- Update product docs (`INSTALL.md`, quick reference).
- Post in GitHub Discussions / community forums.
- Optional blog post for broader awareness.

**User Guidance**
- Explain how to opt-in/out using `PULSE_INSTALLER_V2`.
- Highlight new capabilities (`--dry-run`, improved messaging).
- Provide support contact and bug-reporting instructions.
- Link to troubleshooting resources.

## 8. Known Limitations

- Limited testing on non-`systemd` init systems (manual startup handled but not
  optimized).
- ARM architectures covered via dry-run and download stubs; on-device testing
  pending.
- Requires Bash 4.0+ (same as v1) — document for older environments.

## 9. Post-Rollout Tasks

- [ ] Remove feature flag after one successful release cycle.
- [ ] Retire legacy installer artifacts and adjust CI pipelines.
- [ ] Update all docs to reference v2 only.
- [ ] Apply modular pattern to remaining installers (install.sh,
      install-sensor-proxy.sh, pulse-auto-update.sh).
- [ ] Expand integration tests to cover additional distributions and scenarios.
