Runtime and Artifact Layout
ChargeLink Native keeps all state in files under directories you choose. Nothing is written to the Windows registry. This page is the map of those files for administrators who set up backup, retention and access control.
Roots and how they are chosen
| Root | Option | Default | Recommended |
|---|---|---|---|
| Runtime root | --runtime-root | .chargelink\runtime under the current working directory | C:\ChargeLinkData\runtime |
| Artifact root | --artifact-root | .chargelink\artifacts under the current working directory | C:\ChargeLinkData\artifacts |
| License home | derived: <parent of runtime root>\licenses | .chargelink\licenses | C:\ChargeLinkData\licenses |
| Integration state | integration serve --state-root | <runtime root>\integration | C:\ChargeLinkData\runtime\integration |
| Test campaign output | test run --output | .chargelink\results\test-run | C:\ChargeLinkData\tests\<run> |
| Package run output | conformance package execute --out | artifacts\ats_packages\<pkg>\run under the current directory | C:\ChargeLinkData\tests\<run>\package-run |
| Integration smokes | integration *-smoke --output | .chargelink\integration\<name>-smoke | under C:\ChargeLinkData\tests |
Every command that gets past argument parsing creates the runtime and artifact roots if they do not exist, including commands that then fail as unsupported. Running chargelink from a directory you do not control therefore leaves a .chargelink folder there; this is why the manual always passes explicit roots.
Runtime root
runtime\
sessions\<run-id>\state.json run_id, role, status, runtime_root, artifact_root, timestamps, lifecycle_generation, stale_after_ms, lock_policy_id
sessions\<run-id>\pid.json pid, executable, parent_pid, created_unix_ms, note
sessions\<run-id>\lock.json lock_scope session, owner_pid, role, acquired_unix_ms, stale_after_ms (300000)
sessions\<run-id>\heartbeat.json sequence, heartbeat_unix_ms, status, note
sessions\<run-id>\lifecycle.log one line per transition (registered/starting, running, stopped)
sessions\<run-id>\stop.flag written by evse stop / evcc stop / test stop
active\evse.lock.json, active\evcc.lock.json one live session per role
recovery\ recovery records written by runtime recover
integration\ gRPC server state (sessions, signals, campaigns)
Session status values (schema runtime_session): dry_run_validated, starting, running, stop_requested, stopped, failed, not_implemented, recovered_stale. Policy: chargelink-native-runtime-lifecycle-policy-v1; a live session is stale when its PID or heartbeat is missing or older than stale_after_ms. Print the contract with chargelink --json runtime policy.
Artifact root
artifacts\<run-id>\
manifest.json chargelink-artifact-manifest-v2: run_id, role, protocol, profile_id, created_unix_ms, integrity_algorithm sha256, signed_evidence_status, files[] {path, kind, description, size_bytes, sha256, redaction_class, export_allowed}, warnings[]
command_result.json JSON result of the producing command
traces\*.jsonl protocol trace events; live-v2gtp-frames.jsonl for every frame
exi\*.exi EXI captures
protocol\*.json, protocol\*.bin lane reports, raw V2GTP request dumps
sim\*.json, pki\*.json deterministic simulation reports and transcripts
*.json lane-specific status and diagnostics (see the EVSE and EVCC role guides)
redacted\ + redaction_report.json created by artifacts redact
support_bundle\support_bundle_manifest.json created by artifacts support-bundle
Redaction classes: public_metadata, operator_log, protocol_trace, sensitive_credential, customer_confidential, unknown. Print the policy with chargelink --json artifacts policy.
License home
licenses\
active_license.cllic copy of the activated license (schema chargelink-native-license-v1)
activation_record.json license_id, customer_id, activated_at_ms, source_path, active_license_path, license_sha256
license deactivate deletes both files. Back up the original .cllic you received; the activation record alone cannot recreate it.
Test and package outputs
<test output>\
campaign_plan.json campaign_status.json verdicts.json customer_report.json artifact_manifest.json
evidence\source_manifest.json evidence\evidence_index.json
<package run>\
pics_pixit.json campaign.json run_report.json verdict_report.json signed_verdict_manifest.json
customer_report.json customer_report.md customer_report.html
support_bundle_manifest.json package_protection_manifest.json entitlement_evaluation.json package_content_sha256_manifest.json
VeriStand bench (PC1)
C:\ChargeLink\0.5.0-rc2\pc1\bench-configuration.json written once by New-BenchConfiguration.ps1
C:\ChargeLink\0.5.0-rc2\runs\<yyyyMMdd-HHmmss>-automation\ one folder per session (runs_root; -manual for manual sessions)
SESSION.json campaign-configuration.json native.json validation.log host.log
host-output\ the owner host's result, failure and evidence files
external_evcc_artifacts\ the SECC's traces and protocol evidence
owner-commands\ manual sessions: every command request and reply
%ProgramData%\DEVlink\ChargeLink\RuntimeOwnership\ native-activation.state (NI runtime ownership record; not the license)
%ProgramData%\DEVlink\ChargeLink\tls\ suggested location for the PC1 TLS material
The file names inside a run folder are listed in Reading the result. Keep each run folder with the package's manifest\SHA256SUMS; delete runs_root and native-activation.state when you uninstall.
Package directory (read-only)
<package>\README.md KIT_CONTENTS.md docs\ licenses\ manifest\ pc1\ pc2\
Schemas of interest to integrators: artifact_manifest, artifact_integrity, diagnostic_envelope, exit_code_policy, runtime_session, runtime_lifecycle, protocol_trace_event, protocol_artifact_event, protocol_test_evidence, protocol_test_verdicts, profile, license, offline_license_request, evse_listener, external_evcc_session_listener, evcc_loopback, local_evcc_evse_loopback, dc_can_foundation, tls_pki_diagnostics, xil_evidence_v1, factory_eol_evidence_v1, enterprise_evidence_v1, package_release_gate.
Backup and retention
- Back up
C:\ChargeLinkData(runtime, artifacts, licenses, pki, tests, support) as one unit; the runtime root is small but holds the locks that explain an interrupted run. - Restrict
pkiandlicensesto the operator and administrators; restrict the artifact root to the project team. - Keep raw and redacted artifacts separate; decide retention per class before the first customer run.
- Verify integrity after restore (
artifacts integrity --run-id).

