Skip to content

Commit 51c0451

Browse files
committed
docs(package): record update rollback smoke validation
1 parent a6e94a5 commit 51c0451

3 files changed

Lines changed: 137 additions & 23 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,10 @@ elprobe run <package>
173173
- Validated the leaf-package remove/reinstall cycle with `libform`:
174174
remove while active, restart detached, reinstall from release asset, restart
175175
active again and pass `elprobe run libform`.
176+
- Validated the update/rollback restart cycle with `libform`: update from
177+
`2.0.0` to `2.0.0-dev` using the official development release asset, restart
178+
active on dev, rollback to local `2.0.0`, restart active on stable and pass
179+
`elprobe run libform` after both restarts.
176180

177181
### Package doctor and recovery
178182

changelogs/3.0.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,89 @@ Validation:
399399
The dry-run and apply output both mention the allowlist and state that installed
400400
package versions and backups are preserved.
401401

402+
### Update and rollback restart validation
403+
404+
The package lifecycle was validated with a real second version, not only with a
405+
same-version reinstall.
406+
407+
Test target:
408+
409+
```text
410+
Package: LibForm
411+
Stable version: 2.0.0
412+
Development version: 2.0.0-dev
413+
Development release: https://github.com/ImperaZim/LibForm/releases/tag/v2.0.0-dev
414+
Development asset: LibForm-2.0.0-dev.easylib.zip
415+
```
416+
417+
Update flow:
418+
419+
```text
420+
/easylibrary packages update libform development
421+
/easylibrary packages update libform development confirm
422+
/easylibrary packages status libform
423+
/easylibrary packages doctor
424+
restart
425+
/easylibrary packages status libform
426+
/easylibrary packages doctor
427+
elprobe run libform
428+
```
429+
430+
Observed before restart:
431+
432+
```text
433+
libform / LibForm v2.0.0-dev [installed-pending-restart]
434+
Packages: 13 / installed: 13 / active: 12 / pending restart: 1
435+
Problems: 0
436+
```
437+
438+
Observed after restart:
439+
440+
```text
441+
libform / LibForm v2.0.0-dev [active]
442+
Packages: 13 / installed: 13 / active: 13 / pending restart: 0
443+
functional=yes source=package-backed-plugin
444+
```
445+
446+
Rollback flow:
447+
448+
```text
449+
/easylibrary packages rollback libform 2.0.0
450+
/easylibrary packages rollback libform 2.0.0 confirm
451+
/easylibrary packages status libform
452+
/easylibrary packages doctor
453+
restart
454+
/easylibrary packages status libform
455+
/easylibrary packages doctor
456+
elprobe run libform
457+
```
458+
459+
Observed before restart:
460+
461+
```text
462+
libform / LibForm v2.0.0 [installed-pending-restart]
463+
Active runtime path: .../packages/libform/2.0.0-dev
464+
Staged package path: .../packages/libform/2.0.0
465+
Pending restart operation: rollback -> v2.0.0.
466+
Packages: 13 / installed: 13 / active: 12 / pending restart: 1
467+
Problems: 0
468+
```
469+
470+
Observed after restart:
471+
472+
```text
473+
libform / LibForm v2.0.0 [active]
474+
Packages: 13 / installed: 13 / active: 13 / pending restart: 0
475+
functional=yes source=package-backed-plugin
476+
```
477+
478+
This proves the key 3.0-dev package lifecycle rule:
479+
480+
```text
481+
Package install, update, remove and rollback are restart-safe ownership
482+
operations. They do not hot-swap already loaded PHP code.
483+
```
484+
402485
### Release asset install validation
403486

404487
The full package-backed server was rebuilt from official GitHub Release

docs/smoke-tests.md

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ Pass criteria:
484484

485485
## Scenario I: update-restart
486486

487-
Status target: required before stable.
487+
Status: passed on 2026-06-20 with `libform`.
488488

489489
Purpose:
490490

@@ -495,24 +495,32 @@ after restart.
495495

496496
Precondition:
497497

498-
At least two package versions must be available in the official package index or
499-
local release assets.
498+
At least two package versions must be available in official GitHub Release
499+
assets. The 2026-06-20 validation used:
500+
501+
```text
502+
stable: LibForm v2.0.0
503+
development: LibForm v2.0.0-dev
504+
asset: LibForm-2.0.0-dev.easylib.zip
505+
release: https://github.com/ImperaZim/LibForm/releases/tag/v2.0.0-dev
506+
```
500507

501508
Steps:
502509

