[{"data":1,"prerenderedAt":276},["ShallowReactive",2],{"navigation":3,"\u002Fstation-runtime\u002Fvalidation":134,"\u002Fstation-runtime\u002Fvalidation-surround":271},[4,16,38,80,112,129],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Get started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-rocket",{"title":12,"path":13,"stem":14,"icon":15},"Your first station run","\u002Fgetting-started\u002Ffirst-run","1.getting-started\u002F2.first-run","i-lucide-play",{"title":17,"path":18,"stem":19,"children":20,"icon":22},"Core concepts","\u002Fcore-concepts","2.core-concepts\u002F1.index",[21,23,28,33],{"title":17,"path":18,"stem":19,"icon":22},"i-lucide-boxes",{"title":24,"path":25,"stem":26,"icon":27},"Projects and access","\u002Fcore-concepts\u002Fprojects-and-access","2.core-concepts\u002F2.projects-and-access","i-lucide-users",{"title":29,"path":30,"stem":31,"icon":32},"Roles and permissions","\u002Fcore-concepts\u002Froles-and-permissions","2.core-concepts\u002F3.roles-and-permissions","i-lucide-shield-check",{"title":34,"path":35,"stem":36,"icon":37},"Custom roles","\u002Fcore-concepts\u002Fcustom-roles","2.core-concepts\u002F4.custom-roles","i-lucide-user-cog",{"title":39,"path":40,"stem":41,"children":42,"icon":44},"Station runtime","\u002Fstation-runtime","3.station-runtime\u002F1.index",[43,45,50,55,60,65,70,75],{"title":39,"path":40,"stem":41,"icon":44},"i-lucide-circuit-board",{"title":46,"path":47,"stem":48,"icon":49},"Configure a station","\u002Fstation-runtime\u002Fconfiguration","3.station-runtime\u002F2.configuration","i-lucide-file-code-2",{"title":51,"path":52,"stem":53,"icon":54},"Custom stages","\u002Fstation-runtime\u002Fcustom-stages","3.station-runtime\u002F3.custom-stages","i-lucide-puzzle",{"title":56,"path":57,"stem":58,"icon":59},"Credentials and secrets","\u002Fstation-runtime\u002Fcredentials-and-secrets","3.station-runtime\u002F4.credentials-and-secrets","i-lucide-key-round",{"title":61,"path":62,"stem":63,"icon":64},"Multiple lanes","\u002Fstation-runtime\u002Fmultiple-lanes","3.station-runtime\u002F5.multiple-lanes","i-lucide-git-branch",{"title":66,"path":67,"stem":68,"icon":69},"Capture DUT values","\u002Fstation-runtime\u002Fcaptured-values","3.station-runtime\u002F6.captured-values","i-lucide-list-checks",{"title":71,"path":72,"stem":73,"icon":74},"Validate configuration","\u002Fstation-runtime\u002Fvalidation","3.station-runtime\u002F7.validation","i-lucide-file-check-2",{"title":76,"path":77,"stem":78,"icon":79},"Upgrade a station","\u002Fstation-runtime\u002Fupgrading","3.station-runtime\u002F8.upgrading","i-lucide-package-check",{"title":81,"path":82,"stem":83,"children":84,"icon":86},"Production workflows","\u002Fproduction-workflows","4.production-workflows\u002F1.index",[85,87,92,97,102,107],{"title":81,"path":82,"stem":83,"icon":86},"i-lucide-factory",{"title":88,"path":89,"stem":90,"icon":91},"Applications and firmware","\u002Fproduction-workflows\u002Ffirmware-images","4.production-workflows\u002F2.firmware-images","i-lucide-cpu",{"title":93,"path":94,"stem":95,"icon":96},"DUT records and IDs","\u002Fproduction-workflows\u002Fdut-records-and-ids","4.production-workflows\u002F3.dut-records-and-ids","i-lucide-scan-barcode",{"title":98,"path":99,"stem":100,"icon":101},"Results and logs","\u002Fproduction-workflows\u002Fresults-and-logs","4.production-workflows\u002F4.results-and-logs","i-lucide-chart-no-axes-combined",{"title":103,"path":104,"stem":105,"icon":106},"Operator kiosk","\u002Fproduction-workflows\u002Foperator-kiosk","4.production-workflows\u002F5.operator-kiosk","i-lucide-monitor",{"title":108,"path":109,"stem":110,"icon":111},"DUT capture history","\u002Fproduction-workflows\u002Fdut-capture-history","4.production-workflows\u002F6.dut-capture-history","i-lucide-history",{"title":113,"path":114,"stem":115,"children":116,"icon":118},"Reference","\u002Freference","5.reference\u002F1.index",[117,119,124],{"title":113,"path":114,"stem":115,"icon":118},"i-lucide-book-open",{"title":120,"path":121,"stem":122,"icon":123},"API access","\u002Freference\u002Fapi-access","5.reference\u002F2.api-access","i-lucide-braces",{"title":125,"path":126,"stem":127,"icon":128},"Troubleshooting","\u002Freference\u002Ftroubleshooting","5.reference\u002F3.troubleshooting","i-lucide-life-buoy",{"title":130,"path":131,"stem":132,"icon":133},"Changelog","\u002Fchangelog","6.changelog","i-lucide-scroll-text",{"id":135,"title":71,"body":136,"description":264,"extension":265,"links":266,"meta":267,"navigation":268,"path":72,"seo":269,"stem":73,"__hash__":270},"docs\u002F3.station-runtime\u002F7.validation.md",{"type":137,"value":138,"toc":260},"minimark",[139,153,158,161,168,183,190,194,197,220,230,244,247,256],[140,141,142,143,147,148,152],"p",{},"HTF v0.1.4 validates runtime YAML during station setup and shows detailed errors in ",[144,145,146],"strong",{},"Station configuration",". Station runtime v0.3.0 also includes an offline ",[149,150,151],"code",{},"check-config"," command for the local configuration and an exported server plan.",[154,155,157],"h2",{"id":156},"fix-errors-in-htf","Fix errors in HTF",[140,159,160],{},"When configuration saving fails, read the specific validation messages shown by the form. Check indentation, field types, lane\u002Fprogrammer references, and dependency names rather than repeatedly submitting the same YAML. The station-creation form can show a generic HTTP 400 error; use the offline checker below to diagnose that plan before retrying.",[140,162,163],{},[164,165],"img",{"alt":166,"src":167},"Station configuration rejecting an invalid dependency entry with a detailed YAML validation error","\u002Fimages\u002Fproduct\u002F24-yaml-validation.png",[140,169,170,171,174,175,178,179,182],{},"This example uses the ",[144,172,173],{},"Demo Sensor"," documentation simulator. Its ",[149,176,177],{},"after"," list contains a string where a dependency mapping is required. The rejected edit leaves the saved revision unchanged; see ",[180,181,61],"a",{"href":62}," for the dependency syntax.",[140,184,185,186,189],{},"An existing saved plan that fails validation is marked ",[144,187,188],{},"Saved configuration needs correction",". Correct it and save a new revision. A successful save means the server has stored the plan; the station still needs to pull and apply it, and its custom stage code and hardware settings must be available locally.",[154,191,193],{"id":192},"check-locally-without-running-hardware","Check locally without running hardware",[140,195,196],{},"Use the same environment variables and certificate paths as the station. From your station application directory:",[198,199,204],"pre",{"className":200,"code":201,"language":202,"meta":203,"style":203},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uv run htf-station check-config config.yaml\nuv run htf-station check-config config.yaml --runtime exported-runtime.yaml\n","sh","",[149,205,206,214],{"__ignoreMap":203},[207,208,211],"span",{"class":209,"line":210},"line",1,[207,212,213],{},"uv run htf-station check-config config.yaml\n",[207,215,217],{"class":209,"line":216},2,[207,218,219],{},"uv run htf-station check-config config.yaml --runtime exported-runtime.yaml\n",[140,221,222,223,225,226,229],{},"Copy the runtime YAML from ",[144,224,146],{}," into ",[149,227,228],{},"exported-runtime.yaml",". The second command validates it against the programmers in the local file. The checker does not connect to MQTT or run hardware; it still loads the configuration, so missing environment values, invalid settings, or unreadable YAML files can fail the check. It checks the configured certificate\u002Fkey path combination but does not establish that those files are readable or that TLS will connect.",[140,231,232,233,236,237,240,241,243],{},"Both YAML and Python-configured plans enforce at most ",[144,234,235],{},"256 stages per lane"," and stage names of at most ",[144,238,239],{},"128 UTF-16 code units",". An ordinary ASCII name can contain 128 characters; an emoji may consume two units. Shorten overlong names and update every matching ",[149,242,177],{}," dependency. Names are not truncated automatically. Split an oversized plan into suitable lane plans.",[140,245,246],{},"An offline check does not exercise firmware downloads, managed secrets, external services, custom stage behavior, or programmer connections. After it passes, run the complete plan on a bench jig before production use.",[140,248,249,250,252,253,255],{},"See ",[180,251,46],{"href":47}," for plan examples and ",[180,254,76],{"href":77}," for the v0.3.0 migration steps.",[257,258,259],"style",{},"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":203,"searchDepth":210,"depth":216,"links":261},[262,263],{"id":156,"depth":216,"text":157},{"id":192,"depth":216,"text":193},"Diagnose runtime YAML and check a plan before it touches hardware.","md",null,{},{"icon":74},{"title":71,"description":264},"gL48KaIYrLUtzfxfuuNTPUyU4i1zqgld61OHHy8WX-s",[272,274],{"title":66,"path":67,"stem":68,"description":273,"icon":69,"children":-1},"Add structured identifiers and measurements to a DUT test report.",{"title":76,"path":77,"stem":78,"description":275,"icon":79,"children":-1},"Move an existing jig to station runtime v0.3.0 with validated plans and durable reports.",1791170922914]