Configuration
Skew protection is configured via environment variables or Helm values.
Feature Flag
Section titled “Feature Flag”| Property | Value |
|---|---|
| Type | Boolean |
| Default | false |
| Environment Variable | PLT_FEATURE_SKEW_PROTECTION |
| Helm | services.icc.features.skew_protection.enable |
When disabled, ICC does not manage version-aware routes or run the draining lifecycle. Watt instances can still report a deployment version for metrics, workflow routing, and deployment history, but ICC keeps only the current version and does not create an HTTPRoute or ALB pinning rule.
Routing Mode
Section titled “Routing Mode”| Property | Value |
|---|---|
| Type | String (query or cookie) |
| Default | query |
| Environment Variable | PLT_SKEW_DEFAULT_ROUTING_MODE |
| Helm | services.icc.features.skew_protection.default_routing_mode |
How a client carries its version.
query pins on a ?dpl=<version> query parameter that the application bakes into its own assets at build time. cookie pins on the __plt_dpl cookie that the gateway sets on responses and matches back on later requests.
The two are strictly exclusive. In query mode ICC emits no cookie rule and sets no cookie; in cookie mode it emits no query rule. There is no fallback between them: a version whose image was not built with its own id as PLT_DEPLOYMENT_ID gets no pinning rule at all and is served by the active version, rather than being quietly downgraded to a cookie. See Deploying Versioned Applications for how to pass the id at build time.
On Kubernetes, each mode has its own Gateway API controller requirement and neither is guaranteed by Core conformance. ECS supports query mode only and programs ALB listener rules directly. Check Prerequisites before changing this value.
Per-Application Override
Section titled “Per-Application Override”PLT_SKEW_DEFAULT_ROUTING_MODE sets the cluster default. An individual application can override it from Settings > Skew Protection > Pinning in the ICC interface, which lets a fleet convert its build pipelines one application at a time instead of flipping everything at once.
The override is validated against the platform. Cookie pinning requires an edge that can add a response header, so on providers whose load balancer cannot do that it is rejected and the application stays on query pinning. The Pinning control shows the cookie option disabled, with the reason, wherever it is unavailable.
Per-Application Actuation Mode
Section titled “Per-Application Actuation Mode”Each application also selects who applies normal lifecycle changes:
| Mode | Workload lifecycle | Routing lifecycle |
|---|---|---|
observe | The customer creates workloads | ICC applies routes |
manage | ICC applies workloads | ICC applies routes |
advise | ICC returns workload plans | ICC returns routing plans |
The default is observe. Approval is available in observe and manage; a
version remains staged until approved. Approval is disabled in advise
because ICC does not control the route cutover.
The explicit POST /deploy and POST /applications/:id/deploy endpoints are
deployment commands and create the requested workload in every mode. Use the
matching /deploy/plan endpoint for a read-only workload and routing plan.
HTTP Grace Period
Section titled “HTTP Grace Period”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 1800000 (30 minutes) |
| Environment Variable | PLT_SKEW_HTTP_GRACE_PERIOD_MS |
| Helm | services.icc.features.skew_protection.http_grace_period_ms |
Duration after entering Draining during which the version is kept alive unconditionally. No traffic checks or policy evaluations run during this window.
HTTP Max Alive
Section titled “HTTP Max Alive”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 86400000 (24 hours) |
| Environment Variable | PLT_SKEW_HTTP_MAX_ALIVE_MS |
| Helm | services.icc.features.skew_protection.http_max_alive_ms |
Hard ceiling on how long a version can remain in Draining state. After this duration, the version is force-expired regardless of remaining traffic.
Cookie Max-Age
Section titled “Cookie Max-Age”| Property | Value |
|---|---|
| Type | Integer (seconds) |
| Default | 43200 (12 hours) |
| Environment Variable | PLT_SKEW_COOKIE_MAX_AGE |
| Helm | services.icc.features.skew_protection.cookie_max_age |
The Max-Age attribute on the __plt_dpl cookie. Controls how long the browser retains the deployment cookie.
Auto-Cleanup
Section titled “Auto-Cleanup”| Property | Value |
|---|---|
| Type | Boolean |
| Default | false |
| Environment Variable | PLT_SKEW_AUTO_CLEANUP |
| Helm | services.icc.features.skew_protection.auto_cleanup |
When enabled, ICC deletes the provider resources for expired versions. On Kubernetes these are the Deployment and Service. On ECS this includes the ECS service and its ICC-managed target group, Cloud Map service, and registry secret. When disabled, ICC scales the workload to zero but leaves its resources for manual removal.
Check Interval
Section titled “Check Interval”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 60000 (1 minute) |
| Environment Variable | PLT_SKEW_CHECK_INTERVAL_MS |
| Helm | services.icc.features.skew_protection.check_interval_ms |
How often the draining checker evaluates draining versions and retries or
confirms pending-expire teardown.
Traffic Window
Section titled “Traffic Window”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 1800000 (30 minutes) |
| Environment Variable | PLT_SKEW_TRAFFIC_WINDOW_MS |
| Helm | services.icc.features.skew_protection.traffic_window_ms |
The Prometheus query window for measuring requests per second to draining versions. The RPS check is skipped until the version has been draining longer than this window.
Workflow Grace Period
Section titled “Workflow Grace Period”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 3600000 (1 hour) |
| Environment Variable | PLT_SKEW_WORKFLOW_GRACE_PERIOD_MS |
| Helm | services.icc.features.skew_protection.workflow_grace_period_ms |
The unconditional draining period for a version that uses the workflow expire policy.
Workflow Max Alive
Section titled “Workflow Max Alive”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 259200000 (72 hours) |
| Environment Variable | PLT_SKEW_WORKFLOW_MAX_ALIVE_MS |
| Helm | services.icc.features.skew_protection.workflow_max_alive_ms |
The hard ceiling for a version that uses the workflow expire policy.
Confirmation Interval
Section titled “Confirmation Interval”| Property | Value |
|---|---|
| Type | Integer (milliseconds) |
| Default | 5000 (5 seconds) |
| Environment Variable | PLT_SKEW_CONFIRM_INTERVAL_MS |
| Helm | Not exposed |
How often ICC retries or confirms activation for versions in pending-apply.
This is an ICC runtime setting and has no Helm value.
Summary
Section titled “Summary”| Variable | Helm | Type | Default | Description |
|---|---|---|---|---|
PLT_FEATURE_SKEW_PROTECTION | services.icc.features.skew_protection.enable | Boolean | false | Enable/disable skew protection globally |
PLT_SKEW_DEFAULT_ROUTING_MODE | services.icc.features.skew_protection.default_routing_mode | String | query | How clients carry their version: query or cookie |
PLT_SKEW_HTTP_GRACE_PERIOD_MS | services.icc.features.skew_protection.http_grace_period_ms | Integer | 1800000 | Grace period for HTTP versions (ms) |
PLT_SKEW_HTTP_MAX_ALIVE_MS | services.icc.features.skew_protection.http_max_alive_ms | Integer | 86400000 | Max alive ceiling for HTTP versions (ms) |
PLT_SKEW_WORKFLOW_GRACE_PERIOD_MS | services.icc.features.skew_protection.workflow_grace_period_ms | Integer | 3600000 | Grace period for workflow versions (ms) |
PLT_SKEW_WORKFLOW_MAX_ALIVE_MS | services.icc.features.skew_protection.workflow_max_alive_ms | Integer | 259200000 | Max alive ceiling for workflow versions (ms) |
PLT_SKEW_COOKIE_MAX_AGE | services.icc.features.skew_protection.cookie_max_age | Integer | 43200 | Cookie Max-Age attribute (seconds) |
PLT_SKEW_AUTO_CLEANUP | services.icc.features.skew_protection.auto_cleanup | Boolean | false | Auto-delete expired provider resources |
PLT_SKEW_CHECK_INTERVAL_MS | services.icc.features.skew_protection.check_interval_ms | Integer | 60000 | Draining checker interval (ms) |
PLT_SKEW_CONFIRM_INTERVAL_MS | Not exposed | Integer | 5000 | Pending activation confirmation interval (ms) |
PLT_SKEW_TRAFFIC_WINDOW_MS | services.icc.features.skew_protection.traffic_window_ms | Integer | 1800000 | Prometheus query window for RPS check (ms) |