INPUT LOGSEDITABLE · 8 LINES
SIFTBY EXPANSO
ZERO LOGS STORED
EXPANSO PIPELINE WORKBENCH
Build the pipeline before you ship the bytes.
BROWSER-LOCAL.No log payload leaves this tab. Only generated YAML is sent for linting; logs are never written to a URL, browser storage, database, or server.
SAFEGUARDS
Errors, warnings, slow requests, auth/audit events, and unknown formats always pass through.
- KEEP
{"level":"error","service":"checkout","message":"payment authorization failed","duration_ms":481}error - KEEP
{"level":"info","service":"api","http":{"path":"/orders","status":200},"duration_ms":2840}slower than 2000ms - KEEP
10.0.0.9 - - [23/Aug/2026:09:14:03 -0700] "POST /login HTTP/1.1" 401 392auth or audit activity - KEEP
2026-08-23T16:14:04.215Z stdout F {"level":"warn","service":"inventory","message":"retry budget exhausted"}warn - KEEP
vendor-specific telemetry envelope id=7f8e source=edge-west payload=opaqueunknown format fails open
8IN5OUT38%LESS4/4SIGNAL
EXPANSO PIPELINECHECKING PIPELINE
# Generated from the rules tested in Sift, the Expanso pipeline playground.
# The Sift live runner deploys this rule-only shape to a dedicated Edge.
name: generated-log-filter
description: "Keep signal, filter routine noise at the source."
type: pipeline
config:
input:
http_server:
address: 0.0.0.0:8081
path: /ingest
pipeline:
processors:
- mapping: 'root = {"_raw": content().string()}'
- mapping: |
root = this
let raw = this._raw
let parsed = $raw.parse_json().catch(null)
let is_json = $parsed.type() == "object"
let is_app = $is_json && $parsed.exists("level")
let is_json_audit = $is_json && $parsed.exists("eventVersion")
let is_k8s = $raw.re_match("^\\d{4}-\\d{2}-\\d{2}T\\S+ (stdout|stderr) [FP] ")
let kpay = if $is_k8s { $raw.re_find_object("^\\S+ (stdout|stderr) [FP] (?P<payload>.*)$").payload.string().catch("") } else { "" }
let kjson = if $kpay != "" { $kpay.parse_json().catch(null) } else { null }
let is_kjson = $kjson.type() == "object"
let is_audit = $is_json_audit || ($is_kjson && $kjson.exists("eventVersion"))
let is_web = $raw.re_match(".*\\\"[A-Z]+ \\S+[^\\\"]*\\\" \\d{3}.*")
let web = if $is_web { $raw.re_find_object(".*\\\"(?P<method>[A-Z]+) (?P<path>\\S+)[^\\\"]*\\\" (?P<status>\\d{3}).*").catch({}) } else { {} }
let is_unknown = !$is_json && !$is_k8s && !$is_web
let level = if $is_app { $parsed.level.string().lowercase().catch("info") }
else if $is_kjson { $kjson.level.string().lowercase().catch("info") }
else if $is_web && $web.status.number().catch(0) >= 500 { "error" }
else if $is_web && $web.status.number().catch(0) >= 400 { "warn" }
else { "info" }
let path = if $is_app { $parsed.http.path.string().catch("") }
else if $is_kjson { $kjson.http.path.string().catch("") }
else if $is_web { $web.path.string().catch("") }
else { "" }
let status = if $is_app { $parsed.http.status.number().catch($parsed.status.number().catch(0)) }
else if $is_kjson { $kjson.http.status.number().catch($kjson.status.number().catch(0)) }
else if $is_web { $web.status.number().catch(0) }
else { 0 }
let duration_ms = if $is_app { $parsed.duration_ms.number().catch($parsed.http.duration_ms.number().catch(0)) }
else if $is_kjson { $kjson.duration_ms.number().catch($kjson.http.duration_ms.number().catch(0)) }
else { 0 }
let service = if $is_app { $parsed.service.string().lowercase().catch("") }
else if $is_kjson { $kjson.service.string().lowercase().catch("") }
else { "" }
root.level = $level
root.is_health = $path.re_match("^/(health|healthz|ready|livez|metrics)($|[/?])") || $raw.contains("kube-probe")
root.is_debug = $level == "debug"
root.is_static = $status > 0 && $status < 400 && $path.re_match("\\.(css|js|png|jpe?g|gif|ico|svg|woff2?)($|[?#])")
root.is_auth = $service == "auth" || $path.re_match("^/(login|logout|oauth|sso)($|[/?])")
root.is_slow = $duration_ms > 2000
root.is_audit = $is_audit
root.unknown = $is_unknown
root.protected = ["error", "warn"].contains($level) || root.is_slow || root.is_auth || root.is_audit || $is_unknown
- mapping: 'root = if this.is_health && !this.protected { deleted() } else { this }'
- mapping: 'root = if this.is_debug && !this.protected { deleted() } else { this }'
- mapping: 'root = if this.is_static && !this.protected { deleted() } else { this }'
- mapping: 'root = if !this.protected && !this.unknown && (this._raw.hash("xxhash64").string().number() % 100) >= 10 { deleted() } else { this }'
- mapping: 'root = this._raw'
output:
sync_response: {}01PIPELINE LINTEDYAML ONLY
02CLOUD VALIDATEDDRY RUN
03DEPLOYEDSAME SPEC
04EDGE PROCESSEDSAMPLE IN MEMORY
LOCAL PREVIEW COMPLETE
RUN 01 · BROWSER EVALUATOR · 8 IN / 5 OUTOPTIONAL MODEL
Speculate about scale.
The transformation is the proof. These assumptions are a separate model, not measured customer savings.
Preview locally
The browser classifier is immediate and inspectable. It never claims to be an Edge execution.
Validate twice
The generated YAML is linted immediately. Live mode then runs the authoritative Cloud dry-run before any deployment.
Run, return, remove
A rule-only job runs on one dedicated Edge. Samples transit in memory, output returns, and the job is deleted.
Share zero logs
The cute URL fragment contains only compact rule settings. Browsers do not send fragments to the server; pasted logs are excluded.