import fs from 'node:fs' const read = (file) => fs.readFileSync(file, 'utf8') const expect = (condition, message) => { if (!condition) { console.error(`FAIL: ${message}`) process.exit(1) } console.log(`PASS: ${message}`) } const home = read('packages/kbx-ui/src/shell/KbxHomePage.vue') expect(home.includes('allAttentionQueue') && home.includes('attentionCount:'), 'home module rail derives action pressure from the same attention truth as the home queue') expect(home.includes("['ArrowLeft','ArrowRight','Home','End']") && home.includes('focusModuleRail'), 'home module rail is keyboard navigable without requiring mouse selection') expect(home.includes('data-home-module="ALL"') && home.includes(':data-home-module="item.module"'), 'home module rail exposes stable focus targets') expect(home.includes("explorer?.focus({preventScroll:true})"), 'module selection lands focus on the filtered work explorer') expect(home.includes('@media(forced-colors:active)') && home.includes('button:focus-visible'), 'home module rail preserves active/focus cues in high-contrast navigation') const sectionHeader = read('packages/kbx-ui/src/components/KbxSectionHeader.vue') expect(sectionHeader.includes('countUnit?:string') && sectionHeader.includes("countUnit:'건'"), 'standard section heading owns count units instead of forcing screen-specific count markup') for (const [file, slot] of [ ['packages/kbx-ui/src/components/KbxMasterPage.vue', 'list-actions'], ['packages/kbx-ui/src/components/KbxMasterPage.vue', 'detail-actions'], ['packages/kbx-ui/src/components/KbxTransactionPage.vue', 'header-actions'], ['packages/kbx-ui/src/components/KbxTransactionPage.vue', 'detail-actions'], ['packages/kbx-ui/src/components/KbxQueuePage.vue', 'queue-actions'], ['packages/kbx-ui/src/components/KbxReconcilePage.vue', 'comparison-actions'], ]) { expect(read(file).includes(`slot name="${slot}"`), `${file.split('/').at(-1)} exposes standard ${slot} work-surface actions`) } const order = read('apps/web/src/modules/oms/orders/register/OrderRegisterPage.vue') expect(order.includes('const pageContext = computed') && order.includes(':context="pageContext"'), 'OMS order registration makes current record/status/error context explicit') expect(order.includes('