Support Escalation and Evidence Collection
A good support case lets another engineer reproduce the failure without first asking which version, which profile, which interface and where the logs are. This chapter defines the minimum information to collect and how to prepare it safely. Support is provided through the channel named in your commercial agreement; include the licence ID that license status shows.
Before opening a case
- Stop the active test safely (
evse stop,evcc stop, or on the VeriStand bench Stop external EVCC, Stop session and Shutdown workflow on the ChargeLink Operator screen). - Preserve the failing run directory; do not rerun over it.
- Record local time and timezone of the failure, what you expected and what happened.
- Collect product, environment and runtime evidence with the template below.
- Redact before sharing outside your organisation.
Collection template
The kit has a charger\ and a vehicle\ folder; the CLI is charger\bin\chargelink.exe.
$CL = 'C:\Program Files\DEVlink\ChargeLink\<VERSION>\charger\bin\chargelink.exe'
$Data = "$env:ProgramData\DEVlink\ChargeLink\data"
$RunId = '<RUN_ID>'
$Case = "$Data\support\case-$(Get-Date -Format yyyyMMdd-HHmmss)"
New-Item -ItemType Directory -Force $Case | Out-Null
chargelink --version | Out-File -Encoding utf8 "$Case\version.txt"
Get-FileHash $CL -Algorithm SHA256 | Out-File -Encoding utf8 "$Case\binary-hash.txt"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json license status | Out-File -Encoding utf8 "$Case\license-status.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json env doctor --strict | Out-File -Encoding utf8 "$Case\doctor.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list | Out-File -Encoding utf8 "$Case\runtime-list.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime inspect --run-id $RunId | Out-File -Encoding utf8 "$Case\runtime-inspect.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts inspect --run-id $RunId | Out-File -Encoding utf8 "$Case\artifact-inspect.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $RunId | Out-File -Encoding utf8 "$Case\integrity.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json integration health --endpoint http://127.0.0.1:50051 | Out-File -Encoding utf8 "$Case\grpc-health.json"
Get-ComputerInfo | Out-File -Encoding utf8 "$Case\windows.txt"
Get-NetAdapter | Format-List * | Out-File -Encoding utf8 "$Case\net-adapters.txt"
Get-NetIPAddress -AddressFamily IPv6 | Format-Table -AutoSize | Out-File -Encoding utf8 "$Case\ipv6-addresses.txt"
Get-NetFirewallRule -Enabled True | Where-Object DisplayName -Match 'ChargeLink' | Format-Table DisplayName,Direction,Action -AutoSize | Out-File -Encoding utf8 "$Case\firewall.txt"
# redacted run evidence and support-bundle manifest
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts redact --run-id $RunId | Out-File -Encoding utf8 "$Case\redaction-result.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts support-bundle --run-id $RunId | Out-File -Encoding utf8 "$Case\support-bundle-result.json"
Copy-Item "$Data\artifacts\$RunId\redacted" "$Case\run-redacted" -Recurse
Copy-Item "$Data\artifacts\$RunId\support_bundle\support_bundle_manifest.json" "$Case\support_bundle_manifest.json"
For a VeriStand bench case, add the whole run folder of the session, runs\<time>-veristand in the kit folder (it contains no key; Reading the result), the last error code that Operator.LastErrorCode showed, and, for a problem with the import, charger\preflight.json and charger\install-<time>.log. Never add TLS keys, the test PKI folder or the vehicle\tls folder.
Ticket structure
Subject: <protocol/integration> - <short failure> - chargelink <version>
ChargeLink version and binary SHA-256:
License status / entitlements (redacted):
Protocol, role and profile ID:
ChargeLink role: charger / vehicle; DUT role: vehicle / charger / none (self-test)
Mode: dry-run / loopback / reference-responder / plant-coupled / vehicle live session / sim / test campaign
DUT identity, model, firmware:
Workstation Windows build; adapter and driver; VeriStand version (if used):
Run ID and artifact root:
Failure timestamp + timezone:
Expected behaviour:
Observed behaviour and first error code (CL-...):
First visible protocol event that diverged (from traces\live-v2gtp-frames.jsonl):
Reproducible? yes/no; did the same setup work previously? version/date
Safety impact: none / session stopped / bench interlock / other
Attached: case folder zip + SHA-256
Redact before sharing
The built-in redaction removes sensitive_credential content and copies only export_allowed files. Still review for: IPv6/MAC addresses and host names, certificate subjects and serial numbers, EVCCID/EVSEID and contract identifiers, customer signal names and values, DUT serial numbers, Windows user and domain names, paths that reveal customer project names. Never send a private key, PFX file, password or the PFX password variable, even when the failure is a TLS handshake; the handshake diagnostics contain fingerprints and metadata, which is enough.
Package the reviewed bundle
$Zip = "$Case.zip"
Compress-Archive -Path "$Case\*" -DestinationPath $Zip -Force
Get-FileHash $Zip -Algorithm SHA256
Send the SHA-256 with the case so the receiver can verify integrity.
Severity guidance
| Severity | Example | Operator action |
|---|---|---|
| S1 — Safety / service critical | Plant-coupled session did not reach the safe state on E-stop, isolation fault or watchdog; product prevents a critical validated operation | Put the bench in a safe state, stop live testing, escalate immediately through the contracted critical channel |
| S2 — Major | Reproducible failure blocks a protocol session or the workspace with no workaround | Preserve evidence; open a high-priority case |
| S3 — Normal | Functional issue with a workaround or limited scope | Normal case with complete evidence |
| S4 — Question / documentation | Usage question, unclear command, enhancement request | Include version and the page or command reference |
What support should not have to ask for
Version and hash, license state, protocol/role/profile and mode, run ID, timestamp, environment identity, the first error code, the first diverging protocol event and the redacted run evidence. Missing these is the most common reason a case slows down.

