Skip to content

Phase 12.L.E.4 — first Linux lifecycle E2E (E1.u1 download 404)

Placeholder ppxd requested to merge phase12.L.E.4-linux-full-lifecycle into main

Summary

First production-flow E2E on the Linux side. Mirrors the J.E.3 Windows scoping discipline: start with simplest Phase A error scenario, surface any production .sh bugs the J.L.E.1 placeholder + parse pin couldn't catch, layer on full lifecycle in J.L.E.5+.

Tier 🟢 high-fidelity. Production .sh loaded verbatim via LinuxTentacleUpgradeStrategy.BuildScript; real LocalReleaseMirror serving real HTTP; real curl + tar on agent side. Only upstream GitHub Releases CDN replaced. Phase A only — Phase B (systemd-run + systemctl restart) lands in J.L.E.5.

New infrastructure

Artifact Role
LocalReleaseMirror (copied from Windows project verbatim) Same wire shape (zip / tar.gz / .sha256). Intentional copy with explicit drift-acceptance note — refactor to shared library if meaningful divergence appears
LinuxLifecycleContext IDisposable: fixture + mirror + state-dir override + cleanup. GUID-suffixed isolation. Tarball-only method render (skips apt/yum host-config sensitivity). 5min bash timeout matching production.

New test (1)

E1u1_DownloadVersionNotFound_ExitsSixAndWritesFailedStatusWithDownloadDetail

Step Assertion
Mirror returns 404 for target version (setup)
.sh exits 6 Documented per .sh header: "target tarball URL not reachable"
last-upgrade.json written with Status=FAILED Operator UI visibility
Detail contains "not reachable" Operator-actionable failure mode
Mirror got the HEAD probe Proves .sh reached the network (vs failing earlier in Phase A)

Each assertion has a customMessage explaining DIFFERENT possible exit codes (2 / 14) so a regression's error points at the right diagnosis.

Workflow filter updated

Default now includes Category=LinuxTentacleUpgradeLifecycleE2E.

Local verification (macOS)

6/6 tests pass: 3 cross-platform script tests run, 3 Linux-only tests skip-guard via IsAvailable=false. Linux runner verification on this PR's auto-trigger.

Expected Linux runner outcomes

This is the first time a real .sh upgrade flow runs on a real Linux runner end-to-end. May surface bugs analogous to J.E.3.1's 3 Windows P0s (placeholder-in-comment, Get-FileHash auto-loader, etc.). The detailed customMessage diagnostics + audit trail will point directly at the failing layer.

Next (J.L.E.5)

  • SHA mismatch test (E12.u1-Linux analog)
  • Linux full lifecycle (E1.h-Linux): needs LinuxServiceFixture-installed unit + Phase B handoff via systemd-run --scope. Larger work, own PR.

🤖 Generated with Claude Code

Merge request reports

Loading