[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"navigation":3,"\u002Fstation-runtime\u002Fupgrading":134,"\u002Fstation-runtime\u002Fupgrading-surround":337},[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":76,"body":136,"description":330,"extension":331,"links":332,"meta":333,"navigation":334,"path":77,"seo":335,"stem":78,"__hash__":336},"docs\u002F3.station-runtime\u002F8.upgrading.md",{"type":137,"value":138,"toc":324},"minimark",[139,152,157,160,164,167,184,195,198,262,273,277,280,296,303,307,310,313,320],[140,141,142,143,147,148,151],"p",{},"The current released pair is ",[144,145,146],"strong",{},"HTF v0.1.4"," and ",[144,149,150],{},"station runtime v0.3.0",", released on 3 October 2026. Updating the HTF application or publishing a package does not update physical station installations. Existing station versions remain compatible with the new server.",[153,154,156],"h2",{"id":155},"_1-confirm-server-support","1. Confirm server support",[140,158,159],{},"Upgrade a station to v0.3.0 after its server is on HTF v0.1.4. Older servers cannot acknowledge the new capture envelopes, so those reports would remain in the station outbox. Use the final HTTPS API URL directly; credential-bearing HTTP clients reject redirects.",[153,161,163],{"id":162},"_2-review-and-validate-the-plan","2. Review and validate the plan",[140,165,166],{},"Keep a copy of the current application dependency lockfile and local\u002Fruntime YAML. Check both configurations with the v0.3.0 checker before switching the production process:",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uvx --from embeint-htf-station==0.3.0 htf-station check-config config.yaml --runtime exported-runtime.yaml\n","sh","",[175,176,177],"code",{"__ignoreMap":173},[178,179,182],"span",{"class":180,"line":181},"line",1,[178,183,171],{},[140,185,186,187,190,191,194],{},"Set the station's usual environment values and copy its saved runtime YAML into ",[175,188,189],{},"exported-runtime.yaml",". See ",[192,193,71],"a",{"href":72}," for limits and diagnostics.",[140,196,197],{},"Review these settings even if validation passes:",[199,200,201,232,245],"ul",{},[202,203,204,207,208,211,212,215,216,219,220,223,224,227,228,231],"li",{},[144,205,206],{},"Runtime expressions:"," add ",[175,209,210],{},"interpolate: true"," to stages that expand ",[175,213,214],{},"${dut_id}",", ",[175,217,218],{},"${run_id}",", or context values such as ",[175,221,222],{},"${provisioning.serial_number}",". The default is ",[175,225,226],{},"false",", so unmarked strings remain literal. Uppercase ",[175,229,230],{},"${ENV_VAR}"," configuration-time expansion is separate.",[202,233,234,237,238,241,242,244],{},[144,235,236],{},"Managed secrets:"," declare ",[175,239,240],{},"required_secrets: [NAME]"," on stages that need them. The runtime checks all declared secrets for a lane's plan before any stage executes. See ",[192,243,56],{"href":57},".",[202,246,247,250,251,254,255,147,258,261],{},[144,248,249],{},"Report storage:"," keep ",[175,252,253],{},".htf-cache\u002Freport-outbox\u002F\u003Cstation-id>"," on persistent, writable storage and preserve it through application updates. Include its ",[175,256,257],{},"rejected\u002F",[175,259,260],{},"deferred\u002F"," directories when checking disk capacity.",[140,263,264,265,268,269,272],{},"The runtime preserves the legacy ",[175,266,267],{},"Programmer"," protocol and ",[175,270,271],{},"Settings.plugins"," for existing custom applications. Plugin names are metadata; your application still needs to import and register its custom stage implementations.",[153,274,276],{"id":275},"_3-pin-and-install-the-runtime","3. Pin and install the runtime",[140,278,279],{},"For a station application managed by uv, stop the listener at an idle point, then update its dependency:",[168,281,283],{"className":170,"code":282,"language":172,"meta":173,"style":173},"uv add 'embeint-htf-station==0.3.0'\nuv sync\n",[175,284,285,290],{"__ignoreMap":173},[178,286,287],{"class":180,"line":181},[178,288,289],{},"uv add 'embeint-htf-station==0.3.0'\n",[178,291,293],{"class":180,"line":292},2,[178,294,295],{},"uv sync\n",[140,297,298,299,302],{},"For the repository-based sample in the first-run guide, use the ",[175,300,301],{},"v0.3.0"," checkout. Preserve your custom Python code, credentials, and local configuration when updating a checkout.",[153,304,306],{"id":305},"_4-verify-a-pilot-jig","4. Verify a pilot jig",[140,308,309],{},"Restart the listener and confirm its heartbeat, applied plan, and required secret availability. Run a known DUT and compare the hardware outcome, stage results, captures, and logs. On a bench, exercise a retest and disconnect\u002Frestart recovery to verify pending reports reach HTF. Enable explicit capture mappings on other jigs after the pilot passes.",[140,311,312],{},"Historical logs are not backfilled into captured DUT data. A hardware pass also does not guarantee capture delivery; inspect capture warnings and the report outbox if values are missing.",[140,314,315,316,319],{},"Read the ",[192,317,318],{"href":131},"changelog"," for the feature summaries and links to the released packages.",[321,322,323],"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":173,"searchDepth":181,"depth":292,"links":325},[326,327,328,329],{"id":155,"depth":292,"text":156},{"id":162,"depth":292,"text":163},{"id":275,"depth":292,"text":276},{"id":305,"depth":292,"text":306},"Move an existing jig to station runtime v0.3.0 with validated plans and durable reports.","md",null,{},{"icon":79},{"title":76,"description":330},"rjDGHsiMielTAQgRx4cONKYY9tbtomevbU7FhH6uTlU",[338,340],{"title":71,"path":72,"stem":73,"description":339,"icon":74,"children":-1},"Diagnose runtime YAML and check a plan before it touches hardware.",{"title":81,"path":82,"stem":83,"description":341,"icon":86,"children":-1},"Keep firmware, device IDs, operators, and results connected.",1791170922914]