@@ -386,6 +386,36 @@ async function main(): Promise<void> {
386386 const app = readFileSync ( resolve ( webRoot , "app.js" ) , "utf8" ) ;
387387 const css = readFileSync ( resolve ( webRoot , "styles.css" ) , "utf8" ) ;
388388 new Function ( app ) ;
389+ const { workflowCompletion} = require ( resolve ( webRoot , "app.js" ) ) as {
390+ workflowCompletion ( value : Record < string , unknown > ) : Record < string , boolean > ;
391+ } ;
392+ const prematureWorkflow = workflowCompletion ( {
393+ project : "treasury-dex" ,
394+ configReady : false ,
395+ doctorReady : true ,
396+ planReady : true ,
397+ deploymentReady : true ,
398+ verified : true ,
399+ activationReady : true
400+ } ) ;
401+ if (
402+ prematureWorkflow . project !== true ||
403+ Object . entries ( prematureWorkflow ) . some ( ( [ stage , complete ] ) => stage !== "project" && complete )
404+ ) {
405+ throw new Error ( "workflow displayed downstream completion before configuration was explicitly saved" ) ;
406+ }
407+ const completedWorkflow = workflowCompletion ( {
408+ project : "treasury-dex" ,
409+ configReady : true ,
410+ doctorReady : true ,
411+ planReady : true ,
412+ deploymentReady : true ,
413+ verified : true ,
414+ activationReady : true
415+ } ) ;
416+ if ( Object . values ( completedWorkflow ) . some ( ( complete ) => ! complete ) ) {
417+ throw new Error ( "workflow did not display completion after every stage supplied evidence" ) ;
418+ }
389419 for ( const marker of [
390420 'id="projectMode"' , 'id="network"' , 'id="assetProfile"' , 'id="venueRfq"' ,
391421 'id="runDoctor"' , 'id="reviewPlan"' , 'id="deployDemo"' , 'id="verifyArtifact"' ,
@@ -401,6 +431,7 @@ async function main(): Promise<void> {
401431 'id="productionDeploymentId"' , 'id="productionDeployer"' , 'id="productionOperator"' ,
402432 'id="productionVenueRfq"' , 'id="productionVenueAmm"' ,
403433 'id="runProductionPreflight"' , 'id="generateProductionPlan"' , 'id="exportProductionPlan"' ,
434+ 'id="languageToggle"' ,
404435 "Runtime constraints" , "Demo fixtures" , "Manual evidence checklist" ,
405436 "Arbitrum One · production plan only" , "GIWA / organization EVM · plan only" ,
406437 "Production core" , "preflight → plan"
@@ -413,15 +444,16 @@ async function main(): Promise<void> {
413444 "startDexDemo" , "stopDexDemo" , "/runtime/start" , "/runtime/stop" ,
414445 "HELP_CONTENT" , "DEMO_BROADCAST_NETWORKS" , "selectedNetwork" , "selectedModule" ,
415446 "openContextHelp" , "buildProductionConfig" , "runProductionPreflight" ,
416- "generateProductionPlan" , "exportProductionPlan"
447+ "generateProductionPlan" , "exportProductionPlan" , "initializeLanguage" ,
448+ "corner-store-studio-language" , "프로젝트 방식" , "Artifact 검증"
417449 ] ) {
418450 if ( ! app . includes ( marker ) ) throw new Error ( `studio UI wiring missing: ${ marker } ` ) ;
419451 }
420452 for ( const marker of [
421453 "--ink:" , "--signal:" , ".studio-shell" , ".rail" , ".workflow-map" , ".status-led" ,
422454 ".artifact-grid" , ".boundary-banner" , ".help-trigger" , ".context-dialog" ,
423455 ".target-switch" , ".production-ledger" , ".production-actions" ,
424- ".handoff-actions" ,
456+ ".handoff-actions" , ".language-toggle" ,
425457 "@media (max-width: 820px)"
426458 ] ) {
427459 if ( ! css . includes ( marker ) ) throw new Error ( `studio visual token missing: ${ marker } ` ) ;
0 commit comments