KB-1109
03 - Contabo Preflight & Deploy Plan (O6B)
4 min read Revision 1
dot-iu-cutterv0.6O6BG3contabopreflightdeploy-plan
03 - Contabo Preflight & Deploy Plan
O6B · doc 3 of 8 · 2026-05-21 · Gate G3 — Contabo preflight + locked deploy plan. Read-only survey; no host mutation in this gate.
1. Transfer channel (resolved — the O6 blocker is gone)
O6 was blocked because it ran on Contabo with no channel back to the Mac. O6B runs on the Mac, which has a direct outbound SSH channel:
ssh_alias: contabo -> 38.242.240.89 (user root, key ~/.ssh/contabo_vps)
reachable: YES — verified read-only (hostname/uname/python)
transfer: scp Mac -> Contabo (artifact push)
2. Contabo host facts (read-only survey)
host: vmi3080463 (38.242.240.89)
os: Linux 6.8.0-90-generic x86_64
python: 3.12.3 (system)
disk /opt: 96G total, 25G available, 75% used ✓ ample for a 176KB artifact
pytest: ABSENT (ModuleNotFoundError) -- see deploy-plan test note
psycopg2: 2.9.11 present
psycopg3: absent
3. v0.4 pre-state anchor (must be unchanged after deploy)
v0.4_path: /opt/incomex/dot/iu-cutter
v0.4_version: "0.4.0-dryrun-skeleton"
v0.4_tree_sha256: be65de80f6632edbe51f13c59975376c936b2ac12cb8e86577a4c15c0ea173b3
(sha256 of: find iu-cutter -type f | sort | xargs sha256sum | sha256sum)
dot_repo_HEAD: e93424b (/opt/incomex/dot is a git repo)
dot_repo_status: clean for iu-cutter/ (0 changed lines)
4. Target path — confirmed clean
target: /opt/incomex/dot/iu-cutter-v0.6
target_pre_exists: NO ("ls: cannot access ... No such file or directory")
conflicting_v0.6_paths: NONE (find /opt /tmp -name '*iu-cutter-v0.6*' -> empty)
/opt/incomex/dot writable: YES
/tmp writable (staging): YES
5. Locked deploy plan (executed in G4)
strategy: side-by-side, non-destructive (per O6 doc 03 decision)
staging: scp artifact -> /tmp/iu-cutter-v0.6-6625f76.tar.gz
extract -> /tmp/o6b-stage/iu-cutter-v0.6/
promote: mv /tmp/o6b-stage/iu-cutter-v0.6 -> /opt/incomex/dot/iu-cutter-v0.6
(same filesystem /dev/sda1 -> atomic rename)
manifest: write DEPLOY-MANIFEST.txt inside the target dir
v0.4: left in place, untouched
service: none installed, none started, none restarted
kill_switch: execution_enabled stays False
6. Test-strategy decision (pytest absent on Contabo)
finding: Contabo system python has no pytest module.
decision: do NOT install pytest (would be a host mutation outside the
deploy dir). All 21 test files are unittest.TestCase-based, so
the stdlib runner covers the full suite:
python3 -m unittest discover -s tests -p 'test_*.py'
Verified on the dev Mac: "Ran 366 tests / OK".
This is the G5 test path on Contabo — no new dependency needed.
7. Rollback plan (defined BEFORE any host write)
# removes ONLY what O6B creates; v0.4 is never touched:
rm -rf /opt/incomex/dot/iu-cutter-v0.6
rm -f /tmp/iu-cutter-v0.6-6625f76.tar.gz
# no service to stop; no DB change; no .env change; no git change
8. Result
G3_verdict: PASS — preflight clean, deploy plan locked, rollback pre-defined
proceed_to: G4 transfer + deploy side-by-side