ChargeLink Native

Trace, Evidence and Reports

ChargeLink Native stores machine-readable traces, reports, evidence and diagnostic envelopes below the artifact root. These files are the operational record of what ChargeLink started, what it observed, which test logic ran, how a verdict was produced and whether the evidence remained unchanged after the run. This chapter explains the run-oriented artifact model, how to find and validate a run, and how to prepare a safe support handoff.

Exported artifacts can contain network identifiers, certificate metadata, protocol payload fields and customer signals. Apply the built-in redaction policy and define retention before sharing evidence outside your organisation.

Evidence flow from a run to a support bundle Run--run-id GOT-B03-…traces, EXI, status,reportsevse · sim · test run manifest.jsonSHA-256 per fileredaction class,export_allowedartifacts inspect Integrityrecompute and compareverified or failed;missing, mismatchesartifacts integrity Redactredacted\ copycredentials neverexportedartifacts redact Support bundlemanifest ofexportable fileszip + SHA-256support-bundle Same --runtime-root and --artifact-root on every command. Runtime files (locks, heartbeats) explain what happened to the process; artifacts explain what was observed. Review the redacted set by hand before it leaves the organisation; the bundle manifest is what support receives.
From a run directory to a support bundle: inspect, verify, redact, bundle.

1. Runs, roots and IDs

RootDefaultPurpose
Runtime root.chargelink\runtime under the current directorySession state, PID, lock and heartbeat files, role locks, recovery, gRPC state
Artifact root.chargelink\artifacts under the current directoryOne directory per run: manifest, command result, traces, reports

Always pass absolute roots. The examples pass --runtime-root C:\ChargeLinkData\runtime and --artifact-root C:\ChargeLinkData\artifacts on every command. A command executed without the same roots looks in a different place and reports that no session or manifest exists.

$CL   = 'C:\ChargeLink\0.5.0-rc2\pc1\bin\chargelink.exe'
$Data = 'C:\ChargeLinkData'
$RunId = 'GOT-BENCH03-ISO20DC-20260923-001'

Run IDs: pass --run-id on commands that support it (evse start, sim *, dc-can *, protocol *-live-stack); otherwise ChargeLink generates cl-<role>-<unix_ms>. A good run ID is unique, readable and stable: <SITE>-<BENCH>-<PROTOCOL>-<YYYYMMDD>-<SEQ>. Avoid spaces, personal names and secrets.

2. The run directory

C:\ChargeLinkData\artifacts\<run-id>\
  manifest.json                schema chargelink-artifact-manifest-v2; one entry per file with size, sha256, redaction_class, export_allowed
  command_result.json          the JSON result of the command that produced the run
  traces\*.jsonl               chronological events (schema chargelink-protocol-trace-event-v1 per line)
  traces\live-v2gtp-frames.jsonl   every V2GTP frame: direction, payload type, length, decode verdict
  exi\*.exi                    raw EXI captures (loopback and fixture lanes)
  protocol\*.json, *.bin       lane reports and raw V2GTP request dumps
  sim\*.json, pki\*.json       deterministic simulation reports and transcripts
  evse_listener_status.json, sdp_diagnostics.json, tls_handshake_diagnostics.json, session_handshake_artifact_gate.json   (EVSE)
  session.json, summary.json, protocol_session.json, protocol_summary.json, expected_sequence.json, observed_live_sequence.json, diagnostics.json, conformance_traceability.json   (EVCC)
  redacted\ + redaction_report.json          after artifacts redact
  support_bundle\support_bundle_manifest.json after artifacts support-bundle

Trace events carry sequence, timestamp_ms, role, family, phase (runtime_lifecycle, sdp, transport, tls, v2g_tp, exi_boundary, state_machine, artifact), level, verdict (observed, accepted, rejected, timeout, unsupported, faulted) and message. Formats are JSON, JSON-lines, .log, raw .exi and .bin. There is no PCAP writer, no CSV export and no JUnit or PDF report; the customer report is produced as JSON, Markdown and HTML.

3. Find and inspect evidence

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts index                       # every manifest under the artifact root
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts inspect --run-id $RunId     # the manifest of one run
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime list                          # sessions with lifecycle health
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime inspect --run-id $RunId       # lock, pid, heartbeat, lifecycle log
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime locks

Artifact inspection answers "what files exist"; runtime inspection answers "what happened to the process": stale session after a power loss, unexpected exit, role lock that blocks a new start, missing heartbeat, a run never cleanly stopped.

