[{"data":1,"prerenderedAt":3665},["ShallowReactive",2],{"navigation":3,"page:\u002Fconcepts\u002Fvalidation-and-warnings":1019,"surround:\u002Fconcepts\u002Fvalidation-and-warnings":3657},[4,21,82,133,154,1010],[5,6,7,8],"Getting started","\u002Fgetting-started","i-lucide-rocket",[9,12,15,18],[10,6,11,11],"What Kaabist is",0,[13,14,11,11],"API keys and modes","keys-and-modes",[16,17,11,11],"Your first job","first-job",[19,20,11,11],"Understanding the envelope","envelope",[22,23,24,25],"Concepts","\u002Fconcepts","i-lucide-book-open",[26,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79],[27,23,11,11],"Overview",[29,30,11,11],"Programs and versions","programs-and-versions",[32,33,11,11],"Tiers and escalation","tiers-and-escalation",[35,36,11,11],"The http tier","http-tier",[38,39,11,11],"The browser tier","browser-tier",[41,42,11,11],"Sessions","sessions",[44,45,11,11],"Human in the loop","human-in-the-loop",[47,48,11,11],"How healing works","self-healing",[50,51,11,11],"Obstacles and captchas","obstacles",[53,54,11,11],"Validation and warnings","validation-and-warnings",[56,57,11,11],"Credits and billing","credits-and-billing",[59,60,11,11],"Limits","limits",[62,63,11,11],"Locators","locators",[65,66,11,11],"Snapshots","snapshots",[68,69,11,11],"Egress and proxies","egress-and-proxies",[71,72,11,11],"Queueing and fairness","queueing",[74,75,11,11],"Accounts, organisations and roles","accounts-and-roles",[77,78,11,11],"Data retention","data-retention",[80,81,11,11],"Documents and PDFs","documents-and-pdfs",[83,84,85,86],"Guides","\u002Fguides","i-lucide-map",[87,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130],[27,84,11,11],[89,90,11,11],"Authenticated flows","authenticated-flows",[92,93,11,11],"Hosted resolve pages","hosted-resolve",[95,96,11,11],"Lists and pagination","lists-and-pagination",[98,99,11,11],"JSON and network locators","json-and-network-locators",[101,102,11,11],"Schedules and change detection","schedules-and-change-detection",[104,105,11,11],"Webhooks","webhooks",[107,108,11,11],"Bring your own providers","byo-providers",[110,111,11,11],"Testing: replay, dry-run and test mode","testing",[113,114,11,11],"Side-effect safety","side-effect-safety",[116,117,11,11],"Security & data handling","security-and-data",[119,120,11,11],"Migrating from other tools","migrating",[122,123,11,11],"Drift detection and canaries","drift-and-canaries",[125,126,11,11],"SDKs","sdks",[128,129,11,11],"The kaab CLI","cli",[131,132,11,11],"Coding agents (MCP)","mcp",[134,135,136,137],"Panel","\u002Fpanel","i-lucide-layout-dashboard",[138,139,142,145,148,151],[27,135,11,11],[140,141,11,11],"The program builder","builder",[143,144,11,11],"Picking and recording","picking-and-recording",[146,147,11,11],"Taking over a job","takeover",[149,150,11,11],"Getting help","support",[152,153,11,11],"Referrals","referrals",[155,156,157,158],"Reference","\u002Freference","i-lucide-library",[159,160,520,834,837,840,1006,1007],[27,156,11,11],[161,162,11,163],"API","api",[164,166,169,212,222,274,297,316,347,376,389,396,403,410,426,447,454],[27,165,11,11],"\u002Freference\u002Fapi",[167,168,11,11],"Interactive reference","explorer",[170,171,11,172],"Jobs","jobs",[173,176,179,182,185,188,191,194,197,200,203,206,209],[174,175,11,11],"Create job","create-job",[177,178,11,11],"List jobs","list-jobs",[180,181,11,11],"Create job batch","create-job-batch",[183,184,11,11],"Estimate job","estimate-job",[186,187,11,11],"Get job","get-job",[189,190,11,11],"List job steps","list-job-steps",[192,193,11,11],"Get job snapshot","get-job-snapshot",[195,196,11,11],"Get job screenshot","get-job-screenshot",[198,199,11,11],"Get job artifact","get-job-artifact",[201,202,11,11],"Submit job input","submit-job-input",[204,205,11,11],"Resume job","resume-job",[207,208,11,11],"Takeover job","takeover-job",[210,211,11,11],"Cancel job","cancel-job",[213,214,11,215],"Batches","batches",[216,219],[217,218,11,11],"Get batch","get-batch",[220,221,11,11],"List batch jobs","list-batch-jobs",[223,224,11,225],"Programs","programs",[226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271],[227,228,11,11],"Create program","create-program",[230,231,11,11],"List programs","list-programs",[233,234,11,11],"Lint program","lint-program",[236,237,11,11],"Get program","get-program",[239,240,11,11],"Update program","update-program",[242,243,11,11],"Delete program","delete-program",[245,246,11,11],"List program versions","list-program-versions",[248,249,11,11],"Create program version","create-program-version",[251,252,11,11],"Update program version","update-program-version",[254,255,11,11],"Delete program version","delete-program-version",[257,258,11,11],"Get program version","get-program-version",[260,261,11,11],"Publish program version","publish-program-version",[263,264,11,11],"Diff program version","diff-program-version",[266,267,11,11],"Replay program version","replay-program-version",[269,270,11,11],"Set program alias","set-program-alias",[272,273,11,11],"Delete program alias","delete-program-alias",[41,42,11,275],[276,279,282,285,288,291,294],[277,278,11,11],"Create session","create-session",[280,281,11,11],"List sessions","list-sessions",[283,284,11,11],"Get session","get-session",[286,287,11,11],"Update session","update-session",[289,290,11,11],"Delete session","delete-session",[292,293,11,11],"Verify session","verify-session",[295,296,11,11],"Refresh session","refresh-session",[298,299,11,300],"Proposals","proposals",[301,304,307,310,313],[302,303,11,11],"List proposals","list-proposals",[305,306,11,11],"Get proposal","get-proposal",[308,309,11,11],"Approve proposal","approve-proposal",[311,312,11,11],"Reject proposal","reject-proposal",[314,315,11,11],"Edit proposal","edit-proposal",[317,318,11,319],"Schedules","schedules",[320,323,326,329,332,335,338,341,344],[321,322,11,11],"Create schedule","create-schedule",[324,325,11,11],"List schedules","list-schedules",[327,328,11,11],"Get schedule","get-schedule",[330,331,11,11],"Update schedule","update-schedule",[333,334,11,11],"Delete schedule","delete-schedule",[336,337,11,11],"Pause schedule","pause-schedule",[339,340,11,11],"Resume schedule","resume-schedule",[342,343,11,11],"List schedule runs","list-schedule-runs",[345,346,11,11],"Get schedule run diff","get-schedule-run-diff",[104,105,11,348],[349,352,355,358,361,364,367,370,373],[350,351,11,11],"Create webhook","create-webhook",[353,354,11,11],"List webhooks","list-webhooks",[356,357,11,11],"Get webhook","get-webhook",[359,360,11,11],"Update webhook","update-webhook",[362,363,11,11],"Delete webhook","delete-webhook",[365,366,11,11],"Rotate webhook secret","rotate-webhook-secret",[368,369,11,11],"List webhook deliveries","list-webhook-deliveries",[371,372,11,11],"Resend webhook delivery","resend-webhook-delivery",[374,375,11,11],"Test webhook","test-webhook",[377,378,11,379],"Organisation","org",[380,383,386],[381,382,11,11],"Rotate org webhook secret","rotate-org-webhook-secret",[384,385,11,11],"Get org","get-org",[387,388,11,11],"Request data deletion","request-data-deletion",[390,391,11,392],"Credits","credits",[393],[394,395,11,11],"Get credits","get-credits",[397,398,11,399],"Ledger","ledger",[400],[401,402,11,11],"List ledger entries","list-ledger-entries",[404,405,11,406],"Usage","usage",[407],[408,409,11,11],"Get usage","get-usage",[411,412,11,413],"API keys","api-keys",[414,417,420,423],[415,416,11,11],"List API keys","list-api-keys",[418,419,11,11],"Create API key","create-api-key",[421,422,11,11],"Rotate API key","rotate-api-key",[424,425,11,11],"Revoke API key","revoke-api-key",[427,108,11,428],"BYO providers",[429,432,435,438,441,444],[430,431,11,11],"List BYO providers","list-byo-providers",[433,434,11,11],"Create BYO provider","create-byo-provider",[436,437,11,11],"Get BYO provider","get-byo-provider",[439,440,11,11],"Update BYO provider","update-byo-provider",[442,443,11,11],"Delete BYO provider","delete-byo-provider",[445,446,11,11],"Test BYO provider","test-byo-provider",[448,449,11,450],"Sites","sites",[451],[452,453,11,11],"Get site profile","get-site-profile",[455,456,11,457],"Objects","schemas",[458,460,463,466,469,470,473,476,479,482,485,487,490,493,496,499,502,505,508,511,514,517],[27,459,11,11],"\u002Freference\u002Fapi\u002Fschemas",[461,462,11,11],"ApiKey","api-key",[464,465,11,11],"Batch","batch",[467,468,11,11],"ByoProvider","byo-provider",[390,391,11,11],[471,472,11,11],"ErrorResponse","error-response",[474,475,11,11],"ExtractSchema","extract-schema",[477,478,11,11],"Job","job",[480,481,11,11],"LedgerEntry","ledger-entry",[483,484,11,11],"LintResult","lint-result",[486,378,11,11],"Org",[488,489,11,11],"Program","program",[491,492,11,11],"ProgramDefinition","program-definition",[494,495,11,11],"ProgramVersion","program-version",[497,498,11,11],"Proposal","proposal",[500,501,11,11],"Schedule","schedule",[503,504,11,11],"Session","session",[506,507,11,11],"SiteProfile","site-profile",[509,510,11,11],"StepRecord","step-record",[512,513,11,11],"Webhook","webhook",[515,516,11,11],"WebhookDelivery","webhook-delivery",[518,519,11,11],"WebhookEvent","webhook-event",[521,522,11,523],"DSL","dsl",[524,526,529,532,535,538,603,637,640,751,754,756],[27,525,11,11],"\u002Freference\u002Fdsl",[527,528,11,11],"Inputs","inputs",[530,531,11,11],"Options","options",[533,534,11,11],"Policies","policies",[536,537,11,11],"Steps","steps",[539,540,11,541],"Actions","actions",[542,544,546,548,550,552,554,556,558,560,562,565,568,570,573,575,577,579,582,585,587,589,591,594,596,598,600],[27,543,11,11],"\u002Freference\u002Fdsl\u002Factions",[545,545,11,11],"fill",[547,547,11,11],"click",[549,549,11,11],"press",[551,551,11,11],"hover",[553,553,11,11],"select",[555,555,11,11],"check",[557,557,11,11],"uncheck",[559,559,11,11],"upload",[561,561,11,11],"scroll",[563,564,11,11],"wait_for","wait-for",[566,567,11,11],"set_session","set-session",[569,569,11,11],"extract",[571,572,11,11],"capture_response","capture-response",[574,574,11,11],"evaluate",[576,576,11,11],"paginate",[578,578,11,11],"download",[580,581,11,11],"read_pdf","read-pdf",[583,584,11,11],"set_vars","set-vars",[586,586,11,11],"sleep",[588,588,11,11],"reload",[590,590,11,11],"goto",[592,593,11,11],"await_input","await-input",[595,595,11,11],"checkpoint",[597,597,11,11],"screenshot",[599,599,11,11],"when",[601,602,11,11],"loop_until","loop-until",[604,605,11,606],"Conditions","conditions",[607,609,611,613,615,617,619,621,623,625,627,629,631,633,635],[27,608,11,11],"\u002Freference\u002Fdsl\u002Fconditions",[610,610,11,11],"url",[612,612,11,11],"title",[614,614,11,11],"visible",[616,616,11,11],"hidden",[618,618,11,11],"exists",[620,620,11,11],"absent",[622,622,11,11],"text",[624,624,11,11],"count",[626,626,11,11],"network",[628,628,11,11],"var",[630,630,11,11],"landmark",[632,632,11,11],"all",[634,634,11,11],"any",[636,636,11,11],"not",[638,639,11,11],"Targets","targets",[641,642,11,643],"Fields","fields",[644,646,649,651,654,656,659,661,663,666,668,671,672,674,677,679,681,683,685,687,690,693,695,698,701,703,704,707,709,712,714,716,718,720,722,724,726,728,731,733,734,736,738,740,743,745,747,749],[27,645,11,11],"\u002Freference\u002Fdsl\u002Ffields",[647,648,11,11],"allow_suffix","allow-suffix",[650,650,11,11],"attr",[652,653,11,11],"base_url","base-url",[655,655,11,11],"candidates",[657,658,11,11],"case_insensitive","case-insensitive",[660,660,11,11],"country",[662,662,11,11],"currency",[664,665,11,11],"date_format","date-format",[667,667,11,11],"decimal",[669,670,11,11],"false_values","false-values",[642,642,11,11],[673,673,11,11],"flags",[675,676,11,11],"follow_redirects","follow-redirects",[678,678,11,11],"frame",[680,680,11,11],"json",[682,682,11,11],"locale",[684,684,11,11],"many",[686,686,11,11],"max",[688,689,11,11],"max_items","max-items",[691,692,11,11],"max_length","max-length",[694,694,11,11],"min",[696,697,11,11],"min_items","min-items",[699,700,11,11],"min_length","min-length",[702,702,11,11],"name",[626,626,11,11],[705,706,11,11],"null_markers","null-markers",[708,708,11,11],"nullable",[710,711,11,11],"on_invalid","on-invalid",[713,713,11,11],"pattern",[715,715,11,11],"presence",[717,717,11,11],"regex",[719,719,11,11],"required",[721,721,11,11],"role",[723,723,11,11],"sample",[725,725,11,11],"selector",[727,727,11,11],"source",[729,730,11,11],"strip_fragment","strip-fragment",[732,732,11,11],"testid",[622,622,11,11],[735,735,11,11],"thousands",[737,737,11,11],"timezone",[739,739,11,11],"transforms",[741,742,11,11],"true_values","true-values",[744,744,11,11],"type",[746,746,11,11],"unique",[748,748,11,11],"values",[750,750,11,11],"xpath",[752,753,11,11],"Assertions","assertions",[755,739,11,11],"Transforms",[757,758,11,759],"Lint codes","lint",[760,762,765,768,771,774,777,780,783,786,789,792,795,798,801,804,807,810,813,816,819,822,825,828,831],[27,761,11,11],"\u002Freference\u002Fdsl\u002Flint",[763,764,11,11],"E001","e001",[766,767,11,11],"E002","e002",[769,770,11,11],"E003","e003",[772,773,11,11],"E004","e004",[775,776,11,11],"E005","e005",[778,779,11,11],"E006","e006",[781,782,11,11],"E007","e007",[784,785,11,11],"E008","e008",[787,788,11,11],"E009","e009",[790,791,11,11],"E010","e010",[793,794,11,11],"E011","e011",[796,797,11,11],"E012","e012",[799,800,11,11],"E013","e013",[802,803,11,11],"E014","e014",[805,806,11,11],"W001","w001",[808,809,11,11],"W002","w002",[811,812,11,11],"W003","w003",[814,815,11,11],"W004","w004",[817,818,11,11],"W005","w005",[820,821,11,11],"W006","w006",[823,824,11,11],"W007","w007",[826,827,11,11],"W008","w008",[829,830,11,11],"W009","w009",[832,833,11,11],"W010","w010",[835,836,11,11],"Codes","codes",[838,839,11,11],"Events","events",[841,129,11,842],"CLI",[843,845,847,850,853,856,859,862,865,868,871,874,877,880,883,886,889,892,895,898,901,904,907,910,913,916,919,922,925,928,931,934,937,940,943,946,949,952,955,958,961,964,967,970,973,976,979,982,985,988,991,994,997,1000,1003],[27,844,11,11],"\u002Freference\u002Fcli",[846,846,11,11],"kaab",[848,849,11,11],"kaab auth","kaab-auth",[851,852,11,11],"kaab auth login","kaab-auth-login",[854,855,11,11],"kaab auth logout","kaab-auth-logout",[857,858,11,11],"kaab auth status","kaab-auth-status",[860,861,11,11],"kaab completion","kaab-completion",[863,864,11,11],"kaab completion bash","kaab-completion-bash",[866,867,11,11],"kaab completion fish","kaab-completion-fish",[869,870,11,11],"kaab completion powershell","kaab-completion-powershell",[872,873,11,11],"kaab completion zsh","kaab-completion-zsh",[875,876,11,11],"kaab credits","kaab-credits",[878,879,11,11],"kaab jobs","kaab-jobs",[881,882,11,11],"kaab jobs cancel","kaab-jobs-cancel",[884,885,11,11],"kaab jobs get","kaab-jobs-get",[887,888,11,11],"kaab jobs input","kaab-jobs-input",[890,891,11,11],"kaab jobs list","kaab-jobs-list",[893,894,11,11],"kaab jobs resume","kaab-jobs-resume",[896,897,11,11],"kaab jobs run","kaab-jobs-run",[899,900,11,11],"kaab jobs snapshot","kaab-jobs-snapshot",[902,903,11,11],"kaab jobs steps","kaab-jobs-steps",[905,906,11,11],"kaab jobs takeover","kaab-jobs-takeover",[908,909,11,11],"kaab open","kaab-open",[911,912,11,11],"kaab open job","kaab-open-job",[914,915,11,11],"kaab programs","kaab-programs",[917,918,11,11],"kaab programs alias","kaab-programs-alias",[920,921,11,11],"kaab programs alias set","kaab-programs-alias-set",[923,924,11,11],"kaab programs diff","kaab-programs-diff",[926,927,11,11],"kaab programs lint","kaab-programs-lint",[929,930,11,11],"kaab programs list","kaab-programs-list",[932,933,11,11],"kaab programs pull","kaab-programs-pull",[935,936,11,11],"kaab programs push","kaab-programs-push",[938,939,11,11],"kaab proposals","kaab-proposals",[941,942,11,11],"kaab proposals approve","kaab-proposals-approve",[944,945,11,11],"kaab proposals list","kaab-proposals-list",[947,948,11,11],"kaab proposals reject","kaab-proposals-reject",[950,951,11,11],"kaab proposals show","kaab-proposals-show",[953,954,11,11],"kaab schedules","kaab-schedules",[956,957,11,11],"kaab schedules create","kaab-schedules-create",[959,960,11,11],"kaab schedules list","kaab-schedules-list",[962,963,11,11],"kaab schedules pause","kaab-schedules-pause",[965,966,11,11],"kaab schedules resume","kaab-schedules-resume",[968,969,11,11],"kaab schedules runs","kaab-schedules-runs",[971,972,11,11],"kaab sessions","kaab-sessions",[974,975,11,11],"kaab sessions create","kaab-sessions-create",[977,978,11,11],"kaab sessions delete","kaab-sessions-delete",[980,981,11,11],"kaab sessions list","kaab-sessions-list",[983,984,11,11],"kaab sessions verify","kaab-sessions-verify",[986,987,11,11],"kaab usage","kaab-usage",[989,990,11,11],"kaab version","kaab-version",[992,993,11,11],"kaab webhooks","kaab-webhooks",[995,996,11,11],"kaab webhooks create","kaab-webhooks-create",[998,999,11,11],"kaab webhooks deliveries","kaab-webhooks-deliveries",[1001,1002,11,11],"kaab webhooks list","kaab-webhooks-list",[1004,1005,11,11],"kaab webhooks test","kaab-webhooks-test",[125,126,11,11],[1008,1009,11,11],"Plans and pricing","plans",[1011,1012,1013,1014],"Changelog","\u002Fchangelog","i-lucide-history",[1015,1016],[27,1012,11,11],[1017,1018,11,11],"Deprecations","deprecations",{"id":1020,"title":53,"body":1021,"breaking":3647,"date":3648,"description":3649,"extension":3650,"generated":3647,"meta":3651,"navigation":3652,"path":3653,"seo":3654,"stem":3655,"version":3648,"__hash__":3656},"docs\u002F2.concepts\u002F09.validation-and-warnings.md",{"type":1022,"value":1023,"toc":3621},"minimark",[1024,1033,1038,1052,1056,1065,1143,1150,1155,1168,1179,1183,1378,1382,1386,1418,1421,1437,1441,1455,1985,2005,2008,2047,2051,2072,2074,2110,2113,2276,2297,2301,2307,2385,2399,2403,2498,2503,2523,2527,2550,2607,2613,2617,2642,2848,2865,2869,2872,2923,2927,2944,3344,3363,3366,3476,3482,3486,3554,3557,3617],[1025,1026,1027,1028,1032],"p",{},"Every extracted field goes through the same pipeline: find it, keep the raw string, parse it with the configuration your program gives, check its constraints, and apply its policy. When something is off, you get a typed ",[1029,1030,1031],"code",{},"null"," and a warning that says why, rather than a guess that looks like data.",[1034,1035,1037],"h2",{"id":1036},"when-to-use-it","When to use it",[1025,1039,1040,1041,1043,1044,1047,1048,1051],{},"Read this page when you write the ",[1029,1042,569],{}," part of a program, when a result has warnings you need to act on, or when you decide how strict a job should be. The defaults favour keeping the job useful: one unreadable price out of forty is content, and the other thirty-nine still arrive. A program that would rather fail than return anything doubtful sets ",[1029,1045,1046],{},"policies.strict"," or per-field ",[1029,1049,1050],{},"on_invalid: \"fail\"",".",[1034,1053,1055],{"id":1054},"the-pipeline","The pipeline",[1057,1058,1062],"pre",{"className":1059,"code":1061,"language":622},[1060],"language-text","locate → raw → null markers → transforms → parse → constraints → policy\n",[1029,1063,1061],{"__ignoreMap":1064},"",[1066,1067,1068,1080,1089,1097,1116,1122,1135],"ol",{},[1069,1070,1071,1075,1076,1051],"li",{},[1072,1073,1074],"strong",{},"Locate",": the field's locator finds an element, a JSON value or a captured response. See ",[1077,1078,62],"a",{"href":1079},"\u002Fconcepts\u002Flocators",[1069,1081,1082,1085,1086,1088],{},[1072,1083,1084],{},"Raw",": the element's normalised text (or the attribute named by ",[1029,1087,650],{},") is kept as the raw string.",[1069,1090,1091,1094,1095,1051],{},[1072,1092,1093],{},"Null markers",": a raw string that is a null marker becomes ",[1029,1096,1031],{},[1069,1098,1099,1101,1102,1105,1106,1105,1109,1105,1112,1115],{},[1072,1100,755],{},": pure, bounded string operations (",[1029,1103,1104],{},"trim",", ",[1029,1107,1108],{},"replace",[1029,1110,1111],{},"split",[1029,1113,1114],{},"slice"," and the rest), in order.",[1069,1117,1118,1121],{},[1072,1119,1120],{},"Parse",": the string becomes the field's type, using the field's parse configuration.",[1069,1123,1124,1127,1128,1105,1130,1105,1132,1134],{},[1072,1125,1126],{},"Constraints",": ",[1029,1129,694],{},[1029,1131,686],{},[1029,1133,713],{}," and the rest are checked against the parsed value.",[1069,1136,1137,1140,1141,1051],{},[1072,1138,1139],{},"Policy",": a failure at steps 5 or 6 is handled by the field's ",[1029,1142,710],{},[1025,1144,1145,1146,1149],{},"Cross-field ",[1029,1147,1148],{},"$asserts"," run after every field is read.",[1151,1152,1154],"h3",{"id":1153},"the-raw-string-is-always-kept","The raw string is always kept",[1025,1156,1157,1158,1160,1161,1163,1164,1167],{},"Whatever a field ends up as, the string it was read from is kept. A price that came out ",[1029,1159,1031],{}," because the page printed an em dash (U+2014) is a page behaving normally; the same ",[1029,1162,1031],{}," from a page that printed ",[1029,1165,1166],{},"1.337,40 TL"," is a parser configured wrongly, and only the raw string tells the two apart.",[1025,1169,1170,1171,1174,1175,1178],{},"A job returns ",[1029,1172,1173],{},"raw"," for every field that failed or came out null. Set ",[1029,1176,1177],{},"policies.include_raw: true"," to get it for every field.",[1034,1180,1182],{"id":1181},"types","Types",[1184,1185,1186,1200],"table",{},[1187,1188,1189],"thead",{},[1190,1191,1192,1197],"tr",{},[1193,1194,1195],"th",{},[1029,1196,744],{},[1193,1198,1199],{},"Produces",[1201,1202,1203,1215,1224,1247,1259,1285,1297,1307,1323,1333,1346,1359],"tbody",{},[1190,1204,1205,1212],{},[1206,1207,1208,1211],"td",{},[1029,1209,1210],{},"string"," (default)",[1206,1213,1214],{},"the text, as printed",[1190,1216,1217,1221],{},[1206,1218,1219],{},[1029,1220,622],{},[1206,1222,1223],{},"multi-line text with whitespace normalised",[1190,1225,1226,1234],{},[1206,1227,1228,1105,1231],{},[1029,1229,1230],{},"number",[1029,1232,1233],{},"integer",[1206,1235,1236,1237,1240,1241,1105,1244],{},"a number, read with the field's locale; ",[1029,1238,1239],{},"allow_suffix: true"," also reads ",[1029,1242,1243],{},"1.2k",[1029,1245,1246],{},"1,5M",[1190,1248,1249,1254],{},[1206,1250,1251],{},[1029,1252,1253],{},"money",[1206,1255,1256],{},[1029,1257,1258],{},"{ \"amount\": 1337.4, \"currency\": \"TRY\" }",[1190,1260,1261,1266],{},[1206,1262,1263],{},[1029,1264,1265],{},"boolean",[1206,1267,1268,1271,1272,1275,1276,1271,1278,1280,1281,1284],{},[1029,1269,1270],{},"true"," \u002F ",[1029,1273,1274],{},"false"," from ",[1029,1277,741],{},[1029,1279,669],{},"; ",[1029,1282,1283],{},"presence: true"," reads whether the element exists",[1190,1286,1287,1292],{},[1206,1288,1289],{},[1029,1290,1291],{},"date",[1206,1293,1294],{},[1029,1295,1296],{},"YYYY-MM-DD",[1190,1298,1299,1304],{},[1206,1300,1301],{},[1029,1302,1303],{},"datetime",[1206,1305,1306],{},"an ISO-8601 string with an explicit offset",[1190,1308,1309,1313],{},[1206,1310,1311],{},[1029,1312,610],{},[1206,1314,1315,1316,1318,1319,1322],{},"an absolute URL, resolved against the page (or ",[1029,1317,652],{},"); ",[1029,1320,1321],{},"javascript:"," is refused",[1190,1324,1325,1330],{},[1206,1326,1327],{},[1029,1328,1329],{},"email",[1206,1331,1332],{},"an address",[1190,1334,1335,1340],{},[1206,1336,1337],{},[1029,1338,1339],{},"phone",[1206,1341,1342,1343,1345],{},"E.164, with the region from ",[1029,1344,660],{}," or the locale",[1190,1347,1348,1353],{},[1206,1349,1350],{},[1029,1351,1352],{},"enum",[1206,1354,1355,1356,1358],{},"one of ",[1029,1357,748],{}," (case-insensitive by default)",[1190,1360,1361,1369],{},[1206,1362,1363,1105,1366],{},[1029,1364,1365],{},"list",[1029,1367,1368],{},"object",[1206,1370,1371,1372,1375,1376],{},"implied by ",[1029,1373,1374],{},"many: true"," and ",[1029,1377,642],{},[1034,1379,1381],{"id":1380},"parsing-numbers-money-and-dates","Parsing numbers, money and dates",[1151,1383,1385],{"id":1384},"kaabist-does-not-guess-your-locale","Kaabist does not guess your locale",[1025,1387,1388,1391,1392,1394,1395,1375,1397,1399,1400,1403,1404,1406,1407,1409,1410,1412,1413,1375,1415,1051],{},[1029,1389,1390],{},"1.299"," is one thousand two hundred and ninety-nine in Turkey and one and 299 thousandths in the United States, and no amount of cleverness makes one of those readings correct. So a numeric field is read with the ",[1029,1393,682],{}," (or the explicit ",[1029,1396,667],{},[1029,1398,735],{},") the program gives it, and with ",[1029,1401,1402],{},"en"," when it gives none. The builder proposes a configuration from the value you clicked on, and shows you the runner-up reading when the sample cannot decide for itself; publishing the program is where the choice becomes yours. Lint warns (",[1029,1405,817],{},") about a ",[1029,1408,1230],{}," or ",[1029,1411,1253],{}," field with no locale whose sample contains both ",[1029,1414,1051],{},[1029,1416,1417],{},",",[1025,1419,1420],{},"Two places do read a value without being told how, because the value says so itself:",[1422,1423,1424,1430],"ul",{},[1069,1425,1426,1427,1429],{},"a number that came out of the page's own embedded JSON is already in JSON's format, and is read that way whatever ",[1029,1428,682],{}," says;",[1069,1431,1432,1433,1436],{},"a price whose printed shape settles the question (",[1029,1434,1435],{},"1.337,40"," has its decimal separator last in every locale) is read from the shape when the field named no locale.",[1151,1438,1440],{"id":1439},"locales","Locales",[1025,1442,1443,1444,1447,1448,1451,1452,1454],{},"These are the locales the parser knows. A tag it does not know falls back to its language (",[1029,1445,1446],{},"de-AT"," reads as ",[1029,1449,1450],{},"de","), and an unknown language to ",[1029,1453,1402],{},". A space in the thousands column means any space: an ordinary space, a no-break space and a narrow no-break space are the same mark.",[1184,1456,1457,1477],{},[1187,1458,1459],{},[1190,1460,1461,1465,1468,1471,1474],{},[1193,1462,1463],{},[1029,1464,682],{},[1193,1466,1467],{},"Decimal",[1193,1469,1470],{},"Thousands",[1193,1472,1473],{},"Month names",[1193,1475,1476],{},"Default phone region",[1201,1478,1479,1499,1519,1539,1559,1578,1597,1618,1637,1657,1677,1697,1717,1737,1756,1774,1792,1812,1830,1850,1868,1886,1906,1925,1945,1965],{},[1190,1480,1481,1485,1489,1493,1496],{},[1206,1482,1483],{},[1029,1484,1402],{},[1206,1486,1487],{},[1029,1488,1051],{},[1206,1490,1491],{},[1029,1492,1417],{},[1206,1494,1495],{},"yes",[1206,1497,1498],{},"none",[1190,1500,1501,1506,1510,1514,1516],{},[1206,1502,1503],{},[1029,1504,1505],{},"en-us",[1206,1507,1508],{},[1029,1509,1051],{},[1206,1511,1512],{},[1029,1513,1417],{},[1206,1515,1495],{},[1206,1517,1518],{},"US",[1190,1520,1521,1526,1530,1534,1536],{},[1206,1522,1523],{},[1029,1524,1525],{},"en-gb",[1206,1527,1528],{},[1029,1529,1051],{},[1206,1531,1532],{},[1029,1533,1417],{},[1206,1535,1495],{},[1206,1537,1538],{},"GB",[1190,1540,1541,1546,1550,1554,1556],{},[1206,1542,1543],{},[1029,1544,1545],{},"en-in",[1206,1547,1548],{},[1029,1549,1051],{},[1206,1551,1552],{},[1029,1553,1417],{},[1206,1555,1495],{},[1206,1557,1558],{},"IN",[1190,1560,1561,1565,1569,1573,1575],{},[1206,1562,1563],{},[1029,1564,1190],{},[1206,1566,1567],{},[1029,1568,1417],{},[1206,1570,1571],{},[1029,1572,1051],{},[1206,1574,1495],{},[1206,1576,1577],{},"TR",[1190,1579,1580,1584,1588,1592,1594],{},[1206,1581,1582],{},[1029,1583,1450],{},[1206,1585,1586],{},[1029,1587,1417],{},[1206,1589,1590],{},[1029,1591,1051],{},[1206,1593,1495],{},[1206,1595,1596],{},"DE",[1190,1598,1599,1604,1608,1613,1615],{},[1206,1600,1601],{},[1029,1602,1603],{},"de-ch",[1206,1605,1606],{},[1029,1607,1051],{},[1206,1609,1610],{},[1029,1611,1612],{},"'",[1206,1614,1495],{},[1206,1616,1617],{},"CH",[1190,1619,1620,1625,1629,1632,1634],{},[1206,1621,1622],{},[1029,1623,1624],{},"fr",[1206,1626,1627],{},[1029,1628,1417],{},[1206,1630,1631],{},"space",[1206,1633,1495],{},[1206,1635,1636],{},"FR",[1190,1638,1639,1644,1648,1652,1654],{},[1206,1640,1641],{},[1029,1642,1643],{},"es",[1206,1645,1646],{},[1029,1647,1417],{},[1206,1649,1650],{},[1029,1651,1051],{},[1206,1653,1495],{},[1206,1655,1656],{},"ES",[1190,1658,1659,1664,1668,1672,1674],{},[1206,1660,1661],{},[1029,1662,1663],{},"it",[1206,1665,1666],{},[1029,1667,1417],{},[1206,1669,1670],{},[1029,1671,1051],{},[1206,1673,1495],{},[1206,1675,1676],{},"IT",[1190,1678,1679,1684,1688,1692,1694],{},[1206,1680,1681],{},[1029,1682,1683],{},"pt",[1206,1685,1686],{},[1029,1687,1417],{},[1206,1689,1690],{},[1029,1691,1051],{},[1206,1693,1495],{},[1206,1695,1696],{},"PT",[1190,1698,1699,1704,1708,1712,1714],{},[1206,1700,1701],{},[1029,1702,1703],{},"pt-br",[1206,1705,1706],{},[1029,1707,1417],{},[1206,1709,1710],{},[1029,1711,1051],{},[1206,1713,1495],{},[1206,1715,1716],{},"BR",[1190,1718,1719,1724,1728,1732,1734],{},[1206,1720,1721],{},[1029,1722,1723],{},"nl",[1206,1725,1726],{},[1029,1727,1417],{},[1206,1729,1730],{},[1029,1731,1051],{},[1206,1733,1495],{},[1206,1735,1736],{},"NL",[1190,1738,1739,1744,1748,1750,1753],{},[1206,1740,1741],{},[1029,1742,1743],{},"pl",[1206,1745,1746],{},[1029,1747,1417],{},[1206,1749,1631],{},[1206,1751,1752],{},"no",[1206,1754,1755],{},"PL",[1190,1757,1758,1763,1767,1769,1771],{},[1206,1759,1760],{},[1029,1761,1762],{},"ru",[1206,1764,1765],{},[1029,1766,1417],{},[1206,1768,1631],{},[1206,1770,1495],{},[1206,1772,1773],{},"RU",[1190,1775,1776,1781,1785,1787,1789],{},[1206,1777,1778],{},[1029,1779,1780],{},"sv",[1206,1782,1783],{},[1029,1784,1417],{},[1206,1786,1631],{},[1206,1788,1752],{},[1206,1790,1791],{},"SE",[1190,1793,1794,1799,1803,1807,1809],{},[1206,1795,1796],{},[1029,1797,1798],{},"da",[1206,1800,1801],{},[1029,1802,1417],{},[1206,1804,1805],{},[1029,1806,1051],{},[1206,1808,1752],{},[1206,1810,1811],{},"DK",[1190,1813,1814,1819,1823,1825,1827],{},[1206,1815,1816],{},[1029,1817,1818],{},"fi",[1206,1820,1821],{},[1029,1822,1417],{},[1206,1824,1631],{},[1206,1826,1752],{},[1206,1828,1829],{},"FI",[1190,1831,1832,1839,1843,1845,1847],{},[1206,1833,1834,1105,1837],{},[1029,1835,1836],{},"nb",[1029,1838,1752],{},[1206,1840,1841],{},[1029,1842,1417],{},[1206,1844,1631],{},[1206,1846,1752],{},[1206,1848,1849],{},"NO",[1190,1851,1852,1857,1861,1863,1865],{},[1206,1853,1854],{},[1029,1855,1856],{},"cs",[1206,1858,1859],{},[1029,1860,1417],{},[1206,1862,1631],{},[1206,1864,1752],{},[1206,1866,1867],{},"CZ",[1190,1869,1870,1875,1879,1881,1883],{},[1206,1871,1872],{},[1029,1873,1874],{},"hu",[1206,1876,1877],{},[1029,1878,1417],{},[1206,1880,1631],{},[1206,1882,1752],{},[1206,1884,1885],{},"HU",[1190,1887,1888,1893,1897,1901,1903],{},[1206,1889,1890],{},[1029,1891,1892],{},"ro",[1206,1894,1895],{},[1029,1896,1417],{},[1206,1898,1899],{},[1029,1900,1051],{},[1206,1902,1752],{},[1206,1904,1905],{},"RO",[1190,1907,1908,1913,1917,1921,1923],{},[1206,1909,1910],{},[1029,1911,1912],{},"ar",[1206,1914,1915],{},[1029,1916,1051],{},[1206,1918,1919],{},[1029,1920,1417],{},[1206,1922,1752],{},[1206,1924,1498],{},[1190,1926,1927,1932,1936,1940,1942],{},[1206,1928,1929],{},[1029,1930,1931],{},"ja",[1206,1933,1934],{},[1029,1935,1051],{},[1206,1937,1938],{},[1029,1939,1417],{},[1206,1941,1752],{},[1206,1943,1944],{},"JP",[1190,1946,1947,1952,1956,1960,1962],{},[1206,1948,1949],{},[1029,1950,1951],{},"zh",[1206,1953,1954],{},[1029,1955,1051],{},[1206,1957,1958],{},[1029,1959,1417],{},[1206,1961,1752],{},[1206,1963,1964],{},"CN",[1190,1966,1967,1972,1976,1980,1982],{},[1206,1968,1969],{},[1029,1970,1971],{},"ko",[1206,1973,1974],{},[1029,1975,1051],{},[1206,1977,1978],{},[1029,1979,1417],{},[1206,1981,1752],{},[1206,1983,1984],{},"KR",[1025,1986,1987,1988,1990,1991,1409,1994,1997,1998,2001,2002,2004],{},"\"Month names\" means a ",[1029,1989,664],{}," with ",[1029,1992,1993],{},"MMMM",[1029,1995,1996],{},"MMM"," can read the locale's month names (",[1029,1999,2000],{},"12 Ekim 2026"," in ",[1029,2003,1190],{},").",[1151,2006,2007],{"id":1253},"Money",[1025,2009,2010,2011,1105,2014,1105,2017,1105,2020,1105,2023,2026,2027,2029,2030,2032,2033,2035,2036,2038,2039,2041,2042,2044,2045,1051],{},"The currency is read from the string when the page prints one (",[1029,2012,2013],{},"TL",[1029,2015,2016],{},"₺",[1029,2018,2019],{},"TRY",[1029,2021,2022],{},"€",[1029,2024,2025],{},"$"," and the other common symbols and codes) and falls back to the field's ",[1029,2028,662],{}," when it does not. The amount is read with, in order: the field's ",[1029,2031,682],{},"; the currency's own locale, for currencies that have exactly one (TRY reads as ",[1029,2034,1190],{},", BRL as ",[1029,2037,1703],{},", CHF as ",[1029,2040,1603],{},", JPY as ",[1029,2043,1931],{},", and so on); the printed shape, when it is unambiguous; and finally ",[1029,2046,1402],{},[1151,2048,2050],{"id":2049},"dates","Dates",[1025,2052,2053,2054,1409,2056,2058,2059,2061,2062,2065,2066,1105,2068,2071],{},"A ",[1029,2055,1291],{},[1029,2057,1303],{}," field accepts ISO-8601 always, then each pattern in ",[1029,2060,664],{}," (a string or a list, in ICU tokens such as ",[1029,2063,2064],{},"dd.MM.yyyy",") in order. A value printed without an offset is read in the field's ",[1029,2067,737],{},[1029,2069,2070],{},"UTC"," by default. Relative dates such as \"2 days ago\" are not parsed: the moment a page was rendered is not the moment a job re-reads it, and a date that changes on replay is worse than no date.",[1034,2073,1093],{"id":706},[1025,2075,2076,2077,2079,2080,2083,2084,2087,2088,1105,2091,2094,2095,1105,2098,1105,2101,1375,2103,2106,2107,2109],{},"A raw string that matches a null marker becomes ",[1029,2078,1031],{},", with the warning ",[1029,2081,2082],{},"null_marker"," (or ",[1029,2085,2086],{},"field_empty"," when the string was empty). The default markers are ",[1029,2089,2090],{},"\"\"",[1029,2092,2093],{},"-",", the em dash (U+2014), the en dash (U+2013), ",[1029,2096,2097],{},"N\u002FA",[1029,2099,2100],{},"n\u002Fa",[1029,2102,1031],{},[1029,2104,2105],{},"None","; set ",[1029,2108,705],{}," on a field to replace the list. A marker is not a failure: it is a page saying \"no value\", and the field's policy does not apply.",[1034,2111,1126],{"id":2112},"constraints",[1184,2114,2115,2128],{},[1187,2116,2117],{},[1190,2118,2119,2122,2125],{},[1193,2120,2121],{},"Key",[1193,2123,2124],{},"Applies to",[1193,2126,2127],{},"Fails as",[1201,2129,2130,2148,2169,2191,2206,2219,2233,2247,2259],{},[1190,2131,2132,2140,2143],{},[1206,2133,2134,2136,2137,2139],{},[1029,2135,719],{}," (default ",[1029,2138,1274],{},")",[1206,2141,2142],{},"any field",[1206,2144,2145],{},[1029,2146,2147],{},"required_missing",[1190,2149,2150,2156,2165],{},[1206,2151,2152,2136,2154,2139],{},[1029,2153,708],{},[1029,2155,1270],{},[1206,2157,2158,2159,2161,2162,2164],{},"any field; ",[1029,2160,1274],{}," means a ",[1029,2163,1031],{}," is not acceptable",[1206,2166,2167],{},[1029,2168,2147],{},[1190,2170,2171,2177,2186],{},[1206,2172,2173,1105,2175],{},[1029,2174,694],{},[1029,2176,686],{},[1206,2178,2179,2180,2182,2183,2185],{},"numbers, money, and ",[1029,2181,1291],{},"\u002F",[1029,2184,1303],{}," (as ISO-8601 strings)",[1206,2187,2188],{},[1029,2189,2190],{},"out_of_range",[1190,2192,2193,2199,2202],{},[1206,2194,2195,1105,2197],{},[1029,2196,699],{},[1029,2198,691],{},[1206,2200,2201],{},"strings",[1206,2203,2204],{},[1029,2205,2190],{},[1190,2207,2208,2212,2215],{},[1206,2209,2210],{},[1029,2211,713],{},[1206,2213,2214],{},"strings (a regular expression)",[1206,2216,2217],{},[1029,2218,2190],{},[1190,2220,2221,2225,2229],{},[1206,2222,2223],{},[1029,2224,748],{},[1206,2226,2227],{},[1029,2228,1352],{},[1206,2230,2231],{},[1029,2232,2190],{},[1190,2234,2235,2239,2242],{},[1206,2236,2237],{},[1029,2238,696],{},[1206,2240,2241],{},"lists",[1206,2243,2244],{},[1029,2245,2246],{},"list_short",[1190,2248,2249,2253,2255],{},[1206,2250,2251],{},[1029,2252,688],{},[1206,2254,2241],{},[1206,2256,2257],{},[1029,2258,2190],{},[1190,2260,2261,2265,2272],{},[1206,2262,2263],{},[1029,2264,746],{},[1206,2266,2267,2268,2271],{},"lists of scalars, or ",[1029,2269,2270],{},"unique: \"field\""," for a list of objects",[1206,2273,2274],{},[1029,2275,2190],{},[1025,2277,2278,1375,2280,2283,2284,2286,2287,1990,2290,2293,2294,1051],{},[1029,2279,719],{},[1029,2281,2282],{},"nullable: false"," are not governed by ",[1029,2285,710],{},": a required field that is missing or null ",[1072,2288,2289],{},"fails the job",[1029,2291,2292],{},"validation_failed",", unless the step is ",[1029,2295,2296],{},"optional",[1034,2298,2300],{"id":2299},"what-happens-when-a-field-fails","What happens when a field fails",[1025,2302,2303,2304,2306],{},"A field that does not parse, or breaks a constraint, is handled by its ",[1029,2305,710],{},":",[1184,2308,2309,2323],{},[1187,2310,2311],{},[1190,2312,2313,2317,2320],{},[1193,2314,2315],{},[1029,2316,710],{},[1193,2318,2319],{},"The field",[1193,2321,2322],{},"The job",[1201,2324,2325,2342,2353,2369],{},[1190,2326,2327,2331,2339],{},[1206,2328,2329,1211],{},[1029,2330,1031],{},[1206,2332,2333,2335,2336],{},[1029,2334,1031],{},", status ",[1029,2337,2338],{},"invalid",[1206,2340,2341],{},"continues",[1190,2343,2344,2348,2351],{},[1206,2345,2346],{},[1029,2347,1173],{},[1206,2349,2350],{},"keeps the unparsed string",[1206,2352,2341],{},[1190,2354,2355,2360,2364],{},[1206,2356,2357],{},[1029,2358,2359],{},"fail",[1206,2361,2362],{},[1029,2363,1031],{},[1206,2365,2366,2367],{},"fails with ",[1029,2368,2292],{},[1190,2370,2371,2377,2383],{},[1206,2372,2373,2376],{},[1029,2374,2375],{},"drop"," (list items only)",[1206,2378,2379,2380],{},"the item is removed from its list, status ",[1029,2381,2382],{},"dropped",[1206,2384,2341],{},[1025,2386,2387,2388,1105,2391,1409,2393,2395,2396,2398],{},"Every case adds the matching warning (",[1029,2389,2390],{},"parse_failed",[1029,2392,2190],{},[1029,2394,2246],{},"). Lint refuses ",[1029,2397,2375],{}," outside a list.",[1151,2400,2402],{"id":2401},"field-statuses","Field statuses",[1184,2404,2405,2418],{},[1187,2406,2407],{},[1190,2408,2409,2412,2415],{},[1193,2410,2411],{},"Status",[1193,2413,2414],{},"What happened",[1193,2416,2417],{},"Warning",[1201,2419,2420,2432,2449,2466,2483],{},[1190,2421,2422,2427,2430],{},[1206,2423,2424],{},[1029,2425,2426],{},"ok",[1206,2428,2429],{},"found and parsed",[1206,2431,1498],{},[1190,2433,2434,2438,2441],{},[1206,2435,2436],{},[1029,2437,1031],{},[1206,2439,2440],{},"the page printed a null marker",[1206,2442,2443,2445,2446,2448],{},[1029,2444,2082],{},", or ",[1029,2447,2086],{}," for an empty string",[1190,2450,2451,2455,2458],{},[1206,2452,2453],{},[1029,2454,2338],{},[1206,2456,2457],{},"found but not parsable, or broke a constraint",[1206,2459,2460,1105,2462,1105,2464],{},[1029,2461,2390],{},[1029,2463,2190],{},[1029,2465,2246],{},[1190,2467,2468,2473,2476],{},[1206,2469,2470],{},[1029,2471,2472],{},"missing",[1206,2474,2475],{},"no locator matched",[1206,2477,2478,2445,2480,2482],{},[1029,2479,2086],{},[1029,2481,2147],{}," when the field is required",[1190,2484,2485,2489,2495],{},[1206,2486,2487],{},[1029,2488,2382],{},[1206,2490,2491,2492],{},"removed from its list by ",[1029,2493,2494],{},"on_invalid: \"drop\"",[1206,2496,2497],{},"the warning that caused it",[1151,2499,2501],{"id":2500},"policiesstrict",[1029,2502,1046],{},[1025,2504,2505,2506,2509,2510,2512,2513,2515,2516,2519,2520,2522],{},"Set ",[1029,2507,2508],{},"\"policies\": { \"strict\": true }"," on a job or a program to turn ",[1072,2511,634],{}," extraction warning into a failure: the job fails with ",[1029,2514,2292],{},", and ",[1029,2517,2518],{},"error.details"," lists the fields and warnings that caused it. Use it when a downstream system would rather have nothing than something it has to check. A job that is not strict and failed after at least one ",[1029,2521,569],{}," ran still returns what it extracted.",[1034,2524,2526],{"id":2525},"cross-field-checks","Cross-field checks",[1025,2528,2529,2531,2532,1105,2535,1105,2538,1105,2541,1105,2544,1409,2547,2306],{},[1029,2530,1148],{}," compares two fields, or a field against a literal, with ",[1029,2533,2534],{},"\u003C",[1029,2536,2537],{},"\u003C=",[1029,2539,2540],{},"==",[1029,2542,2543],{},"!=",[1029,2545,2546],{},">=",[1029,2548,2549],{},">",[1057,2551,2554],{"className":2552,"code":2553,"language":680,"meta":1064,"style":1064},"language-json shiki shiki-themes kaab-code kaab-code kaab-code","{ \"$asserts\": [{ \"left\": \"price\", \"op\": \"\u003C=\", \"right\": \"list_price\" }] }\n",[1029,2555,2556],{"__ignoreMap":1064},[2557,2558,2561,2565,2569,2572,2575,2578,2580,2584,2586,2589,2591,2594,2596,2599,2601,2604],"span",{"class":2559,"line":2560},"line",1,[2557,2562,2564],{"class":2563},"sTzsn","{ ",[2557,2566,2568],{"class":2567},"sqn18","\"$asserts\"",[2557,2570,2306],{"class":2571},"sQm2-",[2557,2573,2574],{"class":2563}," [{ ",[2557,2576,2577],{"class":2567},"\"left\"",[2557,2579,2306],{"class":2571},[2557,2581,2583],{"class":2582},"suOy4"," \"price\"",[2557,2585,1417],{"class":2571},[2557,2587,2588],{"class":2567}," \"op\"",[2557,2590,2306],{"class":2571},[2557,2592,2593],{"class":2582}," \"\u003C=\"",[2557,2595,1417],{"class":2571},[2557,2597,2598],{"class":2567}," \"right\"",[2557,2600,2306],{"class":2571},[2557,2602,2603],{"class":2582}," \"list_price\"",[2557,2605,2606],{"class":2563}," }] }\n",[1025,2608,2609,2610,2612],{},"A failing assert adds ",[1029,2611,2190],{}," on the left-hand field, under that field's own policy, or fails the job when it is strict. An assert whose side has no value is skipped, not failed.",[1034,2614,2616],{"id":2615},"warnings","Warnings",[1025,2618,2619,2620,2622,2623,1105,2626,1105,2628,1105,2631,1105,2634,1105,2637,1375,2639,1051],{},"Warnings are a closed set; a job never carries a code outside this list. Each has a ",[1029,2621,1029],{}," and, where it applies, ",[1029,2624,2625],{},"field",[1029,2627,1173],{},[1029,2629,2630],{},"step",[1029,2632,2633],{},"message",[1029,2635,2636],{},"detail",[1029,2638,624],{},[1029,2640,2641],{},"of",[1184,2643,2644,2654],{},[1187,2645,2646],{},[1190,2647,2648,2651],{},[1193,2649,2650],{},"Code",[1193,2652,2653],{},"When it appears",[1201,2655,2656,2665,2674,2683,2712,2726,2737,2750,2766,2776,2793,2813,2831],{},[1190,2657,2658,2662],{},[1206,2659,2660],{},[1029,2661,2082],{},[1206,2663,2664],{},"the page printed a null marker for a field",[1190,2666,2667,2671],{},[1206,2668,2669],{},[1029,2670,2086],{},[1206,2672,2673],{},"a field's element printed nothing, or an optional field's locator matched nothing; on a step, a template referenced a value that was missing",[1190,2675,2676,2680],{},[1206,2677,2678],{},[1029,2679,2390],{},[1206,2681,2682],{},"a field's text could not be parsed as its type",[1190,2684,2685,2689],{},[1206,2686,2687],{},[1029,2688,2190],{},[1206,2690,2691,2692,1105,2694,1105,2696,1105,2698,1105,2700,1105,2702,1105,2704,1409,2706,2708,2709,2711],{},"a parsed value broke ",[1029,2693,694],{},[1029,2695,686],{},[1029,2697,699],{},[1029,2699,691],{},[1029,2701,713],{},[1029,2703,748],{},[1029,2705,688],{},[1029,2707,746],{},", or a ",[1029,2710,1148],{}," comparison failed",[1190,2713,2714,2718],{},[1206,2715,2716],{},[1029,2717,2147],{},[1206,2719,2720,2721,1409,2723,2725],{},"a ",[1029,2722,719],{},[1029,2724,2282],{}," field had no value; the job fails unless the step is optional",[1190,2727,2728,2732],{},[1206,2729,2730],{},[1029,2731,2246],{},[1206,2733,2734,2735],{},"a list had fewer items than ",[1029,2736,696],{},[1190,2738,2739,2744],{},[1206,2740,2741],{},[1029,2742,2743],{},"fill_rate_drop",[1206,2745,2746,2747,2139],{},"across the program version's recent runs, this field has stopped filling as it used to; a fix is probably waiting in the review queue (see ",[1077,2748,47],{"href":2749},"\u002Fconcepts\u002Fself-healing",[1190,2751,2752,2757],{},[1206,2753,2754],{},[1029,2755,2756],{},"escalated",[1206,2758,2759,2760,2762,2763,2139],{},"the job moved to a stronger tier to finish; ",[1029,2761,2633],{}," says why (see ",[1077,2764,32],{"href":2765},"\u002Fconcepts\u002Ftiers-and-escalation",[1190,2767,2768,2773],{},[1206,2769,2770],{},[1029,2771,2772],{},"healed_locator_used",[1206,2774,2775],{},"a step's locator no longer matched and a healed one carried this run only",[1190,2777,2778,2783],{},[1206,2779,2780],{},[1029,2781,2782],{},"obstacle_dismissed",[1206,2784,2785,2786,2788,2789,2139],{},"something covering the page was closed before the step ran; ",[1029,2787,2636],{}," names how (see ",[1077,2790,2792],{"href":2791},"\u002Fconcepts\u002Fobstacles","Obstacles",[1190,2794,2795,2800],{},[1206,2796,2797],{},[1029,2798,2799],{},"step_skipped",[1206,2801,2802,2803,2805,2806,2809,2810,2812],{},"an ",[1029,2804,2296],{}," step, or one with ",[1029,2807,2808],{},"on_error: \"skip\"",", failed and was skipped; ",[1029,2811,2633],{}," says what failed",[1190,2814,2815,2820],{},[1206,2816,2817],{},[1029,2818,2819],{},"cache_hit",[1206,2821,2822,2823,2826,2827,2830],{},"reserved for a result served from the cache; check ",[1029,2824,2825],{},"meta.cache",", which is ",[1029,2828,2829],{},"\"hit\""," for such a result",[1190,2832,2833,2838],{},[1206,2834,2835],{},[1029,2836,2837],{},"byo_fallback_used",[1206,2839,2840,2841,2844,2845,2139],{},"your own proxy failed and ",[1029,2842,2843],{},"fallback: \"platform\""," sent the traffic through Kaabist's (see ",[1077,2846,68],{"href":2847},"\u002Fconcepts\u002Fegress-and-proxies",[1025,2849,2850,2852,2853,2857,2858,2860,2861,2864],{},[1029,2851,2743],{}," is the one warning that is not about ",[2854,2855,2856],"em",{},"this"," job: the data in this result may look fine. It carries the finding in ",[1029,2859,2636],{},", for example ",[1029,2862,2863],{},"products[].price: fill rate 97% → 20% over the last 340 samples",", and it clears when the field recovers or a healed version is published.",[1151,2866,2868],{"id":2867},"list-warnings-are-aggregated","List warnings are aggregated",[1025,2870,2871],{},"A warning that applies to items of a list is reported once for the list, with how many items it covered, instead of once per item:",[1057,2873,2875],{"className":2552,"code":2874,"language":680,"meta":1064,"style":1064},"{ \"code\": \"null_marker\", \"field\": \"products[].price\", \"count\": 3, \"of\": 40 }\n",[1029,2876,2877],{"__ignoreMap":1064},[2557,2878,2879,2881,2884,2886,2889,2891,2894,2896,2899,2901,2904,2906,2910,2912,2915,2917,2920],{"class":2559,"line":2560},[2557,2880,2564],{"class":2563},[2557,2882,2883],{"class":2567},"\"code\"",[2557,2885,2306],{"class":2571},[2557,2887,2888],{"class":2582}," \"null_marker\"",[2557,2890,1417],{"class":2571},[2557,2892,2893],{"class":2567}," \"field\"",[2557,2895,2306],{"class":2571},[2557,2897,2898],{"class":2582}," \"products[].price\"",[2557,2900,1417],{"class":2571},[2557,2902,2903],{"class":2567}," \"count\"",[2557,2905,2306],{"class":2571},[2557,2907,2909],{"class":2908},"sHJIl"," 3",[2557,2911,1417],{"class":2571},[2557,2913,2914],{"class":2567}," \"of\"",[2557,2916,2306],{"class":2571},[2557,2918,2919],{"class":2908}," 40",[2557,2921,2922],{"class":2563}," }\n",[1034,2924,2926],{"id":2925},"worked-example","Worked example",[1025,2928,2929,2930,2933,2934,2936,2937,2940,2941,2943],{},"A shop's catalogue at ",[1029,2931,2932],{},"https:\u002F\u002Fshop.example.com"," prints Turkish prices (",[1029,2935,1166],{},") on forty product cards, and the product pages of the app at ",[1029,2938,2939],{},"https:\u002F\u002Fapp.example.com"," print ",[1029,2942,2093],{}," for a price that JavaScript fills in later. A list field over the catalogue:",[1057,2945,2947],{"className":2552,"code":2946,"language":680,"meta":1064,"style":1064},"{\n  \"kaab\": \"1\",\n  \"options\": { \"max_tier\": \"http\" },\n  \"steps\": [\n    { \"goto\": \"https:\u002F\u002Fshop.example.com\u002F?page=1\" },\n    {\n      \"extract\": {\n        \"products\": {\n          \"selector\": \".product-card\",\n          \"many\": true,\n          \"min_items\": 1,\n          \"fields\": {\n            \"title\": \".title\",\n            \"price\": {\n              \"selector\": \".price\",\n              \"type\": \"money\",\n              \"locale\": \"tr\",\n              \"currency\": \"TRY\",\n              \"min\": 0,\n              \"null_markers\": [\"-\", \"N\u002FA\"],\n              \"sample\": { \"raw\": \"1.337,40 TL\", \"value\": 1337.4 }\n            },\n            \"url\": { \"selector\": \"a\", \"attr\": \"href\", \"type\": \"url\" }\n          }\n        }\n      }\n    }\n  ],\n  \"policies\": { \"include_raw\": true }\n}\n",[1029,2948,2949,2954,2968,2992,3003,3021,3027,3038,3048,3061,3074,3087,3097,3110,3120,3133,3146,3159,3172,3185,3209,3239,3247,3287,3293,3299,3305,3311,3319,3338],{"__ignoreMap":1064},[2557,2950,2951],{"class":2559,"line":2560},[2557,2952,2953],{"class":2563},"{\n",[2557,2955,2957,2960,2962,2965],{"class":2559,"line":2956},2,[2557,2958,2959],{"class":2567},"  \"kaab\"",[2557,2961,2306],{"class":2571},[2557,2963,2964],{"class":2582}," \"1\"",[2557,2966,2967],{"class":2571},",\n",[2557,2969,2971,2974,2976,2979,2982,2984,2987,2990],{"class":2559,"line":2970},3,[2557,2972,2973],{"class":2567},"  \"options\"",[2557,2975,2306],{"class":2571},[2557,2977,2978],{"class":2563}," { ",[2557,2980,2981],{"class":2567},"\"max_tier\"",[2557,2983,2306],{"class":2571},[2557,2985,2986],{"class":2582}," \"http\"",[2557,2988,2989],{"class":2563}," }",[2557,2991,2967],{"class":2571},[2557,2993,2995,2998,3000],{"class":2559,"line":2994},4,[2557,2996,2997],{"class":2567},"  \"steps\"",[2557,2999,2306],{"class":2571},[2557,3001,3002],{"class":2563}," [\n",[2557,3004,3006,3009,3012,3014,3017,3019],{"class":2559,"line":3005},5,[2557,3007,3008],{"class":2563},"    { ",[2557,3010,3011],{"class":2567},"\"goto\"",[2557,3013,2306],{"class":2571},[2557,3015,3016],{"class":2582}," \"https:\u002F\u002Fshop.example.com\u002F?page=1\"",[2557,3018,2989],{"class":2563},[2557,3020,2967],{"class":2571},[2557,3022,3024],{"class":2559,"line":3023},6,[2557,3025,3026],{"class":2563},"    {\n",[2557,3028,3030,3033,3035],{"class":2559,"line":3029},7,[2557,3031,3032],{"class":2567},"      \"extract\"",[2557,3034,2306],{"class":2571},[2557,3036,3037],{"class":2563}," {\n",[2557,3039,3041,3044,3046],{"class":2559,"line":3040},8,[2557,3042,3043],{"class":2567},"        \"products\"",[2557,3045,2306],{"class":2571},[2557,3047,3037],{"class":2563},[2557,3049,3051,3054,3056,3059],{"class":2559,"line":3050},9,[2557,3052,3053],{"class":2567},"          \"selector\"",[2557,3055,2306],{"class":2571},[2557,3057,3058],{"class":2582}," \".product-card\"",[2557,3060,2967],{"class":2571},[2557,3062,3064,3067,3069,3072],{"class":2559,"line":3063},10,[2557,3065,3066],{"class":2567},"          \"many\"",[2557,3068,2306],{"class":2571},[2557,3070,3071],{"class":2908}," true",[2557,3073,2967],{"class":2571},[2557,3075,3077,3080,3082,3085],{"class":2559,"line":3076},11,[2557,3078,3079],{"class":2567},"          \"min_items\"",[2557,3081,2306],{"class":2571},[2557,3083,3084],{"class":2908}," 1",[2557,3086,2967],{"class":2571},[2557,3088,3090,3093,3095],{"class":2559,"line":3089},12,[2557,3091,3092],{"class":2567},"          \"fields\"",[2557,3094,2306],{"class":2571},[2557,3096,3037],{"class":2563},[2557,3098,3100,3103,3105,3108],{"class":2559,"line":3099},13,[2557,3101,3102],{"class":2567},"            \"title\"",[2557,3104,2306],{"class":2571},[2557,3106,3107],{"class":2582}," \".title\"",[2557,3109,2967],{"class":2571},[2557,3111,3113,3116,3118],{"class":2559,"line":3112},14,[2557,3114,3115],{"class":2567},"            \"price\"",[2557,3117,2306],{"class":2571},[2557,3119,3037],{"class":2563},[2557,3121,3123,3126,3128,3131],{"class":2559,"line":3122},15,[2557,3124,3125],{"class":2567},"              \"selector\"",[2557,3127,2306],{"class":2571},[2557,3129,3130],{"class":2582}," \".price\"",[2557,3132,2967],{"class":2571},[2557,3134,3136,3139,3141,3144],{"class":2559,"line":3135},16,[2557,3137,3138],{"class":2567},"              \"type\"",[2557,3140,2306],{"class":2571},[2557,3142,3143],{"class":2582}," \"money\"",[2557,3145,2967],{"class":2571},[2557,3147,3149,3152,3154,3157],{"class":2559,"line":3148},17,[2557,3150,3151],{"class":2567},"              \"locale\"",[2557,3153,2306],{"class":2571},[2557,3155,3156],{"class":2582}," \"tr\"",[2557,3158,2967],{"class":2571},[2557,3160,3162,3165,3167,3170],{"class":2559,"line":3161},18,[2557,3163,3164],{"class":2567},"              \"currency\"",[2557,3166,2306],{"class":2571},[2557,3168,3169],{"class":2582}," \"TRY\"",[2557,3171,2967],{"class":2571},[2557,3173,3175,3178,3180,3183],{"class":2559,"line":3174},19,[2557,3176,3177],{"class":2567},"              \"min\"",[2557,3179,2306],{"class":2571},[2557,3181,3182],{"class":2908}," 0",[2557,3184,2967],{"class":2571},[2557,3186,3188,3191,3193,3196,3199,3201,3204,3207],{"class":2559,"line":3187},20,[2557,3189,3190],{"class":2567},"              \"null_markers\"",[2557,3192,2306],{"class":2571},[2557,3194,3195],{"class":2563}," [",[2557,3197,3198],{"class":2582},"\"-\"",[2557,3200,1417],{"class":2571},[2557,3202,3203],{"class":2582}," \"N\u002FA\"",[2557,3205,3206],{"class":2563},"]",[2557,3208,2967],{"class":2571},[2557,3210,3212,3215,3217,3219,3222,3224,3227,3229,3232,3234,3237],{"class":2559,"line":3211},21,[2557,3213,3214],{"class":2567},"              \"sample\"",[2557,3216,2306],{"class":2571},[2557,3218,2978],{"class":2563},[2557,3220,3221],{"class":2567},"\"raw\"",[2557,3223,2306],{"class":2571},[2557,3225,3226],{"class":2582}," \"1.337,40 TL\"",[2557,3228,1417],{"class":2571},[2557,3230,3231],{"class":2567}," \"value\"",[2557,3233,2306],{"class":2571},[2557,3235,3236],{"class":2908}," 1337.4",[2557,3238,2922],{"class":2563},[2557,3240,3242,3245],{"class":2559,"line":3241},22,[2557,3243,3244],{"class":2563},"            }",[2557,3246,2967],{"class":2571},[2557,3248,3250,3253,3255,3257,3260,3262,3265,3267,3270,3272,3275,3277,3280,3282,3285],{"class":2559,"line":3249},23,[2557,3251,3252],{"class":2567},"            \"url\"",[2557,3254,2306],{"class":2571},[2557,3256,2978],{"class":2563},[2557,3258,3259],{"class":2567},"\"selector\"",[2557,3261,2306],{"class":2571},[2557,3263,3264],{"class":2582}," \"a\"",[2557,3266,1417],{"class":2571},[2557,3268,3269],{"class":2567}," \"attr\"",[2557,3271,2306],{"class":2571},[2557,3273,3274],{"class":2582}," \"href\"",[2557,3276,1417],{"class":2571},[2557,3278,3279],{"class":2567}," \"type\"",[2557,3281,2306],{"class":2571},[2557,3283,3284],{"class":2582}," \"url\"",[2557,3286,2922],{"class":2563},[2557,3288,3290],{"class":2559,"line":3289},24,[2557,3291,3292],{"class":2563},"          }\n",[2557,3294,3296],{"class":2559,"line":3295},25,[2557,3297,3298],{"class":2563},"        }\n",[2557,3300,3302],{"class":2559,"line":3301},26,[2557,3303,3304],{"class":2563},"      }\n",[2557,3306,3308],{"class":2559,"line":3307},27,[2557,3309,3310],{"class":2563},"    }\n",[2557,3312,3314,3317],{"class":2559,"line":3313},28,[2557,3315,3316],{"class":2563},"  ]",[2557,3318,2967],{"class":2571},[2557,3320,3322,3325,3327,3329,3332,3334,3336],{"class":2559,"line":3321},29,[2557,3323,3324],{"class":2567},"  \"policies\"",[2557,3326,2306],{"class":2571},[2557,3328,2978],{"class":2563},[2557,3330,3331],{"class":2567},"\"include_raw\"",[2557,3333,2306],{"class":2571},[2557,3335,3071],{"class":2908},[2557,3337,2922],{"class":2563},[2557,3339,3341],{"class":2559,"line":3340},30,[2557,3342,3343],{"class":2563},"}\n",[1025,3345,3346,3347,3349,3350,3352,3353,3355,3356,3358,3359,3362],{},"Each card's price comes back as ",[1029,3348,1258],{},", each ",[1029,3351,610],{}," absolute against the page, and ",[1029,3354,1173],{}," holds ",[1029,3357,1166],{}," beside it because ",[1029,3360,3361],{},"include_raw"," is on.",[1025,3364,3365],{},"Now change one thing at a time and watch the warnings:",[1422,3367,3368,3390,3406,3453],{},[1069,3369,3370,3376,3377,3379,3380,3383,3384,3386,3387,3389],{},[1072,3371,3372,3373,1051],{},"Remove ",[1029,3374,3375],{},"\"locale\": \"tr\""," The result does not change: the currency is TRY, and TRY reads as ",[1029,3378,1190],{},". Remove ",[1029,3381,3382],{},"\"currency\""," too, and the printed ",[1029,3385,2013],{}," still names it. The shape ",[1029,3388,1435],{}," would settle it on its own.",[1069,3391,3392,3402,3403,3405],{},[1072,3393,3394,3395,3398,3399,1051],{},"Read the same field with ",[1029,3396,3397],{},"\"locale\": \"en\""," on a value like ",[1029,3400,3401],{},"1.299 TL"," It reads as one point two nine nine, which is why the locale is yours to set: ",[1029,3404,1390],{}," has no shape that decides.",[1069,3407,3408,3421,3422,3424,3425,3427,3428,3430,3431,3433,3434,3427,3436,3438,3439,3442,3443,3445,3446,3448,3449,3452],{},[1072,3409,3410,3411,3414,3415,1990,3418,1051],{},"Read the same ",[1029,3412,3413],{},"price"," field from ",[1029,3416,3417],{},"https:\u002F\u002Fapp.example.com\u002Fp\u002F1",[1029,3419,3420],{},"max_tier: \"http\""," The server printed ",[1029,3423,2093],{}," (JavaScript fills the real price in later), so ",[1029,3426,3413],{}," is ",[1029,3429,1031],{}," with a ",[1029,3432,2082],{}," warning whose ",[1029,3435,1173],{},[1029,3437,2093],{},", and the job succeeds. Make the field ",[1029,3440,3441],{},"\"required\": true"," and the job fails with ",[1029,3444,2292],{}," instead. ",[1077,3447,32],{"href":2765}," shows how an ",[1029,3450,3451],{},"expect"," on the price lets the job move to a browser and read the filled value instead.",[1069,3454,3455,3461,3462,3464,3465,3467,3468,3471,3472,3475],{},[1072,3456,3457,3458,1051],{},"Add ",[1029,3459,3460],{},"\"max\": 100"," Every price breaks the constraint: each is ",[1029,3463,1031],{},", and one aggregated ",[1029,3466,2190],{}," warning covers the list. With ",[1029,3469,3470],{},"\"on_invalid\": \"drop\"",", the items are removed instead; with ",[1029,3473,3474],{},"\"on_invalid\": \"fail\"",", the job fails.",[1025,3477,3478,3479,1051],{},"To try a change like this without fetching the page again, replay the new version against a stored snapshot; see ",[1077,3480,65],{"href":3481},"\u002Fconcepts\u002Fsnapshots#replaying-a-program-against-a-snapshot",[1034,3483,3485],{"id":3484},"pitfalls","Pitfalls",[1422,3487,3488,3497,3511,3525,3540],{},[1069,3489,3490,3493,3494,3496],{},[1072,3491,3492],{},"Set a locale on every number and money field."," Without one, the parser reads ",[1029,3495,1402],{},", which is wrong for most of the world's prices.",[1069,3498,3499,3504,3505,3507,3508,3510],{},[1072,3500,2053,3501,3503],{},[1029,3502,1031],{}," with no warning is not possible."," If a field is ",[1029,3506,1031],{},", the warnings say whether the page printed nothing, printed a marker, or printed something your configuration could not read. Read ",[1029,3509,1173],{}," before changing the locator.",[1069,3512,3513,3521,3522,3524],{},[1072,3514,3515,3517,3518,3520],{},[1029,3516,719],{}," fails the job, ",[1029,3519,710],{}," does not by default."," Use ",[1029,3523,719],{}," for the fields a result is useless without, and leave the rest nullable.",[1069,3526,3527,3533,3534,3536,3537,3539],{},[1072,3528,3529,3532],{},[1029,3530,3531],{},"strict"," counts every extraction warning."," A single ",[1029,3535,2082],{}," on an optional field fails a strict job; give such fields their own ",[1029,3538,705],{}," or accept them in your code instead.",[1069,3541,3542,3545,3546,3549,3550,3553],{},[1072,3543,3544],{},"Relative dates do not parse."," Read the absolute date from an attribute (",[1029,3547,3548],{},"attr: \"datetime\""," on a ",[1029,3551,3552],{},"\u003Ctime>"," element) when the page offers one.",[1034,3555,155],{"id":3556},"reference",[1422,3558,3559,3589,3597,3607],{},[1069,3560,3561,3564,3565,1105,3568,1105,3571,1105,3574,1105,3577,1105,3580,1105,3583,1105,3586],{},[1077,3562,3563],{"href":525},"Extract schema"," and the field options: ",[1077,3566,744],{"href":3567},"\u002Freference\u002Fdsl\u002Ffields\u002Ftype",[1077,3569,682],{"href":3570},"\u002Freference\u002Fdsl\u002Ffields\u002Flocale",[1077,3572,662],{"href":3573},"\u002Freference\u002Fdsl\u002Ffields\u002Fcurrency",[1077,3575,706],{"href":3576},"\u002Freference\u002Fdsl\u002Ffields\u002Fnull-markers",[1077,3578,719],{"href":3579},"\u002Freference\u002Fdsl\u002Ffields\u002Frequired",[1077,3581,711],{"href":3582},"\u002Freference\u002Fdsl\u002Ffields\u002Fon-invalid",[1077,3584,739],{"href":3585},"\u002Freference\u002Fdsl\u002Ffields\u002Ftransforms",[1077,3587,723],{"href":3588},"\u002Freference\u002Fdsl\u002Ffields\u002Fsample",[1069,3590,3591,1375,3594],{},[1077,3592,752],{"href":3593},"\u002Freference\u002Fdsl\u002Fassertions",[1077,3595,534],{"href":3596},"\u002Freference\u002Fdsl\u002Fpolicies",[1069,3598,3599,1375,3603],{},[1077,3600,3602],{"href":3601},"\u002Freference\u002Fcodes#warnings","Warning codes",[1077,3604,3606],{"href":3605},"\u002Freference\u002Fcodes#errors","error codes",[1069,3608,3609,1375,3613],{},[1077,3610,3612],{"href":3611},"\u002Freference\u002Fapi\u002Fschemas\u002Fjob","Job schema",[1077,3614,3616],{"href":3615},"\u002Freference\u002Fapi\u002Fschemas\u002Fextract-schema","extract schema",[3618,3619,3620],"style",{},"html pre.shiki code .sTzsn, html code.shiki .sTzsn{--shiki-light:var(--kaab-code-foreground);--shiki-default:var(--kaab-code-foreground);--shiki-dark:var(--kaab-code-foreground)}html pre.shiki code .sqn18, html code.shiki .sqn18{--shiki-light:var(--kaab-code-token-keyword);--shiki-default:var(--kaab-code-token-keyword);--shiki-dark:var(--kaab-code-token-keyword)}html pre.shiki code .sQm2-, html code.shiki .sQm2-{--shiki-light:var(--kaab-code-token-punctuation);--shiki-default:var(--kaab-code-token-punctuation);--shiki-dark:var(--kaab-code-token-punctuation)}html pre.shiki code .suOy4, html code.shiki .suOy4{--shiki-light:var(--kaab-code-token-string-expression);--shiki-default:var(--kaab-code-token-string-expression);--shiki-dark:var(--kaab-code-token-string-expression)}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);}html pre.shiki code .sHJIl, html code.shiki .sHJIl{--shiki-light:var(--kaab-code-token-constant);--shiki-default:var(--kaab-code-token-constant);--shiki-dark:var(--kaab-code-token-constant)}",{"title":1064,"searchDepth":2970,"depth":2970,"links":3622},[3623,3624,3627,3628,3634,3635,3636,3640,3641,3644,3645,3646],{"id":1036,"depth":2956,"text":1037},{"id":1054,"depth":2956,"text":1055,"children":3625},[3626],{"id":1153,"depth":2970,"text":1154},{"id":1181,"depth":2956,"text":1182},{"id":1380,"depth":2956,"text":1381,"children":3629},[3630,3631,3632,3633],{"id":1384,"depth":2970,"text":1385},{"id":1439,"depth":2970,"text":1440},{"id":1253,"depth":2970,"text":2007},{"id":2049,"depth":2970,"text":2050},{"id":706,"depth":2956,"text":1093},{"id":2112,"depth":2956,"text":1126},{"id":2299,"depth":2956,"text":2300,"children":3637},[3638,3639],{"id":2401,"depth":2970,"text":2402},{"id":2500,"depth":2970,"text":1046},{"id":2525,"depth":2956,"text":2526},{"id":2615,"depth":2956,"text":2616,"children":3642},[3643],{"id":2867,"depth":2970,"text":2868},{"id":2925,"depth":2956,"text":2926},{"id":3484,"depth":2956,"text":3485},{"id":3556,"depth":2956,"text":155},false,null,"How Kaabist turns page text into typed values, what it does when a value is missing or unreadable, and every warning a job can carry.","md",{},true,"\u002Fconcepts\u002Fvalidation-and-warnings",{"title":53,"description":3649},"2.concepts\u002F09.validation-and-warnings","kIhVrEmPXTBlSHXgZt7TgeUUMi537JrXKQrgT5En0yk",[3658,3661],{"title":50,"path":2791,"stem":3659,"description":3660,"children":-1},"2.concepts\u002F08.obstacles","What Kaabist does about the dialog, consent banner, tour or toast in the way of your step, how it learns a site, and what it does about a captcha.",{"title":56,"path":3662,"stem":3663,"description":3664,"children":-1},"\u002Fconcepts\u002Fcredits-and-billing","2.concepts\u002F10.credits-and-billing","What a job costs, how credits are reserved and settled, the pools they come from, running out, plans, packs, auto-recharge and overage.",1793593412507]