10 IT support · Application deployment · POSIX shell
Endpoint application deployment and rollback
A disposable endpoint accepts a release that passes package checks but fails its health test, returns to the previous version, and then installs a corrected release.
- Issue
- A release passes its package checks but the application is unhealthy after activation. Can the endpoint restore the last healthy version without changing the named configuration and user-state files?
- Decisive evidence
- Release 2.0.0 passed its hash and version checks, failed post-activation health, and restored healthy 1.0.0.E02
- Result
- A successful package transfer is not a successful deployment. The active version, application health, rollback result, and user-state boundary all need separate checks.
- Boundary
- This local macOS lab uses one synthetic application and tar packages.Full limit
- Completion
- Complete within stated scope
- Execution
- Local disposable-endpoint run
- Review
- Scripted assertions and artifact review
- Evidence
- Selected evidence on this page
- macOS ARM64
- POSIX shell
- Versioned tar packages
- Disposable endpoint root
The support question
A release passes its package checks but the application is unhealthy after activation. Can the endpoint restore the last healthy version without changing the named configuration and user-state files?
Project record: Versioned releases, the deployment wrapper, an inserted failure, rollback, new-process retests, and the public evidence package.
Interactive view
Follow the release before and after activation.
Package validation, application health, the active version, and preserved data are separate checks. Choose a state to see where the release stops.
Healthy 1.0.0 is active before a new release is introduced.
- 01PackageHash and versionnormal
- 02ActivationCurrent release linknormal
- 03Health checkConfiguration contractnormal
- 04Active version1.0.0 or 2.0.1normal
- 05Named dataConfig and user statenormal
Release 2.0.0 passes package checks and activates, but its health check cannot find the required configuration key.
- 01PackageHash and versionnormal
- 02ActivationCurrent release linkchanged
- 03Health checkConfiguration contractfailed
- 04Active version1.0.0 or 2.0.1failed
- 05Named dataConfig and user statenormal
The active link returns to 1.0.0 and a separate health check passes.
- 01PackageHash and versionnormal
- 02ActivationCurrent release linkchanged
- 03Health checkConfiguration contractnormal
- 04Active version1.0.0 or 2.0.1normal
- 05Named dataConfig and user statenormal
Release 2.0.1 passes in a new process, and a later rerun makes no activation change.
- 01PackageHash and versionnormal
- 02ActivationCurrent release linkchanged
- 03Health checkConfiguration contractnormal
- 04Active version1.0.0 or 2.0.1normal
- 05Named dataConfig and user statenormal
Deployment sequence
Verify the package, activate it, test health, and prove the rollback.
- 01
Create a healthy 1.0.0 baseline and record the active version, health output, configuration hash, and synthetic user-state hash.
- 02
Activate 2.0.0 after its SHA-256 and declared version match, then let its deliberately incompatible health check fail.
- 03
Restore the previous release pointer and run a separate health check against 1.0.0.
- 04
Deploy corrected 2.0.1, retest it in a new shell process, and repeat the deployment to confirm that an already-compliant endpoint makes no activation change.
- 05
Compare the two named data-file hashes after failure, correction, and rerun, then validate the public evidence manifest.
Evidence from the lab
The failed activation, restored baseline, corrected release, and data boundary.
Captured output from the retained lab run. The editorial image explains the sequence and is not execution evidence.

declared_version=2.0.0
action=activate
health_error=missing_api_url
health_exit=42
rollback_action=restore
rollback_version=1.0.0
status=healthy
result=health-check-failedinstalled_version=1.0.0
config_key=server_url
state=available
status=healthyFull evidence archive5 additional artifacts+
declared_version=2.0.1
action=activate
status=healthy
health_exit=0
result=deployed
installed_after=2.0.1retest_version=2.0.1
config_key=server_url
state=available
status=healthyinstalled_before=2.0.1
status=healthy
action=none
reason=already-compliant
installed_after=2.0.1managed_boundary=releases/
configuration_boundary=config/endpoint.conf
user_state_boundary=user-data/user-state.txt
configuration_result=unchanged
user_state_result=unchangedPublic package
• baseline and controlled failure
• rollback and correction retests
• already-compliant rerun
• named data boundary
• environment, scope, and SHA-256 checksumsResult and limits
What changed, and what this lab does not prove.
Result
Release 2.0.0 passed its package checks, failed health with a missing configuration key, and returned to healthy 1.0.0. Corrected 2.0.1 passed during deployment and in a separate process. A later rerun made no activation change. The two named data-file hashes did not change.
Limit
This local macOS lab uses one synthetic application and tar packages. It does not cover Windows installers, Intune, Configuration Manager, MDM, package signing, fleet deployment, production use, or interrupted activation. The data check covers two named files only.
Claims and evidence
What the evidence supports.
The failed release remains staged but inactive, and the test covers one controlled incompatibility.
EvidenceE02E03E08The result applies to one local synthetic application.
EvidenceE04E05E06E08The check covers two named files outside the managed release directory.
EvidenceE07E08