Candidate release identity is exact
DEPLOY ONE RELEASE.
PROVE WHAT IS RUNNING.
Evulgare’s cPanel cutover contract stages and verifies one complete root tree before an operator changes the live application. Build identity, runtime bytes, Passenger configuration, database readiness, routes, and evidence review remain separate checks.
2.0.0-rc.9-WIP
The values that must not drift.
- Python
- 3.13.14
- Application root
- evulgare.com
- URL path
- EMPTY
- Startup file
- cpanel_app.py
- Entry point
- application
- Public root
- /
Do not configure cPanel to start passenger_wsgi.py. cPanel generates that wrapper. It must point to cpanel_app.py and expose application.
Each phase produces evidence before the next begins.
-
CUT-01
BACKUP
Create timestamped backups of .env, MySQL, and the current application root.
CHANGES LIVE STATE -
CUT-02
VERIFY ARCHIVE
Verify root layout, build identity, runtime-integrity manifest, member hashes, modes, and forbidden-file rules.
READ-ONLY / STAGING -
CUT-03
STAGE
Extract to a separate staging directory and verify the clean tree before touching the active root.
READ-ONLY / STAGING -
CUT-04
REPLACE ROOT
Replace the active root with the verified staged tree while preserving the private environment file.
CHANGES LIVE STATE -
CUT-05
INSTALL AND MIGRATE
Install requirements in the Python 3.13.14 virtual environment, run Alembic upgrade, and run idempotent seeding.
CHANGES LIVE STATE -
CUT-06
DIAGNOSE
Run full-stack, runtime-integrity, deterministic proof, memory, preflight, and pytest checks.
READ-ONLY / STAGING -
CUT-07
RESTART
Restart Passenger only after all staged and application checks pass.
CHANGES LIVE STATE -
CUT-08
LIVE PROBE
Verify candidate version, database reachability, catalog readiness, routes, redirects, headers, cache, compression, and absence of secret leakage.
READ-ONLY / STAGING -
CUT-09
EVIDENCE REVIEW
Create a bounded production-host evidence candidate, review it explicitly, and preserve residual unknowns.
READ-ONLY / STAGING
Critical bytes are checked against the packaged manifest.
| Path | Expected bytes | Actual bytes | State |
|---|---|---|---|
app/__init__.py |
10163 | 10163 | PASS |
app/blueprints/api_v2/routes.py |
27886 | 27886 | PASS |
app/blueprints/docs/routes.py |
24279 | 24279 | PASS |
app/blueprints/main/routes.py |
8666 | 8666 | PASS |
app/blueprints/simulations/routes.py |
11178 | 11178 | PASS |
app/config.py |
4407 | 4407 | PASS |
app/content/release/build-info.json |
558 | 558 | PASS |
app/content/simulations/scenarios.json |
78319 | 78319 | PASS |
app/content/simulations/workbench-v2.json |
42775 | 42775 | PASS |
app/deployment_cutover.py |
10974 | 10974 | PASS |
app/release_metadata.py |
4617 | 4617 | PASS |
app/runtime_integrity.py |
12910 | 12910 | PASS |
app/security.py |
3710 | 3710 | PASS |
app/simulation_explorer.py |
15430 | 15430 | PASS |
app/simulation_registry.py |
4135 | 4135 | PASS |
app/simulation_workbench.py |
88787 | 88787 | PASS |
app/static/css/base.css |
140904 | 140904 | PASS |
app/static/css/simulation-workbench.css |
40922 | 40922 | PASS |
app/static/js/simulation-explorer.js |
10316 | 10316 | PASS |
app/static/js/simulation-workbench.js |
62988 | 62988 | PASS |
cpanel_app.py |
5828 | 5828 | PASS |
env_loader.py |
2233 | 2233 | PASS |
requirements-dev.txt |
55 | 55 | PASS |
requirements.txt |
477 | 477 | PASS |
wsgi.py |
285 | 285 | PASS |
Runtime status SHA-256 31304b2be16f5e4479768a2ead683f56217028cfe5479136475720ccbf91c9fe
Liveness is not readiness.
/livez proves the process can expose immutable package identity. /readyz additionally requires matching runtime bytes, no configured-version conflict, a reachable database, and a ready ten-record simulation catalog.
- Repository-controlled package version equals the candidate release.
- Configured APP_VERSION is absent or matches the package version.
- All critical runtime files match the packaged integrity manifest.
- The cPanel Passenger wrapper points to cpanel_app.py/application and is not recursive.
- MySQL is reachable and Alembic migration state is current.
- The ten-record Simulation Explorer catalog reports READY.
- No required route returns an unhandled server error.
Rollback preserves history.
- Preserve the pre-cutover root and database backup until live acceptance completes.
- Rollback must restore a mutually compatible root, database schema, and private environment.
- A rollback restores technical state only; it does not erase evidence of the failed cutover.
A rollback restores technical state. It does not delete failed-cutover evidence or prove that downstream effects were remedied.
The contract is checked without claiming deployment occurred.
cPanel Python version is exact
Root application path is unprefixed
Startup module is cpanel_app.py
WSGI entry point is application
Passenger wrapper remains cPanel-owned
Complete-root replacement is required
Private environment remains outside the ZIP
All nine cutover phases are present and ordered
Live probe includes candidate identity and readiness routes
Rollback is not automatic
No automatic activation or migration
No automatic release promotion
Runtime integrity proof passes
Public persistence remains disabled
Synthetic null sink remains explicit
Cutover SHA-256 48d38ca6a489dc97862cf8dbfeb923f704cb6c712bd01d4bfbb4e9791977a9d2
Proof SHA-256 851a124de664a327389a4d94382c4e684255e12bfff1121dc2c36de4178c8678
DEPLOYMENT EVIDENCE IS NOT OPERATIONAL AUTHORITY.
This surface does not control a vehicle, select a target, authorize force, alter a database, activate Passenger, or promote a release. Every public simulation remains synthetic and terminates at SYNTHETIC_NULL_SINK.