First 60 Minutes: From Installation to a Supportable Run
This is the recommended first-launch checklist for a new ChargeLink Native workstation. The goal is not only to prove that the software starts, but to leave the machine in a state that another engineer can understand, repeat and support. Do not skip a failed step and continue: a later protocol error is much harder to diagnose if installation, licensing, networking or the gRPC service was never proven first.
What you will prove
- the installed CLI can be located and executed, and its version is recorded;
- the license state is known and the entitlements match the order;
- the environment doctor passes or has understood warnings;
- the profile you intend to use exists in the installed catalogue;
- a deterministic local protocol flow generates evidence;
- the gRPC Integration API starts and answers;
- artifacts are written to the agreed root and can be integrity-checked;
- the workstation can produce a support bundle.
0–10 minutes — establish the installation identity
$CL = 'C:\ChargeLink\0.5.0-rc2\pc1\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'
Test-Path $CL
chargelink --version
Get-FileHash $CL -Algorithm SHA256
foreach ($d in 'runtime','artifacts','licenses','pki','tests','support') { New-Item -ItemType Directory -Force "$Data\$d" | Out-Null }
Expected: True, chargelink 0.5.0-rc2, and a hash you can compare with the delivery note. If Test-Path is false, return to Install and Activate. Do not copy an executable from another machine.
10–20 minutes — prove licensing and environment health
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license entitlements
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor --strict
Expected: license status shows "status": "verified" and the path C:\ChargeLinkData\licenses\active_license.cllic. If it shows not_activated, activate the supplied file now (chargelink --json license activate --file ...). license entitlements fails with CL-LICENSE-001 (exit 20) when no license is active; that is expected, not an installation fault.
The doctor has four checks: runtime_root, artifact_root, license and product_boundary. Record why each non-ok item is acceptable.
20–30 minutes — discover profiles before starting a protocol
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile list | Out-File -Encoding utf8 "$Data\support\profiles.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile connectors
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json profile show iso15118_20_dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc backends
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc battery-models
Never assume a profile ID from an old procedure. The Profile Catalog lists the built-in profiles; the installed list is authoritative. A profile fixes protocol, role, connector family and EXI mode. Network addresses, ports, certificates and CAN channels are supplied on the command line.
30–40 minutes — run a safe local protocol proof
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse start --dry-run --protocol iso15118-20 --profile-id iso15118_20_dc
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse status
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evse stop
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json evcc local-loopback-smoke --protocol iso15118-20 --profile-id iso15118_20_dc `
--peer-ipv6 '::1' --tcp-port 50118 --max-steps 6 `
--battery-capacity-kwh 80 --initial-soc-pct 20 --target-soc-pct 80 --requested-power-kw 50 --battery-step-seconds 1
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json dc-can virtual-run --protocol chademo --profile dc_can_virtual_evse --frame-count 4
Expected: dry-run validated; loopback completed with SessionSetup and ServiceDiscovery processed; the scripted DC-CAN virtual run producing four frames with "watchdog_status": "within_window". These are software proofs; they do not prove PLC hardware, a physical CAN bus, high-voltage behaviour or a third-party peer.
40–50 minutes — start and prove the gRPC agent
Window 1 (leave open):
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" `
integration serve --listen 127.0.0.1:50051 --state-root "$Data\runtime\integration"
Window 2:
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration capabilities --endpoint http://127.0.0.1:50051
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration session-smoke --endpoint http://127.0.0.1:50051 --protocol iso15118-20 --role evse
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json signals smoke --endpoint http://127.0.0.1:50051
Expected: serving, API 1.8.0, session smoke passed, signal smoke write_read_roundtrip: true. If health fails, do not continue to VeriStand or external automation; resolve the gRPC service first (Troubleshooting).
50–60 minutes — prove evidence and supportability
$Stamp = Get-Date -Format yyyyMMdd-HHmmss
$Out = "$Data\support\first-60-minutes-$Stamp"
New-Item -ItemType Directory -Force $Out | Out-Null
chargelink --version | Out-File -Encoding utf8 "$Out\version.txt"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status | Out-File -Encoding utf8 "$Out\license-status.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json doctor | Out-File -Encoding utf8 "$Out\doctor.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list | Out-File -Encoding utf8 "$Out\runtime.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts index | Out-File -Encoding utf8 "$Out\artifact-index.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051 | Out-File -Encoding utf8 "$Out\grpc-health.json"
Get-ComputerInfo | Out-File -Encoding utf8 "$Out\windows.txt"
Get-NetAdapter | Format-Table -AutoSize | Out-File -Encoding utf8 "$Out\network-adapters.txt"
# integrity of the last loopback run
$Last = ((cl --json runtime list | ConvertFrom-Json).sessions | Where-Object { $_.health.role -eq 'evcc' } | Select-Object -Last 1).health.run_id
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $Last | Out-File -Encoding utf8 "$Out\integrity.json"
Each entry of sessions carries health, heartbeat, lock and pid objects; the run ID and role are in health.
First-hour sign-off
| Check | Pass criteria | Result |
|---|---|---|
| Installed CLI | Version and hash recorded; matches delivery note | ☐ |
| License | Status verified; entitlements match the order | ☐ |
| Environment | Doctor has no unexplained non-ok item | ☐ |
| Profiles | Intended profiles exist in the installed catalogue | ☐ |
| Local protocol | Dry-run, loopback and DC-CAN virtual run complete | ☐ |
| gRPC | Health, session and signal smoke pass | ☐ |
| Evidence | Artifacts under the agreed root; integrity check passes | ☐ |
| Supportability | First-hour evidence directory complete | ☐ |
Next: Environment and Bench Preflight for the protocol and hardware you intend to connect.

