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.

INPUT LOGSEDITABLE · 8 LINES
  1. KEEP{"level":"error","service":"checkout","message":"payment authorization failed","duration_ms":481}error
  2. KEEP{"level":"info","service":"api","http":{"path":"/orders","status":200},"duration_ms":2840}slower than 2000ms
  3. KEEP10.0.0.9 - - [23/Aug/2026:09:14:03 -0700] "POST /login HTTP/1.1" 401 392auth or audit activity
  4. KEEP2026-08-23T16:14:04.215Z stdout F {"level":"warn","service":"inventory","message":"retry budget exhausted"}warn
  5. KEEPvendor-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 OUT

OPTIONAL MODEL

Speculate about scale.

The transformation is the proof. These assumptions are a separate model, not measured customer savings.

01

Preview locally

The browser classifier is immediate and inspectable. It never claims to be an Edge execution.

02

Validate twice

The generated YAML is linted immediately. Live mode then runs the authoritative Cloud dry-run before any deployment.

03

Run, return, remove

A rule-only job runs on one dedicated Edge. Samples transit in memory, output returns, and the job is deleted.

04

Share zero logs

The cute URL fragment contains only compact rule settings. Browsers do not send fragments to the server; pasted logs are excluded.