503510
```text
504-
/easylibrary packages status libserializer
505-
/easylibrary packages update libserializer stable
506-
/easylibrary packages update libserializer stable confirm
511+
/easylibrary config doctor
512+
/easylibrary packages update libform development
513+
/easylibrary packages update libform development confirm
514+
/easylibrary packages status libform
507515
/easylibrary packages doctor
508516
```
509517

510518
Restart, then validate:
511519

512520
```text
513-
/easylibrary packages status libserializer
521+
/easylibrary packages status libform
514522
/easylibrary packages doctor
515-
/elprobe run libserializer
523+
/elprobe run libform
516524
```
517525

518526
Expected:
@@ -525,13 +533,21 @@ Expected:
525533
Pass criteria:
526534

527535
```text
528-
Before restart: staged target visible
529-
After restart: active target visible
536+
Before restart: libform / LibForm v2.0.0-dev [installed-pending-restart]
537+
Before restart: Packages: 13 / installed: 13 / active: 12 / pending restart: 1
538+
After restart: libform / LibForm v2.0.0-dev [active]
539+
After restart: Packages: 13 / installed: 13 / active: 13 / pending restart: 0
530540
functional=yes
531541
```
532542

533-
If no second version exists yet, mark this scenario as blocked by release asset
534-
availability, not failed.
543+
Observed notes:
544+
545+
- dry-run reported current version `2.0.0` and target `2.0.0-dev`;
546+
- confirm downloaded from official GitHub Releases;
547+
- checksum verification passed;
548+
- before restart, doctor showed the staged package target and no problems;
549+
- after restart, stale restart markers were cleared because the package-backed
550+
proxy loaded the staged path.
535551

536552
## Scenario J: remove-restart
537553

@@ -580,7 +596,7 @@ No broken proxy left active
580596

581597
## Scenario K: rollback-restart
582598

583-
Status target: required before stable.
599+
Status: passed on 2026-06-20 with `libform`.
584600

585601
Purpose:
586602

@@ -591,22 +607,25 @@ after restart.
591607

592608
Precondition:
593609

594-
At least one previous local version or backup must exist.
610+
At least one previous local version or backup must exist. The 2026-06-20
611+
validation rolled back from `LibForm 2.0.0-dev` to the already installed local
612+
`LibForm 2.0.0` package directory.
595613

596614
Steps:
597615

598616
```text
599-
/easylibrary packages rollback libserializer
600-
/easylibrary packages rollback libserializer <version> confirm
617+
/easylibrary packages rollback libform 2.0.0
618+
/easylibrary packages rollback libform 2.0.0 confirm
619+
/easylibrary packages status libform
601620
/easylibrary packages doctor
602621
```
603622

604623
Restart, then validate:
605624

606625
```text
607-
/easylibrary packages status libserializer
626+
/easylibrary packages status libform
608627
/easylibrary packages doctor
609-
/elprobe run libserializer
628+
/elprobe run libform
610629
```
611630

612631
Expected:
@@ -618,13 +637,22 @@ Expected:
618637
Pass criteria:
619638

620639
```text
621-
Selected version active after restart
640+
Before restart: libform / LibForm v2.0.0 [installed-pending-restart]
641+
Before restart: active runtime path points to libform/2.0.0-dev
642+
Before restart: staged package path points to libform/2.0.0
643+
After restart: libform / LibForm v2.0.0 [active]
622644
Problems: 0
623645
functional=yes
624646
```
625647

626-
If no rollback target exists yet, mark this scenario as blocked by local target
627-
availability, not failed.
648+
Observed notes:
649+
650+
- dry-run listed the rollback target and planned state/lock/restart/proxy
651+
writes;
652+
- confirm regenerated the package-backed proxy for the stable target;
653+
- before restart, doctor kept the rollback pending because the active runtime
654+
was still the dev path;
655+
- after restart, doctor returned to `13 active / 0 pending / 0 problems`.
628656

629657
## Scenario L: cleanup-safety
630658

@@ -843,8 +871,7 @@ Before tagging `3.0.0`, these must be true:
843871
- `mixed-standalone`, `standalone-to-package` and `package-to-standalone` pass.
844872
- `command-provider-fallback` passes.
845873
- `config-split` passes.
846-
- `update-restart`, `remove-restart` and `rollback-restart` pass or are
847-
explicitly blocked by missing release assets and documented.
874+
- `update-restart`, `remove-restart` and `rollback-restart` pass.
848875
- `cleanup-safety` passes.
849876
- `proxy-recovery` passes.
850877
- `no-devtools-no-probe` passes with a real PHAR.

0 commit comments

Comments
 (0)