4. Verify integrity

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $RunId | Tee-Object -FilePath "$Data\artifacts\$RunId-integrity.json"

Recalculates every SHA-256 and compares it with the manifest; reports verified or failed with missing files and hash mismatches. Run it after the test, before creating a report or support bundle, after copying evidence, before delivery and when reopening an archive. A failed result means the set is no longer identical to the manifest: quarantine the directory, record the failing paths, and repeat the run if trustworthy evidence is required. Never regenerate only the manifest.

5. Reports

ReportProduced byContent
campaign_status.json, verdicts.json, customer_report.jsontest run, test reportProtocol-first campaign status (completed_pass / completed_fail / completed_inconclusive), per-case verdicts, customer summary
run_report.json, verdict_report.json, customer_report.md, customer_report.htmlconformance package execute / reportPackage run, aggregated verdicts, human-readable summary
signed_verdict_manifest.jsonpackage flowVerdict-evidence manifest with an integrity seal (SHA-256 over the manifest content, algorithm sha256-internal-integrity-seal-v1). It is not an external CA signature or a legally recognised electronic signature; treat it as tamper evidence, not as authentication.
session_handshake_artifact_gate.jsonEVSE listenerRequired versus observed states for the session, with passed / attention_required / failed
sim\*-report.jsonsimSeed, events, transcript hash

Outcome categories: pass (evidence satisfied the case), fail (a check failed), inconclusive (no evidence bound), blocked (prerequisite absent), not selected (excluded by PICS/PIXIT). Blocked is not fail and must remain visible in customer reports. A generated report is not an accredited certification result.

6. Redact before sharing

Every manifest entry carries a redaction class: public_metadata, operator_log, protocol_trace, sensitive_credential, customer_confidential or unknown, and an export_allowed flag. Private keys, certificates, passwords and tokens are sensitive_credential and are never exported.

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts policy
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts redact --run-id $RunId
Get-ChildItem "$Data\artifacts\$RunId\redacted" -Recurse

After redaction, open representative files and search for host names, IPv6 addresses, certificate subjects, EVCCID/EVSEID, VeriStand channel names and file paths that reveal customer project names. Redaction reduces exposure; release approval remains your organisation's decision.

7. Support bundle

chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts support-bundle --run-id $RunId
Get-Content "$Data\artifacts\$RunId\support_bundle\support_bundle_manifest.json"

The bundle manifest selects the redacted, exportable files. Ship the manifest, the files it lists, the integrity result, the ChargeLink version, protocol/role/profile, the execution mode and the problem description (Support Escalation). Never attach the entire artifact root. For a VeriStand bench session, add the run folder written by Start-SeccSession.ps1 (see Reading the result); it contains no key.

8. Complete evidence workflow

$Review = "$Data\support\handoff-$RunId"
New-Item -ItemType Directory -Force $Review | Out-Null
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json runtime inspect --run-id $RunId        | Tee-Object -FilePath "$Review\runtime-inspect.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts inspect --run-id $RunId      | Tee-Object -FilePath "$Review\artifact-inspect.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts integrity --run-id $RunId    | Tee-Object -FilePath "$Review\integrity-before-redaction.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts redact --run-id $RunId       | Tee-Object -FilePath "$Review\redaction-result.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts support-bundle --run-id $RunId | Tee-Object -FilePath "$Review\support-bundle-result.json"
chargelink --runtime-root "$Data\runtime" --artifact-root "$Data\artifacts" --json artifacts index                        | Tee-Object -FilePath "$Review\artifact-index.json"

9. Retention and access control

  • Put the artifact root on an access-controlled volume; keep raw and redacted artifacts in separate directories.
  • Decide retention for raw traces and for customer reports before the first customer run; failed and passed runs may differ.
  • Prevent automatic cloud synchronisation of the artifact root unless approved.
  • Record every external transfer; re-run integrity verification after archive restore.

10. Troubleshooting

SymptomCauseAction
No active runtime session / run not foundDifferent roots or run IDUse the same --runtime-root/--artifact-root as the start command; list with runtime list
Manifest not foundRun ended before finalisation, or a relative default root under another working directorySearch the data volume; inspect the start command transcript
Integrity verification failsManual edit, antivirus quarantine, partial copy, interrupted writeQuarantine; record failing paths; repeat the run
Replay fails--trace points to a live trace instead of a simulation reportPass the report written by sim ... --output
Redacted output still contains customer dataData in a class the policy exportsStop the handoff; restrict access; escalate through your security process