[{"data":1,"prerenderedAt":3037},["ShallowReactive",2],{"navigation_docs":3,"-use-cases-signals-recipes":612,"-use-cases-signals-recipes-surround":3032},[4,35,85,148,328,489,548,587],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138,143],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"config","\u002Fcli\u002Fconfig","3.cli\u002F11.config","i-lucide-settings-2",{"title":109,"path":110,"stem":111,"icon":112},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":114,"path":115,"stem":116,"icon":117},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":119,"path":120,"stem":121,"icon":122},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":124,"path":125,"stem":126,"icon":127},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":129,"path":130,"stem":131,"icon":132},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":134,"path":135,"stem":136,"icon":137},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":139,"path":140,"stem":141,"icon":142},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":144,"path":145,"stem":146,"icon":147},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":149,"path":150,"stem":151,"children":152,"page":34},"Integrate","\u002Fintegrate","4.integrate",[153,157,240],{"title":41,"path":154,"stem":155,"icon":156},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":158,"path":159,"stem":160,"children":161,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[162,165,195,220],{"title":41,"path":163,"stem":164,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":166,"path":167,"stem":168,"children":169,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[170,175,180,185,190],{"title":171,"path":172,"stem":173,"icon":174},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":176,"path":177,"stem":178,"icon":179},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":181,"path":182,"stem":183,"icon":184},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":186,"path":187,"stem":188,"icon":189},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":191,"path":192,"stem":193,"icon":194},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":196,"path":197,"stem":198,"children":199,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[200,205,210,215],{"title":201,"path":202,"stem":203,"icon":204},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":206,"path":207,"stem":208,"icon":209},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":211,"path":212,"stem":213,"icon":214},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":216,"path":217,"stem":218,"icon":219},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":221,"path":222,"stem":223,"children":224,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[225,230,235],{"title":226,"path":227,"stem":228,"icon":229},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":231,"path":232,"stem":233,"icon":234},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":236,"path":237,"stem":238,"icon":239},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":241,"path":242,"stem":243,"children":244,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[245,249,254,259,264,269,274,279,284,289,294,299,304,309,313,318,323],{"title":41,"path":246,"stem":247,"icon":248},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":250,"path":251,"stem":252,"icon":253},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":255,"path":256,"stem":257,"icon":258},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":260,"path":261,"stem":262,"icon":263},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":265,"path":266,"stem":267,"icon":268},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":270,"path":271,"stem":272,"icon":273},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":275,"path":276,"stem":277,"icon":278},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":280,"path":281,"stem":282,"icon":283},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":285,"path":286,"stem":287,"icon":288},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":290,"path":291,"stem":292,"icon":293},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":295,"path":296,"stem":297,"icon":298},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":300,"path":301,"stem":302,"icon":303},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":305,"path":306,"stem":307,"icon":308},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":310,"path":311,"stem":312,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":314,"path":315,"stem":316,"icon":317},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":319,"path":320,"stem":321,"icon":322},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":324,"path":325,"stem":326,"icon":327},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":329,"path":330,"stem":331,"children":332,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[333,336,341,369,396,428,449,454,459,463],{"title":41,"path":334,"stem":335,"icon":117},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":337,"path":338,"stem":339,"icon":340},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[347,350,355,360,365],{"title":41,"path":348,"stem":349,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":351,"path":352,"stem":353,"icon":354},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":356,"path":357,"stem":358,"icon":359},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":361,"path":362,"stem":363,"icon":364},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":366,"path":367,"stem":368,"icon":147},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[375,378,383,388,392],{"title":41,"path":376,"stem":377,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":379,"path":380,"stem":381,"icon":382},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":384,"path":385,"stem":386,"icon":387},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":389,"path":390,"stem":391,"icon":340},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":393,"path":394,"stem":395,"icon":122},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":397,"icon":398,"path":399,"stem":400,"children":401,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[402,405,410,415,420,424],{"title":41,"path":403,"stem":404,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":406,"path":407,"stem":408,"icon":409},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":411,"path":412,"stem":413,"icon":414},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":416,"path":417,"stem":418,"icon":419},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":421,"path":422,"stem":423,"icon":398},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":425,"path":426,"stem":427,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":366,"icon":122,"path":429,"stem":430,"children":431,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[432,435,440,445],{"title":41,"path":433,"stem":434,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":436,"path":437,"stem":438,"icon":439},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":441,"path":442,"stem":443,"icon":444},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":446,"path":447,"stem":448,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":450,"path":451,"stem":452,"icon":453},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":455,"path":456,"stem":457,"icon":458},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":460,"path":461,"stem":462,"icon":444},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":464,"icon":465,"path":466,"stem":467,"children":468,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[469,472,477,482,485],{"title":41,"path":470,"stem":471,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":473,"path":474,"stem":475,"icon":476},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":478,"path":479,"stem":480,"icon":481},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":446,"path":483,"stem":484,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":425,"path":486,"stem":487,"icon":488},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","6.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":425,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":453},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":446,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","7.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":393,"path":562,"stem":563,"icon":122},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":398},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":453},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","8.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":214},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":613,"title":425,"body":614,"description":3021,"extension":3022,"links":3023,"meta":3028,"navigation":3029,"path":486,"seo":3030,"stem":487,"__hash__":3031},"docs\u002F5.use-cases\u002F7.signals\u002F05.recipes.md",{"type":615,"value":616,"toc":3010},"minimark",[617,626,631,634,1401,1404,1432,1436,1642,2925,2929,2963,2967,3006],[618,619,620,621,625],"p",{},"Every signal here is a question a rule cannot answer from the fields alone. Change the ",[622,623,624],"code",{},"when"," to your paths and they are yours.",[627,628,630],"h2",{"id":629},"start-with-these-three","Start with these three",[618,632,633],{},"One file, three columns, and a week later you have numbers you did not have before.",[635,636,642],"pre",{"className":637,"code":638,"filename":639,"language":640,"meta":641,"style":641},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineSignal } from '@evlog\u002Fsignals'\n\nconst errorName = (e: Record\u003Cstring, unknown>) => (e.error as { name?: string } | undefined)?.name ?? 'none'\n\n\u002F** Every 4xx\u002F5xx. Splits the error budget between the client, the code and the dependencies. *\u002F\nexport const fault = defineSignal({\n  name: 'fault',\n  when: e => (e.status ?? 0) >= 400,\n  ask: 'Who is responsible for this failure?',\n  choice: {\n    client: 'Bad input, expired session, missing permission, client mistake',\n    app: 'A bug, a misconfiguration or a validation error in our own code',\n    upstream: 'A third-party dependency failed, timed out or rate-limited us',\n  },\n  cacheKey: e => e.error ? `${e.method} ${e.path} ${e.status} ${errorName(e)}` : undefined,\n})\n\n\u002F** Every 5xx. Tells a retry policy which failures are worth a second attempt. *\u002F\nexport const retryable = defineSignal({\n  name: 'retryable',\n  when: e => (e.status ?? 0) >= 500,\n  ask: 'Would the same request most likely succeed if retried in a few seconds?',\n  criteria: { true: 'Timeout, connection reset, rate limit, transient upstream error', false: 'Bug, bad data, missing resource' },\n  cacheKey: e => e.error ? `${e.path} ${errorName(e)}` : undefined,\n})\n\n\u002F** Successful checkouts. The 200 that sampling deletes and nobody notices. *\u002F\nexport const silentFailure = defineSignal({\n  name: 'silent-failure',\n  when: e => e.status === 200 && e.path === '\u002Fapi\u002Fcheckout',\n  ask: 'The request returned 200, but the customer did not get what they came for',\n  criteria: { true: 'No order or confirmation, a fallback path, an empty or partial result', false: 'Order created and confirmed' },\n  keep: v => v.value && v.confidence > 0.8,\n})\n","server\u002Fsignals.ts","typescript","",[622,643,644,677,684,780,785,792,815,834,871,888,899,916,933,950,956,1030,1038,1043,1049,1067,1083,1113,1129,1168,1209,1216,1221,1227,1245,1261,1305,1321,1356,1394],{"__ignoreMap":641},[645,646,649,653,657,661,664,667,670,674],"span",{"class":647,"line":648},"line",1,[645,650,652],{"class":651},"s7zQu","import",[645,654,656],{"class":655},"sMK4o"," {",[645,658,660],{"class":659},"sTEyZ"," defineSignal",[645,662,663],{"class":655}," }",[645,665,666],{"class":651}," from",[645,668,669],{"class":655}," '",[645,671,673],{"class":672},"sfazB","@evlog\u002Fsignals",[645,675,676],{"class":655},"'\n",[645,678,680],{"class":647,"line":679},2,[645,681,683],{"emptyLinePlaceholder":682},true,"\n",[645,685,687,691,694,697,700,704,707,711,714,717,720,723,726,729,732,735,738,741,743,747,750,753,755,758,761,764,767,770,773,775,778],{"class":647,"line":686},3,[645,688,690],{"class":689},"spNyl","const",[645,692,693],{"class":659}," errorName ",[645,695,696],{"class":655},"=",[645,698,699],{"class":655}," (",[645,701,703],{"class":702},"sHdIc","e",[645,705,706],{"class":655},":",[645,708,710],{"class":709},"sBMFI"," Record",[645,712,713],{"class":655},"\u003C",[645,715,716],{"class":709},"string",[645,718,719],{"class":655},",",[645,721,722],{"class":709}," unknown",[645,724,725],{"class":655},">)",[645,727,728],{"class":689}," =>",[645,730,731],{"class":659}," (e",[645,733,734],{"class":655},".",[645,736,737],{"class":659},"error ",[645,739,740],{"class":651},"as",[645,742,656],{"class":655},[645,744,746],{"class":745},"swJcz"," name",[645,748,749],{"class":655},"?:",[645,751,752],{"class":709}," string",[645,754,663],{"class":655},[645,756,757],{"class":655}," |",[645,759,760],{"class":709}," undefined",[645,762,763],{"class":659},")",[645,765,766],{"class":655},"?.",[645,768,769],{"class":659},"name ",[645,771,772],{"class":655},"??",[645,774,669],{"class":655},[645,776,777],{"class":672},"none",[645,779,676],{"class":655},[645,781,783],{"class":647,"line":782},4,[645,784,683],{"emptyLinePlaceholder":682},[645,786,788],{"class":647,"line":787},5,[645,789,791],{"class":790},"sHwdD","\u002F** Every 4xx\u002F5xx. Splits the error budget between the client, the code and the dependencies. *\u002F\n",[645,793,795,798,801,804,806,809,812],{"class":647,"line":794},6,[645,796,797],{"class":651},"export",[645,799,800],{"class":689}," const",[645,802,803],{"class":659}," fault ",[645,805,696],{"class":655},[645,807,660],{"class":808},"s2Zo4",[645,810,811],{"class":659},"(",[645,813,814],{"class":655},"{\n",[645,816,818,821,823,825,828,831],{"class":647,"line":817},7,[645,819,820],{"class":745},"  name",[645,822,706],{"class":655},[645,824,669],{"class":655},[645,826,827],{"class":672},"fault",[645,829,830],{"class":655},"'",[645,832,833],{"class":655},",\n",[645,835,837,840,842,845,847,849,851,854,856,860,863,866,869],{"class":647,"line":836},8,[645,838,839],{"class":808},"  when",[645,841,706],{"class":655},[645,843,844],{"class":702}," e",[645,846,728],{"class":689},[645,848,731],{"class":659},[645,850,734],{"class":655},[645,852,853],{"class":659},"status ",[645,855,772],{"class":655},[645,857,859],{"class":858},"sbssI"," 0",[645,861,862],{"class":659},") ",[645,864,865],{"class":655},">=",[645,867,868],{"class":858}," 400",[645,870,833],{"class":655},[645,872,874,877,879,881,884,886],{"class":647,"line":873},9,[645,875,876],{"class":745},"  ask",[645,878,706],{"class":655},[645,880,669],{"class":655},[645,882,883],{"class":672},"Who is responsible for this failure?",[645,885,830],{"class":655},[645,887,833],{"class":655},[645,889,891,894,896],{"class":647,"line":890},10,[645,892,893],{"class":745},"  choice",[645,895,706],{"class":655},[645,897,898],{"class":655}," {\n",[645,900,902,905,907,909,912,914],{"class":647,"line":901},11,[645,903,904],{"class":745},"    client",[645,906,706],{"class":655},[645,908,669],{"class":655},[645,910,911],{"class":672},"Bad input, expired session, missing permission, client mistake",[645,913,830],{"class":655},[645,915,833],{"class":655},[645,917,919,922,924,926,929,931],{"class":647,"line":918},12,[645,920,921],{"class":745},"    app",[645,923,706],{"class":655},[645,925,669],{"class":655},[645,927,928],{"class":672},"A bug, a misconfiguration or a validation error in our own code",[645,930,830],{"class":655},[645,932,833],{"class":655},[645,934,936,939,941,943,946,948],{"class":647,"line":935},13,[645,937,938],{"class":745},"    upstream",[645,940,706],{"class":655},[645,942,669],{"class":655},[645,944,945],{"class":672},"A third-party dependency failed, timed out or rate-limited us",[645,947,830],{"class":655},[645,949,833],{"class":655},[645,951,953],{"class":647,"line":952},14,[645,954,955],{"class":655},"  },\n",[645,957,959,962,964,966,968,970,972,974,977,980,982,984,987,990,993,995,997,1000,1002,1004,1006,1008,1011,1013,1015,1018,1021,1024,1027],{"class":647,"line":958},15,[645,960,961],{"class":808},"  cacheKey",[645,963,706],{"class":655},[645,965,844],{"class":702},[645,967,728],{"class":689},[645,969,844],{"class":659},[645,971,734],{"class":655},[645,973,737],{"class":659},[645,975,976],{"class":655},"?",[645,978,979],{"class":655}," `${",[645,981,703],{"class":659},[645,983,734],{"class":655},[645,985,986],{"class":659},"method",[645,988,989],{"class":655},"}",[645,991,992],{"class":655}," ${",[645,994,703],{"class":659},[645,996,734],{"class":655},[645,998,999],{"class":659},"path",[645,1001,989],{"class":655},[645,1003,992],{"class":655},[645,1005,703],{"class":659},[645,1007,734],{"class":655},[645,1009,1010],{"class":659},"status",[645,1012,989],{"class":655},[645,1014,992],{"class":655},[645,1016,1017],{"class":808},"errorName",[645,1019,1020],{"class":659},"(e)",[645,1022,1023],{"class":655},"}`",[645,1025,1026],{"class":655}," :",[645,1028,1029],{"class":655}," undefined,\n",[645,1031,1033,1035],{"class":647,"line":1032},16,[645,1034,989],{"class":655},[645,1036,1037],{"class":659},")\n",[645,1039,1041],{"class":647,"line":1040},17,[645,1042,683],{"emptyLinePlaceholder":682},[645,1044,1046],{"class":647,"line":1045},18,[645,1047,1048],{"class":790},"\u002F** Every 5xx. Tells a retry policy which failures are worth a second attempt. *\u002F\n",[645,1050,1052,1054,1056,1059,1061,1063,1065],{"class":647,"line":1051},19,[645,1053,797],{"class":651},[645,1055,800],{"class":689},[645,1057,1058],{"class":659}," retryable ",[645,1060,696],{"class":655},[645,1062,660],{"class":808},[645,1064,811],{"class":659},[645,1066,814],{"class":655},[645,1068,1070,1072,1074,1076,1079,1081],{"class":647,"line":1069},20,[645,1071,820],{"class":745},[645,1073,706],{"class":655},[645,1075,669],{"class":655},[645,1077,1078],{"class":672},"retryable",[645,1080,830],{"class":655},[645,1082,833],{"class":655},[645,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1111],{"class":647,"line":1085},21,[645,1087,839],{"class":808},[645,1089,706],{"class":655},[645,1091,844],{"class":702},[645,1093,728],{"class":689},[645,1095,731],{"class":659},[645,1097,734],{"class":655},[645,1099,853],{"class":659},[645,1101,772],{"class":655},[645,1103,859],{"class":858},[645,1105,862],{"class":659},[645,1107,865],{"class":655},[645,1109,1110],{"class":858}," 500",[645,1112,833],{"class":655},[645,1114,1116,1118,1120,1122,1125,1127],{"class":647,"line":1115},22,[645,1117,876],{"class":745},[645,1119,706],{"class":655},[645,1121,669],{"class":655},[645,1123,1124],{"class":672},"Would the same request most likely succeed if retried in a few seconds?",[645,1126,830],{"class":655},[645,1128,833],{"class":655},[645,1130,1132,1135,1137,1139,1142,1144,1146,1149,1151,1153,1156,1158,1160,1163,1165],{"class":647,"line":1131},23,[645,1133,1134],{"class":745},"  criteria",[645,1136,706],{"class":655},[645,1138,656],{"class":655},[645,1140,1141],{"class":745}," true",[645,1143,706],{"class":655},[645,1145,669],{"class":655},[645,1147,1148],{"class":672},"Timeout, connection reset, rate limit, transient upstream error",[645,1150,830],{"class":655},[645,1152,719],{"class":655},[645,1154,1155],{"class":745}," false",[645,1157,706],{"class":655},[645,1159,669],{"class":655},[645,1161,1162],{"class":672},"Bug, bad data, missing resource",[645,1164,830],{"class":655},[645,1166,1167],{"class":655}," },\n",[645,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207],{"class":647,"line":1170},24,[645,1172,961],{"class":808},[645,1174,706],{"class":655},[645,1176,844],{"class":702},[645,1178,728],{"class":689},[645,1180,844],{"class":659},[645,1182,734],{"class":655},[645,1184,737],{"class":659},[645,1186,976],{"class":655},[645,1188,979],{"class":655},[645,1190,703],{"class":659},[645,1192,734],{"class":655},[645,1194,999],{"class":659},[645,1196,989],{"class":655},[645,1198,992],{"class":655},[645,1200,1017],{"class":808},[645,1202,1020],{"class":659},[645,1204,1023],{"class":655},[645,1206,1026],{"class":655},[645,1208,1029],{"class":655},[645,1210,1212,1214],{"class":647,"line":1211},25,[645,1213,989],{"class":655},[645,1215,1037],{"class":659},[645,1217,1219],{"class":647,"line":1218},26,[645,1220,683],{"emptyLinePlaceholder":682},[645,1222,1224],{"class":647,"line":1223},27,[645,1225,1226],{"class":790},"\u002F** Successful checkouts. The 200 that sampling deletes and nobody notices. *\u002F\n",[645,1228,1230,1232,1234,1237,1239,1241,1243],{"class":647,"line":1229},28,[645,1231,797],{"class":651},[645,1233,800],{"class":689},[645,1235,1236],{"class":659}," silentFailure ",[645,1238,696],{"class":655},[645,1240,660],{"class":808},[645,1242,811],{"class":659},[645,1244,814],{"class":655},[645,1246,1248,1250,1252,1254,1257,1259],{"class":647,"line":1247},29,[645,1249,820],{"class":745},[645,1251,706],{"class":655},[645,1253,669],{"class":655},[645,1255,1256],{"class":672},"silent-failure",[645,1258,830],{"class":655},[645,1260,833],{"class":655},[645,1262,1264,1266,1268,1270,1272,1274,1276,1278,1281,1284,1287,1289,1291,1294,1296,1298,1301,1303],{"class":647,"line":1263},30,[645,1265,839],{"class":808},[645,1267,706],{"class":655},[645,1269,844],{"class":702},[645,1271,728],{"class":689},[645,1273,844],{"class":659},[645,1275,734],{"class":655},[645,1277,853],{"class":659},[645,1279,1280],{"class":655},"===",[645,1282,1283],{"class":858}," 200",[645,1285,1286],{"class":655}," &&",[645,1288,844],{"class":659},[645,1290,734],{"class":655},[645,1292,1293],{"class":659},"path ",[645,1295,1280],{"class":655},[645,1297,669],{"class":655},[645,1299,1300],{"class":672},"\u002Fapi\u002Fcheckout",[645,1302,830],{"class":655},[645,1304,833],{"class":655},[645,1306,1308,1310,1312,1314,1317,1319],{"class":647,"line":1307},31,[645,1309,876],{"class":745},[645,1311,706],{"class":655},[645,1313,669],{"class":655},[645,1315,1316],{"class":672},"The request returned 200, but the customer did not get what they came for",[645,1318,830],{"class":655},[645,1320,833],{"class":655},[645,1322,1324,1326,1328,1330,1332,1334,1336,1339,1341,1343,1345,1347,1349,1352,1354],{"class":647,"line":1323},32,[645,1325,1134],{"class":745},[645,1327,706],{"class":655},[645,1329,656],{"class":655},[645,1331,1141],{"class":745},[645,1333,706],{"class":655},[645,1335,669],{"class":655},[645,1337,1338],{"class":672},"No order or confirmation, a fallback path, an empty or partial result",[645,1340,830],{"class":655},[645,1342,719],{"class":655},[645,1344,1155],{"class":745},[645,1346,706],{"class":655},[645,1348,669],{"class":655},[645,1350,1351],{"class":672},"Order created and confirmed",[645,1353,830],{"class":655},[645,1355,1167],{"class":655},[645,1357,1359,1362,1364,1367,1369,1371,1373,1376,1379,1381,1383,1386,1389,1392],{"class":647,"line":1358},33,[645,1360,1361],{"class":808},"  keep",[645,1363,706],{"class":655},[645,1365,1366],{"class":702}," v",[645,1368,728],{"class":689},[645,1370,1366],{"class":659},[645,1372,734],{"class":655},[645,1374,1375],{"class":659},"value ",[645,1377,1378],{"class":655},"&&",[645,1380,1366],{"class":659},[645,1382,734],{"class":655},[645,1384,1385],{"class":659},"confidence ",[645,1387,1388],{"class":655},">",[645,1390,1391],{"class":858}," 0.8",[645,1393,833],{"class":655},[645,1395,1397,1399],{"class":647,"line":1396},34,[645,1398,989],{"class":655},[645,1400,1037],{"class":659},[618,1402,1403],{},"What each one gives you:",[1405,1406,1407,1418,1424],"ul",{},[1408,1409,1410,1413,1414,1417],"li",{},[622,1411,1412],{},"GROUP BY signals.fault.value"," over a week says whether the next sprint goes to validation messages, your own bugs, or a dependency's SLA. ",[622,1415,1416],{},"cacheKey"," on the error name makes an outage one call, not one per request.",[1408,1419,1420,1423],{},[622,1421,1422],{},"signals.retryable.value = true"," on a 502 is the difference between a retry policy and a guess.",[1408,1425,1426,1428,1429,1431],{},[622,1427,1256],{}," promotes the checkouts that returned 200 with no order. Point ",[622,1430,624],{}," at your own money path.",[627,1433,1435],{"id":1434},"all-twelve","All twelve",[1437,1438,1439,1458],"table",{},[1440,1441,1442],"thead",{},[1443,1444,1445,1449,1452,1455],"tr",{},[1446,1447,1448],"th",{},"Signal",[1446,1450,1451],{},"Hook",[1446,1453,1454],{},"Question",[1446,1456,1457],{},"Why a rule cannot",[1459,1460,1461,1477,1493,1507,1522,1537,1552,1567,1582,1597,1612,1627],"tbody",{},[1443,1462,1463,1468,1471,1474],{},[1464,1465,1466],"td",{},[622,1467,827],{},[1464,1469,1470],{},"enrich, cached",[1464,1472,1473],{},"Who is responsible: user, us, upstream",[1464,1475,1476],{},"A Stripe timeout and a null deref are both a 500",[1443,1478,1479,1484,1487,1490],{},[1464,1480,1481],{},[622,1482,1483],{},"severity",[1464,1485,1486],{},"enrich",[1464,1488,1489],{},"noise, watch or page",[1464,1491,1492],{},"Urgency depends on what failed and for whom",[1443,1494,1495,1499,1501,1504],{},[1464,1496,1497],{},[622,1498,1078],{},[1464,1500,1470],{},[1464,1502,1503],{},"Would a retry succeed",[1464,1505,1506],{},"Transient and permanent errors share status codes",[1443,1508,1509,1514,1516,1519],{},[1464,1510,1511],{},[622,1512,1513],{},"slow-cause",[1464,1515,1486],{},[1464,1517,1518],{},"database, upstream, compute",[1464,1520,1521],{},"Reading the timings takes a human",[1443,1523,1524,1528,1531,1534],{},[1464,1525,1526],{},[622,1527,1256],{},[1464,1529,1530],{},"keep",[1464,1532,1533],{},"200, but the customer left empty-handed",[1464,1535,1536],{},"Sampling only keeps what a predicate can name",[1443,1538,1539,1544,1546,1549],{},[1464,1540,1541],{},[622,1542,1543],{},"webhook-ignored",[1464,1545,1530],{},[1464,1547,1548],{},"Acknowledged but not acted on",[1464,1550,1551],{},"The provider only sees the 200",[1443,1553,1554,1559,1561,1564],{},[1464,1555,1556],{},[622,1557,1558],{},"validation-bug",[1464,1560,1530],{},[1464,1562,1563],{},"The rejected input was valid",[1464,1565,1566],{},"Looks identical to bad input",[1443,1568,1569,1574,1576,1579],{},[1464,1570,1571],{},[622,1572,1573],{},"turn-resolved",[1464,1575,1486],{},[1464,1577,1578],{},"The agent did what was asked",[1464,1580,1581],{},"A sampled LLM-as-judge misses the rest",[1443,1583,1584,1589,1591,1594],{},[1464,1585,1586],{},[622,1587,1588],{},"turn-looping",[1464,1590,1530],{},[1464,1592,1593],{},"Repeated a tool call without progress",[1464,1595,1596],{},"Loops hide in successful turns",[1443,1598,1599,1604,1606,1609],{},[1464,1600,1601],{},[622,1602,1603],{},"turn-off-script",[1464,1605,1530],{},[1464,1607,1608],{},"Did something nobody asked for",[1464,1610,1611],{},"Same",[1443,1613,1614,1619,1621,1624],{},[1464,1615,1616],{},[622,1617,1618],{},"audit-review",[1464,1620,1530],{},[1464,1622,1623],{},"This action deserves a reviewer",[1464,1625,1626],{},"Risk is in the combination, not one field",[1443,1628,1629,1634,1636,1639],{},[1464,1630,1631],{},[622,1632,1633],{},"job-flaky",[1464,1635,1486],{},[1464,1637,1638],{},"Succeeded only because it retried",[1464,1640,1641],{},"The retry hides the cause",[1643,1644,1646,1651,1937,1947,1951,2234,2248,2252,2266,2623,2627,2916],"collapsible",{"name":1645},"the other nine, with code",[1647,1648,1650],"h3",{"id":1649},"rank-failures-and-explain-slow-requests","Rank failures and explain slow requests",[635,1652,1654],{"className":637,"code":1653,"language":640,"meta":641,"style":641},"export const severity = defineSignal({\n  name: 'severity',\n  when: e => (e.status ?? 0) >= 500,\n  ask: 'How urgent is this failure for the on-call engineer?',\n  score: ['noise', 'watch', 'page'],\n})\n\nexport const slowCause = defineSignal({\n  name: 'slow-cause',\n  when: e => (e.durationMs ?? 0) > 2_000,\n  ask: 'What dominated the duration of this request?',\n  choice: {\n    database: 'Query time, lock waits, many round trips',\n    upstream: 'A third-party API or another service',\n    compute: 'Serialization, rendering, large payloads, CPU work',\n    unknown: 'Nothing in the event explains the time',\n  },\n})\n",[622,1655,1656,1673,1687,1715,1730,1770,1776,1780,1797,1811,1841,1856,1864,1880,1895,1911,1927,1931],{"__ignoreMap":641},[645,1657,1658,1660,1662,1665,1667,1669,1671],{"class":647,"line":648},[645,1659,797],{"class":651},[645,1661,800],{"class":689},[645,1663,1664],{"class":659}," severity ",[645,1666,696],{"class":655},[645,1668,660],{"class":808},[645,1670,811],{"class":659},[645,1672,814],{"class":655},[645,1674,1675,1677,1679,1681,1683,1685],{"class":647,"line":679},[645,1676,820],{"class":745},[645,1678,706],{"class":655},[645,1680,669],{"class":655},[645,1682,1483],{"class":672},[645,1684,830],{"class":655},[645,1686,833],{"class":655},[645,1688,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713],{"class":647,"line":686},[645,1690,839],{"class":808},[645,1692,706],{"class":655},[645,1694,844],{"class":702},[645,1696,728],{"class":689},[645,1698,731],{"class":659},[645,1700,734],{"class":655},[645,1702,853],{"class":659},[645,1704,772],{"class":655},[645,1706,859],{"class":858},[645,1708,862],{"class":659},[645,1710,865],{"class":655},[645,1712,1110],{"class":858},[645,1714,833],{"class":655},[645,1716,1717,1719,1721,1723,1726,1728],{"class":647,"line":782},[645,1718,876],{"class":745},[645,1720,706],{"class":655},[645,1722,669],{"class":655},[645,1724,1725],{"class":672},"How urgent is this failure for the on-call engineer?",[645,1727,830],{"class":655},[645,1729,833],{"class":655},[645,1731,1732,1735,1737,1740,1742,1745,1747,1749,1751,1754,1756,1758,1760,1763,1765,1768],{"class":647,"line":787},[645,1733,1734],{"class":745},"  score",[645,1736,706],{"class":655},[645,1738,1739],{"class":659}," [",[645,1741,830],{"class":655},[645,1743,1744],{"class":672},"noise",[645,1746,830],{"class":655},[645,1748,719],{"class":655},[645,1750,669],{"class":655},[645,1752,1753],{"class":672},"watch",[645,1755,830],{"class":655},[645,1757,719],{"class":655},[645,1759,669],{"class":655},[645,1761,1762],{"class":672},"page",[645,1764,830],{"class":655},[645,1766,1767],{"class":659},"]",[645,1769,833],{"class":655},[645,1771,1772,1774],{"class":647,"line":794},[645,1773,989],{"class":655},[645,1775,1037],{"class":659},[645,1777,1778],{"class":647,"line":817},[645,1779,683],{"emptyLinePlaceholder":682},[645,1781,1782,1784,1786,1789,1791,1793,1795],{"class":647,"line":836},[645,1783,797],{"class":651},[645,1785,800],{"class":689},[645,1787,1788],{"class":659}," slowCause ",[645,1790,696],{"class":655},[645,1792,660],{"class":808},[645,1794,811],{"class":659},[645,1796,814],{"class":655},[645,1798,1799,1801,1803,1805,1807,1809],{"class":647,"line":873},[645,1800,820],{"class":745},[645,1802,706],{"class":655},[645,1804,669],{"class":655},[645,1806,1513],{"class":672},[645,1808,830],{"class":655},[645,1810,833],{"class":655},[645,1812,1813,1815,1817,1819,1821,1823,1825,1828,1830,1832,1834,1836,1839],{"class":647,"line":890},[645,1814,839],{"class":808},[645,1816,706],{"class":655},[645,1818,844],{"class":702},[645,1820,728],{"class":689},[645,1822,731],{"class":659},[645,1824,734],{"class":655},[645,1826,1827],{"class":659},"durationMs ",[645,1829,772],{"class":655},[645,1831,859],{"class":858},[645,1833,862],{"class":659},[645,1835,1388],{"class":655},[645,1837,1838],{"class":858}," 2_000",[645,1840,833],{"class":655},[645,1842,1843,1845,1847,1849,1852,1854],{"class":647,"line":901},[645,1844,876],{"class":745},[645,1846,706],{"class":655},[645,1848,669],{"class":655},[645,1850,1851],{"class":672},"What dominated the duration of this request?",[645,1853,830],{"class":655},[645,1855,833],{"class":655},[645,1857,1858,1860,1862],{"class":647,"line":918},[645,1859,893],{"class":745},[645,1861,706],{"class":655},[645,1863,898],{"class":655},[645,1865,1866,1869,1871,1873,1876,1878],{"class":647,"line":935},[645,1867,1868],{"class":745},"    database",[645,1870,706],{"class":655},[645,1872,669],{"class":655},[645,1874,1875],{"class":672},"Query time, lock waits, many round trips",[645,1877,830],{"class":655},[645,1879,833],{"class":655},[645,1881,1882,1884,1886,1888,1891,1893],{"class":647,"line":952},[645,1883,938],{"class":745},[645,1885,706],{"class":655},[645,1887,669],{"class":655},[645,1889,1890],{"class":672},"A third-party API or another service",[645,1892,830],{"class":655},[645,1894,833],{"class":655},[645,1896,1897,1900,1902,1904,1907,1909],{"class":647,"line":958},[645,1898,1899],{"class":745},"    compute",[645,1901,706],{"class":655},[645,1903,669],{"class":655},[645,1905,1906],{"class":672},"Serialization, rendering, large payloads, CPU work",[645,1908,830],{"class":655},[645,1910,833],{"class":655},[645,1912,1913,1916,1918,1920,1923,1925],{"class":647,"line":1032},[645,1914,1915],{"class":745},"    unknown",[645,1917,706],{"class":655},[645,1919,669],{"class":655},[645,1921,1922],{"class":672},"Nothing in the event explains the time",[645,1924,830],{"class":655},[645,1926,833],{"class":655},[645,1928,1929],{"class":647,"line":1040},[645,1930,955],{"class":655},[645,1932,1933,1935],{"class":647,"line":1045},[645,1934,989],{"class":655},[645,1936,1037],{"class":659},[618,1938,1939,1940,1943,1944,1946],{},"The ",[622,1941,1942],{},"unknown"," option on ",[622,1945,1513],{}," is deliberate: without it the model picks the least wrong of three, and you lose the signal that your events do not carry the timings they should.",[1647,1948,1950],{"id":1949},"rescue-the-other-200s-that-lied","Rescue the other 200s that lied",[635,1952,1954],{"className":637,"code":1953,"language":640,"meta":641,"style":641},"export const webhookIgnored = defineSignal({\n  name: 'webhook-ignored',\n  when: e => e.status === 200 && (e.path ?? '').startsWith('\u002Fapi\u002Fwebhooks\u002F'),\n  ask: 'The webhook was acknowledged but not acted on',\n  criteria: { true: 'Unhandled event type, skipped, no side effect recorded', false: 'The event was processed' },\n  keep: v => v.value && v.confidence > 0.85,\n})\n\nexport const validationBug = defineSignal({\n  name: 'validation-bug',\n  when: e => e.status === 400,\n  ask: 'The rejected input was actually valid and our validation is wrong',\n  keep: v => v.value && v.confidence > 0.85,\n})\n",[622,1955,1956,1973,1987,2040,2055,2089,2120,2126,2130,2147,2161,2183,2198,2228],{"__ignoreMap":641},[645,1957,1958,1960,1962,1965,1967,1969,1971],{"class":647,"line":648},[645,1959,797],{"class":651},[645,1961,800],{"class":689},[645,1963,1964],{"class":659}," webhookIgnored ",[645,1966,696],{"class":655},[645,1968,660],{"class":808},[645,1970,811],{"class":659},[645,1972,814],{"class":655},[645,1974,1975,1977,1979,1981,1983,1985],{"class":647,"line":679},[645,1976,820],{"class":745},[645,1978,706],{"class":655},[645,1980,669],{"class":655},[645,1982,1543],{"class":672},[645,1984,830],{"class":655},[645,1986,833],{"class":655},[645,1988,1989,1991,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2020,2022,2024,2027,2029,2031,2034,2036,2038],{"class":647,"line":686},[645,1990,839],{"class":808},[645,1992,706],{"class":655},[645,1994,844],{"class":702},[645,1996,728],{"class":689},[645,1998,844],{"class":659},[645,2000,734],{"class":655},[645,2002,853],{"class":659},[645,2004,1280],{"class":655},[645,2006,1283],{"class":858},[645,2008,1286],{"class":655},[645,2010,731],{"class":659},[645,2012,734],{"class":655},[645,2014,1293],{"class":659},[645,2016,772],{"class":655},[645,2018,2019],{"class":655}," ''",[645,2021,763],{"class":659},[645,2023,734],{"class":655},[645,2025,2026],{"class":808},"startsWith",[645,2028,811],{"class":659},[645,2030,830],{"class":655},[645,2032,2033],{"class":672},"\u002Fapi\u002Fwebhooks\u002F",[645,2035,830],{"class":655},[645,2037,763],{"class":659},[645,2039,833],{"class":655},[645,2041,2042,2044,2046,2048,2051,2053],{"class":647,"line":782},[645,2043,876],{"class":745},[645,2045,706],{"class":655},[645,2047,669],{"class":655},[645,2049,2050],{"class":672},"The webhook was acknowledged but not acted on",[645,2052,830],{"class":655},[645,2054,833],{"class":655},[645,2056,2057,2059,2061,2063,2065,2067,2069,2072,2074,2076,2078,2080,2082,2085,2087],{"class":647,"line":787},[645,2058,1134],{"class":745},[645,2060,706],{"class":655},[645,2062,656],{"class":655},[645,2064,1141],{"class":745},[645,2066,706],{"class":655},[645,2068,669],{"class":655},[645,2070,2071],{"class":672},"Unhandled event type, skipped, no side effect recorded",[645,2073,830],{"class":655},[645,2075,719],{"class":655},[645,2077,1155],{"class":745},[645,2079,706],{"class":655},[645,2081,669],{"class":655},[645,2083,2084],{"class":672},"The event was processed",[645,2086,830],{"class":655},[645,2088,1167],{"class":655},[645,2090,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2118],{"class":647,"line":794},[645,2092,1361],{"class":808},[645,2094,706],{"class":655},[645,2096,1366],{"class":702},[645,2098,728],{"class":689},[645,2100,1366],{"class":659},[645,2102,734],{"class":655},[645,2104,1375],{"class":659},[645,2106,1378],{"class":655},[645,2108,1366],{"class":659},[645,2110,734],{"class":655},[645,2112,1385],{"class":659},[645,2114,1388],{"class":655},[645,2116,2117],{"class":858}," 0.85",[645,2119,833],{"class":655},[645,2121,2122,2124],{"class":647,"line":817},[645,2123,989],{"class":655},[645,2125,1037],{"class":659},[645,2127,2128],{"class":647,"line":836},[645,2129,683],{"emptyLinePlaceholder":682},[645,2131,2132,2134,2136,2139,2141,2143,2145],{"class":647,"line":873},[645,2133,797],{"class":651},[645,2135,800],{"class":689},[645,2137,2138],{"class":659}," validationBug ",[645,2140,696],{"class":655},[645,2142,660],{"class":808},[645,2144,811],{"class":659},[645,2146,814],{"class":655},[645,2148,2149,2151,2153,2155,2157,2159],{"class":647,"line":890},[645,2150,820],{"class":745},[645,2152,706],{"class":655},[645,2154,669],{"class":655},[645,2156,1558],{"class":672},[645,2158,830],{"class":655},[645,2160,833],{"class":655},[645,2162,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181],{"class":647,"line":901},[645,2164,839],{"class":808},[645,2166,706],{"class":655},[645,2168,844],{"class":702},[645,2170,728],{"class":689},[645,2172,844],{"class":659},[645,2174,734],{"class":655},[645,2176,853],{"class":659},[645,2178,1280],{"class":655},[645,2180,868],{"class":858},[645,2182,833],{"class":655},[645,2184,2185,2187,2189,2191,2194,2196],{"class":647,"line":918},[645,2186,876],{"class":745},[645,2188,706],{"class":655},[645,2190,669],{"class":655},[645,2192,2193],{"class":672},"The rejected input was actually valid and our validation is wrong",[645,2195,830],{"class":655},[645,2197,833],{"class":655},[645,2199,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226],{"class":647,"line":935},[645,2201,1361],{"class":808},[645,2203,706],{"class":655},[645,2205,1366],{"class":702},[645,2207,728],{"class":689},[645,2209,1366],{"class":659},[645,2211,734],{"class":655},[645,2213,1375],{"class":659},[645,2215,1378],{"class":655},[645,2217,1366],{"class":659},[645,2219,734],{"class":655},[645,2221,1385],{"class":659},[645,2223,1388],{"class":655},[645,2225,2117],{"class":858},[645,2227,833],{"class":655},[645,2229,2230,2232],{"class":647,"line":952},[645,2231,989],{"class":655},[645,2233,1037],{"class":659},[618,2235,2236,2237,2240,2241,2244,2245,2247],{},"A validator that rejects ",[622,2238,2239],{},"hugo+test@example.com"," returns the same 400 as one that rejects ",[622,2242,2243],{},"notanemail",". ",[622,2246,1558],{}," reads the rejected value and the reason, and keeps the ones where the reason is wrong.",[1647,2249,2251],{"id":2250},"judge-agent-turns","Judge agent turns",[618,2253,2254,2257,2258,2261,2262,2265],{},[622,2255,2256],{},"evlog\u002Feve"," emits one wide event per agent turn with ",[622,2259,2260],{},"method: 'EVE'",". A sampled LLM-as-judge reads a few percent; a signal reads every turn. See ",[2263,2264,455],"a",{"href":456}," for the event shape.",[635,2267,2269],{"className":637,"code":2268,"language":640,"meta":641,"style":641},"const isTurn = (e: Record\u003Cstring, unknown>) =>\n  e.method === 'EVE' && typeof (e.eve as { turnId?: string } | undefined)?.turnId === 'string'\n\nexport const turnResolved = defineSignal({\n  name: 'turn-resolved',\n  when: isTurn,\n  ask: 'The agent accomplished what the user asked for in this turn',\n})\n\nexport const turnLooping = defineSignal({\n  name: 'turn-looping',\n  when: isTurn,\n  ask: 'The agent repeated the same tool call without making progress',\n  keep: v => v.value && v.confidence > 0.85,\n})\n\nexport const turnOffScript = defineSignal({\n  name: 'turn-off-script',\n  when: isTurn,\n  ask: 'The agent took an action the user did not ask for',\n  keep: v => v.value && v.confidence > 0.85,\n})\n",[622,2270,2271,2301,2364,2368,2385,2399,2410,2425,2431,2435,2452,2466,2476,2491,2521,2527,2531,2548,2562,2572,2587,2617],{"__ignoreMap":641},[645,2272,2273,2275,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298],{"class":647,"line":648},[645,2274,690],{"class":689},[645,2276,2277],{"class":659}," isTurn ",[645,2279,696],{"class":655},[645,2281,699],{"class":655},[645,2283,703],{"class":702},[645,2285,706],{"class":655},[645,2287,710],{"class":709},[645,2289,713],{"class":655},[645,2291,716],{"class":709},[645,2293,719],{"class":655},[645,2295,722],{"class":709},[645,2297,725],{"class":655},[645,2299,2300],{"class":689}," =>\n",[645,2302,2303,2306,2308,2311,2313,2315,2318,2320,2322,2325,2327,2329,2332,2334,2336,2339,2341,2343,2345,2347,2349,2351,2353,2356,2358,2360,2362],{"class":647,"line":679},[645,2304,2305],{"class":659},"  e",[645,2307,734],{"class":655},[645,2309,2310],{"class":659},"method ",[645,2312,1280],{"class":655},[645,2314,669],{"class":655},[645,2316,2317],{"class":672},"EVE",[645,2319,830],{"class":655},[645,2321,1286],{"class":655},[645,2323,2324],{"class":655}," typeof",[645,2326,731],{"class":659},[645,2328,734],{"class":655},[645,2330,2331],{"class":659},"eve ",[645,2333,740],{"class":651},[645,2335,656],{"class":655},[645,2337,2338],{"class":745}," turnId",[645,2340,749],{"class":655},[645,2342,752],{"class":709},[645,2344,663],{"class":655},[645,2346,757],{"class":655},[645,2348,760],{"class":709},[645,2350,763],{"class":659},[645,2352,766],{"class":655},[645,2354,2355],{"class":659},"turnId ",[645,2357,1280],{"class":655},[645,2359,669],{"class":655},[645,2361,716],{"class":672},[645,2363,676],{"class":655},[645,2365,2366],{"class":647,"line":686},[645,2367,683],{"emptyLinePlaceholder":682},[645,2369,2370,2372,2374,2377,2379,2381,2383],{"class":647,"line":782},[645,2371,797],{"class":651},[645,2373,800],{"class":689},[645,2375,2376],{"class":659}," turnResolved ",[645,2378,696],{"class":655},[645,2380,660],{"class":808},[645,2382,811],{"class":659},[645,2384,814],{"class":655},[645,2386,2387,2389,2391,2393,2395,2397],{"class":647,"line":787},[645,2388,820],{"class":745},[645,2390,706],{"class":655},[645,2392,669],{"class":655},[645,2394,1573],{"class":672},[645,2396,830],{"class":655},[645,2398,833],{"class":655},[645,2400,2401,2403,2405,2408],{"class":647,"line":794},[645,2402,839],{"class":745},[645,2404,706],{"class":655},[645,2406,2407],{"class":659}," isTurn",[645,2409,833],{"class":655},[645,2411,2412,2414,2416,2418,2421,2423],{"class":647,"line":817},[645,2413,876],{"class":745},[645,2415,706],{"class":655},[645,2417,669],{"class":655},[645,2419,2420],{"class":672},"The agent accomplished what the user asked for in this turn",[645,2422,830],{"class":655},[645,2424,833],{"class":655},[645,2426,2427,2429],{"class":647,"line":836},[645,2428,989],{"class":655},[645,2430,1037],{"class":659},[645,2432,2433],{"class":647,"line":873},[645,2434,683],{"emptyLinePlaceholder":682},[645,2436,2437,2439,2441,2444,2446,2448,2450],{"class":647,"line":890},[645,2438,797],{"class":651},[645,2440,800],{"class":689},[645,2442,2443],{"class":659}," turnLooping ",[645,2445,696],{"class":655},[645,2447,660],{"class":808},[645,2449,811],{"class":659},[645,2451,814],{"class":655},[645,2453,2454,2456,2458,2460,2462,2464],{"class":647,"line":901},[645,2455,820],{"class":745},[645,2457,706],{"class":655},[645,2459,669],{"class":655},[645,2461,1588],{"class":672},[645,2463,830],{"class":655},[645,2465,833],{"class":655},[645,2467,2468,2470,2472,2474],{"class":647,"line":918},[645,2469,839],{"class":745},[645,2471,706],{"class":655},[645,2473,2407],{"class":659},[645,2475,833],{"class":655},[645,2477,2478,2480,2482,2484,2487,2489],{"class":647,"line":935},[645,2479,876],{"class":745},[645,2481,706],{"class":655},[645,2483,669],{"class":655},[645,2485,2486],{"class":672},"The agent repeated the same tool call without making progress",[645,2488,830],{"class":655},[645,2490,833],{"class":655},[645,2492,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519],{"class":647,"line":952},[645,2494,1361],{"class":808},[645,2496,706],{"class":655},[645,2498,1366],{"class":702},[645,2500,728],{"class":689},[645,2502,1366],{"class":659},[645,2504,734],{"class":655},[645,2506,1375],{"class":659},[645,2508,1378],{"class":655},[645,2510,1366],{"class":659},[645,2512,734],{"class":655},[645,2514,1385],{"class":659},[645,2516,1388],{"class":655},[645,2518,2117],{"class":858},[645,2520,833],{"class":655},[645,2522,2523,2525],{"class":647,"line":958},[645,2524,989],{"class":655},[645,2526,1037],{"class":659},[645,2528,2529],{"class":647,"line":1032},[645,2530,683],{"emptyLinePlaceholder":682},[645,2532,2533,2535,2537,2540,2542,2544,2546],{"class":647,"line":1040},[645,2534,797],{"class":651},[645,2536,800],{"class":689},[645,2538,2539],{"class":659}," turnOffScript ",[645,2541,696],{"class":655},[645,2543,660],{"class":808},[645,2545,811],{"class":659},[645,2547,814],{"class":655},[645,2549,2550,2552,2554,2556,2558,2560],{"class":647,"line":1045},[645,2551,820],{"class":745},[645,2553,706],{"class":655},[645,2555,669],{"class":655},[645,2557,1603],{"class":672},[645,2559,830],{"class":655},[645,2561,833],{"class":655},[645,2563,2564,2566,2568,2570],{"class":647,"line":1051},[645,2565,839],{"class":745},[645,2567,706],{"class":655},[645,2569,2407],{"class":659},[645,2571,833],{"class":655},[645,2573,2574,2576,2578,2580,2583,2585],{"class":647,"line":1069},[645,2575,876],{"class":745},[645,2577,706],{"class":655},[645,2579,669],{"class":655},[645,2581,2582],{"class":672},"The agent took an action the user did not ask for",[645,2584,830],{"class":655},[645,2586,833],{"class":655},[645,2588,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615],{"class":647,"line":1085},[645,2590,1361],{"class":808},[645,2592,706],{"class":655},[645,2594,1366],{"class":702},[645,2596,728],{"class":689},[645,2598,1366],{"class":659},[645,2600,734],{"class":655},[645,2602,1375],{"class":659},[645,2604,1378],{"class":655},[645,2606,1366],{"class":659},[645,2608,734],{"class":655},[645,2610,1385],{"class":659},[645,2612,1388],{"class":655},[645,2614,2117],{"class":858},[645,2616,833],{"class":655},[645,2618,2619,2621],{"class":647,"line":1115},[645,2620,989],{"class":655},[645,2622,1037],{"class":659},[1647,2624,2626],{"id":2625},"flag-audit-actions-and-flaky-jobs","Flag audit actions and flaky jobs",[635,2628,2630],{"className":637,"code":2629,"language":640,"meta":641,"style":641},"export const auditReview = defineSignal({\n  name: 'audit-review',\n  when: e => typeof e.audit === 'object' && e.audit !== null,\n  ask: 'This action deserves a human review',\n  criteria: {\n    true: 'Privilege change, bulk deletion, export of personal data, action outside business hours by a non-admin',\n    false: 'Routine self-service action',\n  },\n  keep: v => v.value && v.confidence > 0.8,\n})\n\nexport const jobFlaky = defineSignal({\n  name: 'job-flaky',\n  when: e => typeof e.operation === 'string' && ((e.retries as number | undefined) ?? 0) > 0,\n  ask: 'The job only succeeded because it retried, and the underlying cause is still there',\n})\n",[622,2631,2632,2649,2663,2705,2720,2728,2744,2760,2764,2794,2800,2804,2821,2835,2895,2910],{"__ignoreMap":641},[645,2633,2634,2636,2638,2641,2643,2645,2647],{"class":647,"line":648},[645,2635,797],{"class":651},[645,2637,800],{"class":689},[645,2639,2640],{"class":659}," auditReview ",[645,2642,696],{"class":655},[645,2644,660],{"class":808},[645,2646,811],{"class":659},[645,2648,814],{"class":655},[645,2650,2651,2653,2655,2657,2659,2661],{"class":647,"line":679},[645,2652,820],{"class":745},[645,2654,706],{"class":655},[645,2656,669],{"class":655},[645,2658,1618],{"class":672},[645,2660,830],{"class":655},[645,2662,833],{"class":655},[645,2664,2665,2667,2669,2671,2673,2675,2677,2679,2682,2684,2686,2689,2691,2693,2695,2697,2699,2702],{"class":647,"line":686},[645,2666,839],{"class":808},[645,2668,706],{"class":655},[645,2670,844],{"class":702},[645,2672,728],{"class":689},[645,2674,2324],{"class":655},[645,2676,844],{"class":659},[645,2678,734],{"class":655},[645,2680,2681],{"class":659},"audit ",[645,2683,1280],{"class":655},[645,2685,669],{"class":655},[645,2687,2688],{"class":672},"object",[645,2690,830],{"class":655},[645,2692,1286],{"class":655},[645,2694,844],{"class":659},[645,2696,734],{"class":655},[645,2698,2681],{"class":659},[645,2700,2701],{"class":655},"!==",[645,2703,2704],{"class":655}," null,\n",[645,2706,2707,2709,2711,2713,2716,2718],{"class":647,"line":782},[645,2708,876],{"class":745},[645,2710,706],{"class":655},[645,2712,669],{"class":655},[645,2714,2715],{"class":672},"This action deserves a human review",[645,2717,830],{"class":655},[645,2719,833],{"class":655},[645,2721,2722,2724,2726],{"class":647,"line":787},[645,2723,1134],{"class":745},[645,2725,706],{"class":655},[645,2727,898],{"class":655},[645,2729,2730,2733,2735,2737,2740,2742],{"class":647,"line":794},[645,2731,2732],{"class":745},"    true",[645,2734,706],{"class":655},[645,2736,669],{"class":655},[645,2738,2739],{"class":672},"Privilege change, bulk deletion, export of personal data, action outside business hours by a non-admin",[645,2741,830],{"class":655},[645,2743,833],{"class":655},[645,2745,2746,2749,2751,2753,2756,2758],{"class":647,"line":817},[645,2747,2748],{"class":745},"    false",[645,2750,706],{"class":655},[645,2752,669],{"class":655},[645,2754,2755],{"class":672},"Routine self-service action",[645,2757,830],{"class":655},[645,2759,833],{"class":655},[645,2761,2762],{"class":647,"line":836},[645,2763,955],{"class":655},[645,2765,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792],{"class":647,"line":873},[645,2767,1361],{"class":808},[645,2769,706],{"class":655},[645,2771,1366],{"class":702},[645,2773,728],{"class":689},[645,2775,1366],{"class":659},[645,2777,734],{"class":655},[645,2779,1375],{"class":659},[645,2781,1378],{"class":655},[645,2783,1366],{"class":659},[645,2785,734],{"class":655},[645,2787,1385],{"class":659},[645,2789,1388],{"class":655},[645,2791,1391],{"class":858},[645,2793,833],{"class":655},[645,2795,2796,2798],{"class":647,"line":890},[645,2797,989],{"class":655},[645,2799,1037],{"class":659},[645,2801,2802],{"class":647,"line":901},[645,2803,683],{"emptyLinePlaceholder":682},[645,2805,2806,2808,2810,2813,2815,2817,2819],{"class":647,"line":918},[645,2807,797],{"class":651},[645,2809,800],{"class":689},[645,2811,2812],{"class":659}," jobFlaky ",[645,2814,696],{"class":655},[645,2816,660],{"class":808},[645,2818,811],{"class":659},[645,2820,814],{"class":655},[645,2822,2823,2825,2827,2829,2831,2833],{"class":647,"line":935},[645,2824,820],{"class":745},[645,2826,706],{"class":655},[645,2828,669],{"class":655},[645,2830,1633],{"class":672},[645,2832,830],{"class":655},[645,2834,833],{"class":655},[645,2836,2837,2839,2841,2843,2845,2847,2849,2851,2854,2856,2858,2860,2862,2864,2867,2869,2872,2874,2877,2879,2881,2883,2885,2887,2889,2891,2893],{"class":647,"line":952},[645,2838,839],{"class":808},[645,2840,706],{"class":655},[645,2842,844],{"class":702},[645,2844,728],{"class":689},[645,2846,2324],{"class":655},[645,2848,844],{"class":659},[645,2850,734],{"class":655},[645,2852,2853],{"class":659},"operation ",[645,2855,1280],{"class":655},[645,2857,669],{"class":655},[645,2859,716],{"class":672},[645,2861,830],{"class":655},[645,2863,1286],{"class":655},[645,2865,2866],{"class":659}," ((e",[645,2868,734],{"class":655},[645,2870,2871],{"class":659},"retries ",[645,2873,740],{"class":651},[645,2875,2876],{"class":709}," number",[645,2878,757],{"class":655},[645,2880,760],{"class":709},[645,2882,862],{"class":659},[645,2884,772],{"class":655},[645,2886,859],{"class":858},[645,2888,862],{"class":659},[645,2890,1388],{"class":655},[645,2892,859],{"class":858},[645,2894,833],{"class":655},[645,2896,2897,2899,2901,2903,2906,2908],{"class":647,"line":958},[645,2898,876],{"class":745},[645,2900,706],{"class":655},[645,2902,669],{"class":655},[645,2904,2905],{"class":672},"The job only succeeded because it retried, and the underlying cause is still there",[645,2907,830],{"class":655},[645,2909,833],{"class":655},[645,2911,2912,2914],{"class":647,"line":1032},[645,2913,989],{"class":655},[645,2915,1037],{"class":659},[618,2917,2918,2921,2922,2924],{},[2263,2919,2920],{"href":403},"Audit events"," carry the actor, the action and the target; the risk is in the combination, and ",[622,2923,1618],{}," is one reviewer queue instead of a rule per combination.",[627,2926,2928],{"id":2927},"more-that-fit-the-shape","More that fit the shape",[618,2930,2931,2934,2935,2938,2939,2942,2943,2946,2947,2950,2951,2954,2955,2958,2959,2962],{},[622,2932,2933],{},"first-seen"," (is this error new for this route), ",[622,2936,2937],{},"user-impact"," (none, degraded, blocked), ",[622,2940,2941],{},"owner"," (which team should look), ",[622,2944,2945],{},"known-error"," (which catalog entry is this, from your own ",[622,2948,2949],{},"why"," and ",[622,2952,2953],{},"fix","), ",[622,2956,2957],{},"frustration"," on support conversations, ",[622,2960,2961],{},"did-succeed"," on session events.",[627,2964,2966],{"id":2965},"not-a-fit","Not a fit",[1405,2968,2969,2979,2994,3000],{},[1408,2970,2971,2975,2976,734],{},[2972,2973,2974],"strong",{},"Secret or PII detection."," Sending a value to a model to ask whether it is a secret is the leak. Use ",[2263,2977,2978],{"href":72},"redaction",[1408,2980,2981,2984,2985,2987,2988,2950,2990,2993],{},[2972,2982,2983],{},"Paging."," Never page on a probability. ",[622,2986,1483],{}," ranks what to read first; an alert on ",[622,2989,1010],{},[622,2991,2992],{},"durationMs"," decides who wakes up.",[1408,2995,2996,2999],{},[2972,2997,2998],{},"Anything adversarial as a single verdict."," A model that can be asked can be prompted.",[1408,3001,3002,3005],{},[2972,3003,3004],{},"Anything numeric."," A decision model returns a distribution over options, not a number. Compute it in the handler and log it.",[3007,3008,3009],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":641,"searchDepth":679,"depth":679,"links":3011},[3012,3013,3019,3020],{"id":629,"depth":679,"text":630},{"id":1434,"depth":679,"text":1435,"children":3014},[3015,3016,3017,3018],{"id":1649,"depth":686,"text":1650},{"id":1949,"depth":686,"text":1950},{"id":2250,"depth":686,"text":2251},{"id":2625,"depth":686,"text":2626},{"id":2927,"depth":679,"text":2928},{"id":2965,"depth":679,"text":2966},"Three signals to start with, then nine more to copy: failures explained, 200s that lied, agent turns, audit actions, flaky jobs.","md",[3024,3027],{"label":41,"icon":44,"to":470,"color":3025,"variant":3026},"neutral","subtle",{"label":473,"icon":476,"to":474,"color":3025,"variant":3026},{},{"title":425,"icon":488},{"title":425,"description":3021},"eLySC9I32Niif3g_68gJV0HY_vJ5F8nZSKCU83yM5jI",[3033,3035],{"title":446,"path":483,"stem":484,"description":3034,"icon":84,"children":-1},"Every option of defineSignal and createSignals with its default, the column format, the stats() counters, and the test helpers in @evlog\u002Fsignals\u002Ftesting.",{"title":41,"path":495,"stem":496,"description":3036,"icon":497,"children":-1},"Observe what flows through the pipeline, plug into it, or build your own bricks. The map of every extension point evlog exposes.",1791636485696]