- {{ vm.task.value.taskNo }}
- 총 {{ vm.task.value.totalLines }}개 라인 · {{ vm.task.value.totalQty }}개
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vm.reportException(type, memo)"
- />
-
-
-
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/wmsRetryQueue.ts b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/wmsRetryQueue.ts
deleted file mode 100644
index 5ef336aa..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/wmsRetryQueue.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { KbxWmsScanCommand } from '@kbx/contracts'
-
-const STORAGE_KEY = 'kbx:wms:safe-retry:v1'
-
-export interface QueuedPickingScan {
- command: KbxWmsScanCommand
- queuedAt: string
-}
-
-export function readPickingRetryQueue(): QueuedPickingScan[] {
- try {
- return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? '[]') as QueuedPickingScan[]
- } catch {
- return []
- }
-}
-
-export function queuePickingScan(command: KbxWmsScanCommand) {
- // Safety-first queue: only unacknowledged commands are retained for replay.
- // UI stops accepting the next authoritative scan until the server confirms this one.
- const queue = readPickingRetryQueue()
- if (!queue.some(x => x.command.idempotencyKey === command.idempotencyKey)) {
- queue.push({ command, queuedAt: new Date().toISOString() })
- localStorage.setItem(STORAGE_KEY, JSON.stringify(queue))
- }
-}
-
-export function removePickingScan(idempotencyKey: string) {
- const next = readPickingRetryQueue().filter(x => x.command.idempotencyKey !== idempotencyKey)
- localStorage.setItem(STORAGE_KEY, JSON.stringify(next))
-}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/WmsWorkPage.vue b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/WmsWorkPage.vue
deleted file mode 100644
index 0736e021..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/WmsWorkPage.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-router.push(routeForWmsTask(row))"/>
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/release.json b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/release.json
deleted file mode 100644
index cd5d6cac..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/release.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "foundationIteration": 50,
- "contractVersion": "1.31.0",
- "baseline": "v21",
- "declaredChangeLevel": "major",
- "releaseMode": "fe-operational-truth-home-retry-hardening",
- "notes": "v50 continues FE-first hardening without adding BE coupling or new template families. All major KBX templates now expose an explicit errorRetryable contract so permanent permission/integration/configuration failures do not render meaningless retry actions. WMS-WORK-001 marks the production API-not-connected problem non-retryable and T06 binds the problem retryability to its state boundary. Home Attention keeps the 8-item default density, truthfully labels the 24-item expansion as a bounded priority view when more items exist, and exposes direct Work Center / Notification Center routes for remaining items instead of implying that all items are on screen. Reference HTML/JavaScript mirrors the bounded disclosure and center navigation under KBX Business Light/Dark. Domain truth, permissions, idempotency and authoritative WMS completion remain server-owned."
-}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDialog.vue b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDialog.vue
deleted file mode 100644
index dba13c89..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDialog.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDrawer.vue b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDrawer.vue
deleted file mode 100644
index f4f3eb47..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDrawer.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExcelImport.vue b/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExcelImport.vue
deleted file mode 100644
index 254d79cc..00000000
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExcelImport.vue
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
-
-
-
-
-
{{ definition.title }}
-
파일 → 매핑 → 검증 → 반영 순서로 처리합니다. 원본 행 번호와 오류 이력은 유지됩니다.
-
-
-
-
-
-
-
-
- Excel 파일을 선택하세요.
- .xlsx · 최대 {{ Math.round((definition.maxFileSizeBytes ?? 10485760) / 1048576) }}MB
-
- Drag & Drop은 보조 기능이며 파일 선택 버튼은 항상 제공됩니다.
-
전체 ${allAttention.length}개 · ${visibleAttention.length}개 표시${attentionCenters}
${triageGroups.map(attentionLane).join('')}
바로 시작
미저장 → 열린 업무 → 즐겨찾기 → 최근 순으로 중복 없이 연결
업무 문맥 유지
${continueItem('미저장',dirtyTab?.title||'주문등록',dirtyTab?`${screen(dirtyTab.id).module} · 저장하지 않은 변경`:'OMS · 주문 · ORD 임시작성',dirtyTab?.id||'OMS-ORD-002','dirty')}${resumedTab?continueItem('복원',resumedTab.title,`${screen(resumedTab.id).module} · 이전 세션의 업무 위치`,resumedTab.id,'open'):continueItem('열림',regularOpen?.title||'품목관리',regularOpen?`${screen(regularOpen.id).module} · 열린 업무`:'ERP · 기준정보',regularOpen?.id||'ERP-MST-ITEM-001','open')}${continueItem('즐겨찾기','재고현황','ERP · 재고','ERP-INV-001','favorite')}${continueItem('최근','오늘 물류작업','WMS · 작업관리','WMS-WORK-001','recent')}
저장할 수 없습니다. ${state.transactionErrors.length}개 항목을 확인하세요.${state.transactionErrors.map((error,index)=>``).join('')}
`:'';}
- function resetTransaction(){state.transactionStatus='작성';state.transactionErrors=[];state.transactionHeader={orderDate:'2026-08-11',channel:'직접주문',customerCode:'',customerName:'',owner:'홍길동',warehouseCode:'WH01',warehouseName:'서울물류센터',receiver:'',phone:'',postal:'',address:''};state.transactionLines=[{code:'',name:'',spec:'',available:0,qty:1,price:0,remark:''}];markDirty('OMS-ORD-002',true);renderT03(screen('OMS-ORD-002'));setTimeout(()=>$('[data-field="customerCode"]',workspace)?.focus(),0);}
+ function resetTransaction(){state.transactionStatus='NEW';state.transactionErrors=[];state.transactionHeader={orderDate:'2026-08-11',channel:'직접주문',customerCode:'',customerName:'',owner:'홍길동',warehouseCode:'WH01',warehouseName:'서울물류센터',receiver:'',phone:'',postal:'',address:''};state.transactionLines=[{code:'',name:'',spec:'',available:0,qty:1,price:0,remark:''}];markDirty('OMS-ORD-002',true);renderT03(screen('OMS-ORD-002'));setTimeout(()=>$('[data-field="customerCode"]',workspace)?.focus(),0);}
function renderT03(s){
const h=state.transactionHeader;const totals=transactionTotals();
const lineRows=state.transactionLines.map((line,rowIndex)=>`
${['작성','확정','할당','피킹','검수','출고'].map(status=>`${status}`).join('')}현재: ${esc(state.transactionStatus)} · ${state.transactionStatus==='작성'?'다음: 저장/확정':'확정 이후 주요 값은 서버 업무 규칙으로 제한'}
${['NEW','DRAFT','CONFIRMED','ALLOCATED','PICKING','CHECKED','SHIPPED'].map(status=>`${esc(statusLabel(status,'lifecycle'))}`).join('')}현재: ${esc(statusLabel(state.transactionStatus,'lifecycle'))} · ${state.transactionStatus==='NEW'?'다음: 저장':state.transactionStatus==='DRAFT'?'다음: 확정':'확정 이후 주요 값은 서버 업무 규칙으로 제한'}
`;
workspace.innerHTML=pageShell(s,body,commands);bindPageTools(s);bindT03();
}
function bindT03(){
@@ -505,10 +547,10 @@
const editors=$$('.cell-editor',workspace);editors.forEach((editor,index)=>{editor.oninput=()=>{const line=state.transactionLines[Number(editor.dataset.lineRow)];const field=editor.dataset.lineField;let value=editor.value;if(['qty','price'].includes(field))value=Number(String(value).replaceAll(',',''))||0;line[field]=value;if(field==='code')line.name=fastName(String(value).trim());state.transactionErrors=[];markDirty('OMS-ORD-002',true);const totals=transactionTotals();$('#transactionItemCount').textContent=`${totals.items}종`;$('#transactionQty').textContent=totals.qty.toLocaleString('ko-KR');$('#transactionAmount').textContent=`₩${totals.amount.toLocaleString('ko-KR')}`;};editor.onkeydown=e=>{if(e.key==='Enter'){e.preventDefault();editors[Math.min(index+1,editors.length-1)]?.focus();}};});
$$('[data-transaction-error]',workspace).forEach(button=>button.onclick=()=>{const error=state.transactionErrors[Number(button.dataset.transactionError)];if(!error)return;if(Number.isInteger(error.row))$(`[data-line-row="${error.row}"][data-line-field="${CSS.escape(error.field)}"]`,workspace)?.focus();else if(error.field==='customerCode')$('.lookup[data-lookup-field="customer"] .lookup-trigger',workspace)?.focus();else if(error.field==='warehouseCode')$('.lookup[data-lookup-field="warehouse"] .lookup-trigger',workspace)?.focus();else $(`[data-field="${CSS.escape(error.field)}"]`,workspace)?.focus();});
$('#transactionAddLine').onclick=()=>{state.transactionLines.push({code:'',name:'',spec:'',available:0,qty:1,price:0,remark:''});markDirty('OMS-ORD-002',true);renderT03(screen('OMS-ORD-002'));setTimeout(()=>$$('.cell-editor',workspace).at(-4)?.focus(),0);};
- $('#saveTransaction').onclick=()=>{if(!validateTransaction()){renderT03(screen('OMS-ORD-002'));return;}markDirty('OMS-ORD-002',false);toast('주문을 저장했습니다. 서버 최종 검증을 통과한 것으로 가정한 FE Reference 상태입니다.');};
- $('#confirmTransaction').onclick=()=>{const tab=state.tabs.find(x=>x.id==='OMS-ORD-002');if(tab?.dirty){toast('저장하지 않은 변경이 있습니다. 먼저 저장하세요.','error');return;}if(!validateTransaction()){renderT03(screen('OMS-ORD-002'));return;}state.transactionStatus='확정';renderT03(screen('OMS-ORD-002'));toast('주문 상태를 확정으로 전환했습니다. 실제 제품에서는 Domain이 최종 검증합니다.');};
+ $('#saveTransaction').onclick=()=>{if(!validateTransaction()){renderT03(screen('OMS-ORD-002'));return;}state.transactionStatus='DRAFT';markDirty('OMS-ORD-002',false);renderT03(screen('OMS-ORD-002'));toast('주문을 저장했습니다. 서버 응답 상태 DRAFT를 사용자 Label 작성으로 표시합니다.');};
+ $('#confirmTransaction').onclick=()=>{const tab=state.tabs.find(x=>x.id==='OMS-ORD-002');if(tab?.dirty){toast('저장하지 않은 변경이 있습니다. 먼저 저장하세요.','error');return;}if(!validateTransaction()){renderT03(screen('OMS-ORD-002'));return;}state.transactionStatus='CONFIRMED';renderT03(screen('OMS-ORD-002'));toast('서버 응답 상태 CONFIRMED를 사용자 Label 확정으로 표시합니다.');};
$('#transactionNew').onclick=()=>{const tab=state.tabs.find(x=>x.id==='OMS-ORD-002');if(tab?.dirty){toast('현재 주문의 미저장 변경을 먼저 저장하거나 버리세요.','error');return;}resetTransaction();};
- $('#transactionCopy').onclick=()=>{if(state.tabs.find(x=>x.id==='OMS-ORD-002')?.dirty){toast('미저장 변경을 먼저 처리하세요.','error');return;}state.transactionStatus='작성';state.transactionErrors=[];state.transactionHeader={...state.transactionHeader,receiver:'',phone:'',postal:'',address:''};state.transactionLines=state.transactionLines.map(line=>({...line}));markDirty('OMS-ORD-002',true);renderT03(screen('OMS-ORD-002'));toast('주문을 복사했습니다. 수취/배송정보를 새 주문에 맞게 입력하세요.');};
+ $('#transactionCopy').onclick=()=>{if(state.tabs.find(x=>x.id==='OMS-ORD-002')?.dirty){toast('미저장 변경을 먼저 처리하세요.','error');return;}state.transactionStatus='NEW';state.transactionErrors=[];state.transactionHeader={...state.transactionHeader,receiver:'',phone:'',postal:'',address:''};state.transactionLines=state.transactionLines.map(line=>({...line}));markDirty('OMS-ORD-002',true);renderT03(screen('OMS-ORD-002'));toast('주문을 복사했습니다. 수취/배송정보를 새 주문에 맞게 입력하세요.');};
}
function fastName(code){return ({ABC001:'운동화',ABC002:'러닝화',ABC003:'양말',ABC004:'셔츠'})[code]||'';}
@@ -516,7 +558,7 @@
function renderT04(s){
const rows=state.fastRows.map((row,index)=>`
`:'';
const search=``;
@@ -622,7 +664,7 @@
const reset=$('#reconcileReset');if(reset)reset.onclick=()=>{state.mismatchOnly=false;state.reconcileSearch={date:'2026-08-11',keyword:''};state.selectedReconcileRows.clear();state.reconcileDataState='ready';renderT07(screen('COMMON-REC-001'));};
$$('[data-reconcile-row]',workspace).forEach(box=>box.onchange=()=>{box.checked?state.selectedReconcileRows.add(box.dataset.reconcileRow):state.selectedReconcileRows.delete(box.dataset.reconcileRow);renderT07(screen('COMMON-REC-001'));});
const all=$('#reconcileSelectAll');if(all)all.onchange=()=>{reconcileVisibleRows().forEach(row=>all.checked?state.selectedReconcileRows.add(row.no):state.selectedReconcileRows.delete(row.no));renderT07(screen('COMMON-REC-001'));};
- const rerun=()=>{if(!state.selectedReconcileRows.size)return;const count=state.selectedReconcileRows.size;for(const row of reconcileRows){if(state.selectedReconcileRows.has(row.no)){row.actual=row.expected;row.diff=0;row.reason='재처리 완료';row.status='해결';}}state.reconcileActionResult=`${count}건을 재처리하여 현재 Reference 데이터 기준 차이를 0으로 맞췄습니다.`;state.selectedReconcileRows.clear();renderT07(screen('COMMON-REC-001'));};
+ const rerun=()=>{if(!state.selectedReconcileRows.size)return;const count=state.selectedReconcileRows.size;state.reconcileActionResult=`${count}건의 재처리 요청을 등록했습니다. 원천 OMS/WMS 값은 이 화면에서 직접 덮어쓰지 않습니다.`;state.selectedReconcileRows.clear();renderT07(screen('COMMON-REC-001'));};
for(const id of ['reconcileRun','reconcileRunTop']){const button=$('#'+id);if(button)button.onclick=rerun;}const reason=$('#reconcileReason');if(reason)reason.onclick=()=>{state.reconcileActionResult=`${state.selectedReconcileRows.size}건의 원인 Projection을 다시 조회했습니다.`;renderT07(screen('COMMON-REC-001'));};const note=$('#reconcileReasonNote');if(note)note.onclick=()=>{state.reconcileActionResult=`${state.selectedReconcileRows.size}건에 처리사유가 필요합니다. 실제 제품에서는 사유 입력 Drawer를 사용합니다.`;renderT07(screen('COMMON-REC-001'));};const clear=$('#reconcileResultClear');if(clear)clear.onclick=()=>{state.reconcileActionResult='';renderT07(screen('COMMON-REC-001'));};
}
@@ -635,14 +677,14 @@
const step=state.importStep;const steps=['파일','매핑','검증','미리보기','반영','결과'];
let content='';
if(step===1)content=`
${state.importFileName?esc(state.importFileName):'Excel 파일을 선택하세요'}
${state.importFileName?`${state.importFileSize?`${(state.importFileSize/1024/1024).toFixed(2)}MB · `:''}파일 선택 완료 · 다음 단계에서 필드 매핑을 확인합니다.`:'파일 선택은 필수 접근 경로이며 Drag & Drop은 편의 기능입니다. .xlsx/.xls · 최대 20MB'}
${btn(state.importFileName?'파일 다시 선택':'파일 선택','primary','fileSelect')} ${btn('업로드 양식 다운로드')}
`;
- if(step===2)content=`
Excel ColumnSystem Field매핑 근거
${[['주문번호','주문번호','정확 일치'],['상품코드','품목코드','Alias 일치'],['수량','주문수량','Alias 일치'],['구매자','주문자명','Alias 일치'],['업체코드','거래처코드','사용자 확인 필요']].map(row=>`
`);bindPageTools(s);bindT08();if(state.importFocusStep!==step){state.importFocusStep=step;setTimeout(()=>{const target=step===1?$('#dropZone',workspace):$('[data-import-stage-heading]',workspace);target?.focus({preventScroll:true});},0);}
}
function startImportJob(){
if(importTimer)clearInterval(importTimer);state.importStep=5;state.importJobStatus='running';state.importProgress=0;state.importProcessed=0;renderT08(screen('OMS-ORD-003'));
@@ -654,14 +696,18 @@
const next=$('#importNext');if(next)next.onclick=()=>{if(state.importStep===1&&!state.importFileName)return;state.importStep=Math.min(5,state.importStep+1);renderT08(screen('OMS-ORD-003'));};
const back=$('#importBack');if(back)back.onclick=()=>{state.importStep=Math.max(1,state.importStep-1);renderT08(screen('OMS-ORD-003'));};
const commit=$('#importCommit');if(commit)commit.onclick=startImportJob;const result=$('#importResult');if(result)result.onclick=()=>{state.importStep=6;renderT08(screen('OMS-ORD-003'));};
- const reset=$('#importReset');if(reset)reset.onclick=()=>{state.importStep=1;state.importFileName='';state.importFileSize=0;state.importFileType='';state.importJobStatus='idle';state.importProgress=0;state.importProcessed=0;renderT08(screen('OMS-ORD-003'));};
+ const firstError=$('#importFirstError');if(firstError)firstError.onclick=()=>{state.importErrorIndex=0;renderT08(screen('OMS-ORD-003'));setTimeout(()=>$('[data-import-error-row="0"]',workspace)?.focus(),0);};
+ const nextError=$('#importNextError');if(nextError)nextError.onclick=()=>{state.importErrorIndex=(state.importErrorIndex+1)%2;renderT08(screen('OMS-ORD-003'));setTimeout(()=>$(`[data-import-error-row="${state.importErrorIndex}"]`,workspace)?.focus(),0);};
+ const reset=$('#importReset');if(reset)reset.onclick=()=>{state.importStep=1;state.importFileName='';state.importFileSize=0;state.importFileType='';state.importJobStatus='idle';state.importProgress=0;state.importProcessed=0;state.importErrorIndex=0;state.importFocusStep=0;renderT08(screen('OMS-ORD-003'));};
}
function renderT09(s){
const remain=Math.max(0,state.pickingRequired-state.pickingQty);const completed=remain===0;
const network=state.networkStatus==='online'?['●','온라인 · 동기화 완료','online']:state.networkStatus==='unstable'?['▲','연결 불안정 · 서버 확인 필요','unstable']:['○','오프라인 · 작업 반영 중지','offline'];
+ const scanTruth=state.networkStatus!=='online'?'입력 차단 · 온라인 확인 필요':completed?'상품 완료':'스캔 가능';
+ const confirmed=state.lastConfirmedScanValue?`${esc(state.lastConfirmedScanValue)} · ${new Date(state.lastConfirmedScanAt).toLocaleTimeString('ko-KR')}`:'아직 확인된 스캔 없음';
const errorTitle=state.scanError?.startsWith('NETWORK:')?'네트워크를 확인하세요.':'다른 상품입니다.';const errorCopy=(state.scanError||'').replace(/^NETWORK:/,'');
- workspace.innerHTML=`
출고 피킹
23 / 138
${network[0]} ${network[1]}LOCATION
A-03-02
위치 확인 완료 · 상품을 스캔하세요.
${state.scanBuffer?esc(state.scanBuffer):'SCAN READY'}스캐너 입력 후 Enter · 기대 바코드 8801234567890
ABC 운동화
BLACK / 270
필요${state.pickingRequired}
피킹${state.pickingQty}
남음${remain}
${completed?'
상품 완료다음 품목으로 자동 진행할 수 있습니다.
':''}${state.scanError?`
${esc(errorTitle)}${esc(errorCopy)}
`:''}
`;
+ workspace.innerHTML=`
출고 피킹
23 / 138
${network[0]} ${network[1]}LOCATION
A-03-02
위치 확인 완료 · 상품을 스캔하세요.
스캔 상태${esc(scanTruth)}
최근 서버 확인${confirmed}
${state.scanBuffer?esc(state.scanBuffer):'SCAN READY'}스캐너 입력 후 Enter · 기대 바코드 8801234567890
ABC 운동화
BLACK / 270
필요${state.pickingRequired}
피킹${state.pickingQty}
남음${remain}
${completed?'
상품 완료다음 품목으로 자동 진행할 수 있습니다.
':''}${state.scanError?`
${esc(errorTitle)}${esc(errorCopy)}
`:''}
`;
bindT09();
}
function applyScan(value){
@@ -670,7 +716,7 @@
state.lastScanValue=normalized;state.lastScanAt=now;
if(state.networkStatus!=='online'){state.scanError=`NETWORK:${state.networkStatus==='unstable'?'연결이 불안정하여 서버 검증을 완료하지 못했습니다. 수량은 반영하지 않았습니다.':'오프라인에서는 서버 검증이 필요한 피킹 수량을 반영하지 않습니다.'}`;renderT09(screen('WMS-PICK-001'));setTimeout(()=>$('#scanBox')?.focus(),0);return;}
if(normalized!=='8801234567890'){state.scanError=`스캔 ${normalized} · 필요 ABC001 / 8801234567890`;renderT09(screen('WMS-PICK-001'));setTimeout(()=>$('#scanBox')?.focus(),0);return;}
- state.scanError='';if(state.pickingQty$('#scanBox')?.focus(),0);
+ state.scanError='';state.lastConfirmedScanValue=normalized;state.lastConfirmedScanAt=Date.now();if(state.pickingQty$('#scanBox')?.focus(),0);
}
function bindT09(){
const scan=$('#scanBox');if(scan){scan.onkeydown=e=>{if(e.key==='Enter'){e.preventDefault();applyScan(state.scanBuffer);return;}if(e.key==='Backspace'){state.scanBuffer=state.scanBuffer.slice(0,-1);}else if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){state.scanBuffer+=e.key;}const strong=$('strong',scan);if(strong)strong.textContent=state.scanBuffer||'SCAN READY';};}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v38.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v38.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v38.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v38.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v39.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v39.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v39.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v39.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v40.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v40.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/browser-interaction-v40.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/browser-interaction-v40.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v38-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v38-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v38-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v38-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v39-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v39-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v39-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v39-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v39-zoom-pressure-720x450.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v39-zoom-pressure-720x450.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v39-zoom-pressure-720x450.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v39-zoom-pressure-720x450.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v40-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v40-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v40-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v40-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v43-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v43-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v43-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v43-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v43-light-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v43-light-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/home-v43-light-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/home-v43-light-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/lookup-v39-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/lookup-v39-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/lookup-v39-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/lookup-v39-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-list-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-list-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-list-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-list-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-list-v38-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-list-v38-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-list-v38-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-list-v38-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-stock-v39-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-stock-v39-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-order-stock-v39-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-order-stock-v39-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-v39-1280x720.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-v39-1280x720.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-v39-1280x720.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-v39-1280x720.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-v43-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-v43-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t01-v43-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t01-v43-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t02-lookup-v39-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t02-lookup-v39-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t02-lookup-v39-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t02-lookup-v39-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t02-master-v40-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t02-master-v40-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t02-master-v40-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t02-master-v40-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t03-transaction-v40-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t03-transaction-v40-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t03-transaction-v40-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t03-transaction-v40-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t07-reconcile-v40-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t07-reconcile-v40-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t07-reconcile-v40-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t07-reconcile-v40-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t08-job-v39-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t08-job-v39-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t08-job-v39-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t08-job-v39-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-phone-v38.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-phone-v38.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-phone-v38.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-phone-v38.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-v39-390x844.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-v39-390x844.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-v39-390x844.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-v39-390x844.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-v40-390x844.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-v40-390x844.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/t09-picking-v40-390x844.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/t09-picking-v40-390x844.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/theme-browser-v43.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/theme-browser-v43.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/theme-browser-v43.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/theme-browser-v43.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-home-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-home-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-home-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-home-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-home-light-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-home-light-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-home-light-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-home-light-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-runtime-panel-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-runtime-panel-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-runtime-panel-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-runtime-panel-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t01-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t01-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t01-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t01-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t01-forced-colors-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t01-forced-colors-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t01-forced-colors-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t01-forced-colors-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t09-dark-390x844.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t09-dark-390x844.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v44-t09-dark-390x844.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v44-t09-dark-390x844.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v45-home-dark-1280x720.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v45-home-dark-1280x720.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v45-home-dark-1280x720.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v45-home-dark-1280x720.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v45-t01-preference-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v45-t01-preference-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v45-t01-preference-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v45-t01-preference-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v46-home-resume-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v46-home-resume-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v46-home-resume-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v46-home-resume-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v47-t01-problem-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v47-t01-problem-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v47-t01-problem-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v47-t01-problem-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v48-t05-inventory-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v48-t05-inventory-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v48-t05-inventory-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v48-t05-inventory-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v48-t08-file-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v48-t08-file-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v48-t08-file-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v48-t08-file-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v49-home-attention-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v49-home-attention-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v49-home-attention-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v49-home-attention-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v50-home-overflow-dark-1440x900.png b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v50-home-overflow-dark-1440x900.png
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/fe-reference/previews/v50-home-overflow-dark-1440x900.png
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/fe-reference/previews/v50-home-overflow-dark-1440x900.png
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/index.html b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/index.html
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/index.html
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/index.html
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/package.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/package.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/package.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/package.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/App.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/App.vue
similarity index 90%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/App.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/App.vue
index 8b2239e1..c17b0ff8 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/App.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/App.vue
@@ -12,7 +12,7 @@ const permissions = computed(() => demoMode ? kbxPermissionCatalog.map(permissio
product-name="KBX"
:granted-permissions="permissions"
:preference-scope="demoMode ? 'demo-tenant:qa-user' : 'anonymous:secure-default'"
- app-version="v51-fe-presentation-workbench"
+ app-version="v60-fe-status-canonical-contract-hardening"
:user-role="demoMode ? 'QA' : 'anonymous'"
/>
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/app/installKbx.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/app/installKbx.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/app/installKbx.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/app/installKbx.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/experiments/createExperimentRolloutConnection.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/experiments/createExperimentRolloutConnection.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/experiments/createExperimentRolloutConnection.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/experiments/createExperimentRolloutConnection.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/experiments/kbxExperimentClient.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/experiments/kbxExperimentClient.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/experiments/kbxExperimentClient.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/experiments/kbxExperimentClient.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/help/helpRegistry.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/help/helpRegistry.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/help/helpRegistry.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/help/helpRegistry.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/demo/installFrontendDemoApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/demo/installFrontendDemoApi.ts
similarity index 60%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/demo/installFrontendDemoApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/demo/installFrontendDemoApi.ts
index 2f462f64..74169b83 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/demo/installFrontendDemoApi.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/demo/installFrontendDemoApi.ts
@@ -1,4 +1,4 @@
-import type { AxiosAdapter, AxiosRequestConfig, AxiosResponse } from 'axios'
+import { AxiosError, type AxiosAdapter, type AxiosRequestConfig, type AxiosResponse } from 'axios'
import { kbxHttp } from '../http/kbxHttpClient'
const now = () => new Date().toISOString()
@@ -23,30 +23,34 @@ const items = [
{ id:'10000000-0000-4000-8000-000000000004', code:'FOOD01', name:'에너지바 40g', displayName:'에너지바 40g', categoryName:'식품', specification:'40g', unit:'EA', barcode:'8801234567004', defaultWarehouseId:warehouses[1].id, defaultWarehouseName:warehouses[1].displayName, lotManaged:true, expiryManaged:true, active:true, version:1 },
]
+function demoOrderLifecycleFromShipment(value:string){
+ return ({NEW:'DRAFT',READY:'CONFIRMED',CONFIRMED:'CONFIRMED',HOLD:'HOLD',SHIPPED:'SHIPPED',ERROR:'ERROR'} as Record)[value] ?? value
+}
+
const orderDetails = new Map([
['20000000-0000-4000-8000-000000000001', {
- orderId:'20000000-0000-4000-8000-000000000001', orderNo:'ORD-260811-0001', version:4, status:'출고대기', orderDate:'2026-08-11', customerId:customers[0].id, warehouseId:warehouses[0].id,
+ orderId:'20000000-0000-4000-8000-000000000001', orderNo:'ORD-260811-0001', version:4, status:'CONFIRMED', orderDate:'2026-08-11', customerId:customers[0].id, warehouseId:warehouses[0].id,
receiverName:'홍길동', phone:'010-1234-5678', postalCode:'06236', address1:'서울특별시 강남구 테헤란로 1', address2:'101호',
lines:[{id:'line-1',clientId:'line-1',itemId:items[0].id,itemCode:'ABC001',itemName:items[0].name,orderQty:2,unitPrice:89000,amount:178000,remark:''}],
}],
['20000000-0000-4000-8000-000000000002', {
- orderId:'20000000-0000-4000-8000-000000000002', orderNo:'ORD-260811-0002', version:2, status:'신규', orderDate:'2026-08-11', customerId:customers[1].id, warehouseId:warehouses[0].id,
+ orderId:'20000000-0000-4000-8000-000000000002', orderNo:'ORD-260811-0002', version:2, status:'DRAFT', orderDate:'2026-08-11', customerId:customers[1].id, warehouseId:warehouses[0].id,
receiverName:'김하나', phone:'010-2345-6789', postalCode:'04524', address1:'서울특별시 중구 세종대로 10', address2:'',
lines:[{id:'line-2',clientId:'line-2',itemId:items[2].id,itemCode:'DEF001',itemName:items[2].name,orderQty:5,unitPrice:12000,amount:60000,remark:'선물포장'}],
}],
['20000000-0000-4000-8000-000000000003', {
- orderId:'20000000-0000-4000-8000-000000000003', orderNo:'ORD-260811-0003', version:6, status:'출고대기', orderDate:'2026-08-11', customerId:customers[2].id, warehouseId:warehouses[1].id,
+ orderId:'20000000-0000-4000-8000-000000000003', orderNo:'ORD-260811-0003', version:6, status:'CONFIRMED', orderDate:'2026-08-11', customerId:customers[2].id, warehouseId:warehouses[1].id,
receiverName:'박현장', phone:'010-3456-7890', postalCode:'22382', address1:'인천광역시 중구 공항동로 1', address2:'물류동',
lines:[{id:'line-3',clientId:'line-3',itemId:items[1].id,itemCode:'ABC002',itemName:items[1].name,orderQty:1,unitPrice:92000,amount:92000,remark:''}],
}],
])
let orderRows = [
- { id:'20000000-0000-4000-8000-000000000001', orderNo:'ORD-260811-0001', channelName:'쿠팡', orderedAt:'2026-08-11T09:15:00+09:00', customerName:'홍길동', itemSummary:'운동화 BLACK 270', totalQty:2, amount:178000, allocationStatus:'부족', shipmentStatus:'출고대기', exceptionCount:1, status:'READY' },
- { id:'20000000-0000-4000-8000-000000000002', orderNo:'ORD-260811-0002', channelName:'스마트스토어', orderedAt:'2026-08-11T09:38:00+09:00', customerName:'김하나', itemSummary:'기능성 양말', totalQty:5, amount:60000, allocationStatus:'정상', shipmentStatus:'신규', exceptionCount:0, status:'NEW' },
- { id:'20000000-0000-4000-8000-000000000003', orderNo:'ORD-260811-0003', channelName:'자사몰', orderedAt:'2026-08-11T10:02:00+09:00', customerName:'박현장', itemSummary:'운동화 WHITE 265', totalQty:1, amount:92000, allocationStatus:'정상', shipmentStatus:'출고대기', exceptionCount:0, status:'READY' },
- { id:'20000000-0000-4000-8000-000000000004', orderNo:'ORD-260811-0004', channelName:'쿠팡', orderedAt:'2026-08-11T10:17:00+09:00', customerName:'이소라', itemSummary:'에너지바 40g', totalQty:12, amount:36000, allocationStatus:'정상', shipmentStatus:'보류', exceptionCount:1, status:'HOLD' },
- { id:'20000000-0000-4000-8000-000000000005', orderNo:'ORD-260811-0005', channelName:'스마트스토어', orderedAt:'2026-08-11T11:05:00+09:00', customerName:'정우진', itemSummary:'기능성 양말 외 1종', totalQty:4, amount:84000, allocationStatus:'정상', shipmentStatus:'출고완료', exceptionCount:0, status:'SHIPPED' },
+ { id:'20000000-0000-4000-8000-000000000001', orderNo:'ORD-260811-0001', channelName:'쿠팡', orderedAt:'2026-08-11T09:15:00+09:00', customerName:'홍길동', itemSummary:'운동화 BLACK 270', totalQty:2, amount:178000, allocationStatus:'부족', shipmentStatus:'READY', exceptionCount:1 },
+ { id:'20000000-0000-4000-8000-000000000002', orderNo:'ORD-260811-0002', channelName:'스마트스토어', orderedAt:'2026-08-11T09:38:00+09:00', customerName:'김하나', itemSummary:'기능성 양말', totalQty:5, amount:60000, allocationStatus:'정상', shipmentStatus:'NEW', exceptionCount:0 },
+ { id:'20000000-0000-4000-8000-000000000003', orderNo:'ORD-260811-0003', channelName:'자사몰', orderedAt:'2026-08-11T10:02:00+09:00', customerName:'박현장', itemSummary:'운동화 WHITE 265', totalQty:1, amount:92000, allocationStatus:'정상', shipmentStatus:'READY', exceptionCount:0 },
+ { id:'20000000-0000-4000-8000-000000000004', orderNo:'ORD-260811-0004', channelName:'쿠팡', orderedAt:'2026-08-11T10:17:00+09:00', customerName:'이소라', itemSummary:'에너지바 40g', totalQty:12, amount:36000, allocationStatus:'정상', shipmentStatus:'HOLD', exceptionCount:1 },
+ { id:'20000000-0000-4000-8000-000000000005', orderNo:'ORD-260811-0005', channelName:'스마트스토어', orderedAt:'2026-08-11T11:05:00+09:00', customerName:'정우진', itemSummary:'기능성 양말 외 1종', totalQty:4, amount:84000, allocationStatus:'정상', shipmentStatus:'SHIPPED', exceptionCount:0 },
]
const auditByEntity = new Map()
@@ -66,13 +70,30 @@ let operations:any[] = [
{ id:'job-1', type:'excel-import', title:'주문 Excel Import', sourceScreenId:'OMS-ORD-003', status:'running', requestedAt:now(), startedAt:now(), processed:13421, total:17894, succeeded:13218, failed:203, resultMessage:'75% 처리 중' },
]
-const workItems = [
- { id:'op-1', module:'OMS', category:'재고', code:'STOCK_SHORTAGE', title:'주문 재고 부족', detail:'ABC001 가용재고 부족', severity:'warning', status:'open', owner:'', occurredAt:now(), screenId:'OMS-ORD-001', entityId:orderRows[0].id },
- { id:'op-2', module:'WMS', category:'연계', code:'SHIPMENT_SYNC', title:'출고 연계 지연', detail:'WMS 전송 재시도 대기', severity:'error', status:'open', owner:'', occurredAt:now(), screenId:'COMMON-OPS-001', entityId:'sync-2' },
+const workItems:any[] = [
+ { id:'op-1', sourceModule:'OMS', sourceType:'order', sourceId:orderRows[0].id, referenceNo:'ORD-260811-0001', sourceScreenId:'OMS-ORD-001', code:'STOCK_SHORTAGE', title:'주문 재고 부족', detail:'ABC001 가용재고 부족', severity:'warning', status:'open', ownerId:null, ownerName:null, occurredAt:'2026-08-11T09:15:00+09:00', dueAt:null, ageMinutes:75, version:1, context:{ itemCode:'ABC001' }, retryActionKey:null, allowManualResolution:true },
+ { id:'op-2', sourceModule:'WMS', sourceType:'integration', sourceId:'sync-2', referenceNo:'SYNC-260811-0002', sourceScreenId:'COMMON-OPS-001', code:'SHIPMENT_SYNC', title:'출고 연계 지연', detail:'WMS 전송 재시도 대기', severity:'critical', status:'open', ownerId:null, ownerName:null, occurredAt:'2026-08-11T08:10:00+09:00', dueAt:null, ageMinutes:140, version:2, context:{ integration:'WMS' }, retryActionKey:'shipment-sync', allowManualResolution:false },
+ { id:'op-3', sourceModule:'ERP', sourceType:'inventory', sourceId:'inventory-3', referenceNo:'INV-260811-0003', sourceScreenId:'ERP-INV-001', code:'INVENTORY_REVIEW', title:'재고 확인 필요', detail:'실사 차이 검토가 필요합니다.', severity:'info', status:'claimed', ownerId:'demo-user', ownerName:'QA 사용자', occurredAt:'2026-08-11T10:30:00+09:00', dueAt:null, ageMinutes:32, version:1, context:{}, retryActionKey:null, allowManualResolution:true },
]
-const reconcileItems = [
- { id:'rec-1', reconcileType:'OMS_WMS_SHIPMENT', referenceNo:'ORD-260811-0001', expected:2, actual:1, difference:-1, reason:'피킹부족', status:'mismatch', resolutionStatus:'미처리' },
- { id:'rec-2', reconcileType:'OMS_WMS_SHIPMENT', referenceNo:'ORD-260811-0003', expected:1, actual:1, difference:0, reason:'', status:'matched', resolutionStatus:'정상' },
+function demoWorkItemActions(item:any){
+ const actions:any[]=[{id:'navigate',label:'원 업무 보기',kind:'navigate'}]
+ if(item.status==='open')actions.push({id:'claim',label:'내가 처리',kind:'claim',permission:'common.operations.claim'})
+ if(['open','claimed'].includes(item.status)&&item.retryActionKey)actions.push({id:'retry',label:'재처리',kind:'retry',permission:'common.operations.retry'})
+ if(['open','claimed'].includes(item.status)&&item.allowManualResolution)actions.push({id:'resolve',label:'해결 처리',kind:'resolve',permission:'common.operations.resolve'})
+ return actions
+}
+const reconcileItems:any[] = [
+ { id:'rec-1', reconcileType:'OMS_WMS_OUTBOUND_QTY', referenceNo:'ORD-260811-0001', sourceLabel:'OMS 주문수량', targetLabel:'WMS 피킹수량', expectedValue:'2', actualValue:'1', differenceValue:'-1', reasonCode:'PICK_SHORT', reasonText:'피킹부족', status:'mismatch', occurredAt:'2026-08-11T10:42:00+09:00', sourceId:orderRows[0].id, targetId:'pick-line-1', version:3 },
+ { id:'rec-2', reconcileType:'OMS_WMS_OUTBOUND_QTY', referenceNo:'ORD-260811-0003', sourceLabel:'OMS 주문수량', targetLabel:'WMS 피킹수량', expectedValue:'1', actualValue:'1', differenceValue:'0', reasonCode:null, reasonText:null, status:'matched', occurredAt:'2026-08-11T10:38:00+09:00', sourceId:orderRows[2].id, targetId:'pick-line-3', version:1 },
+ { id:'rec-3', reconcileType:'OMS_WMS_OUTBOUND_QTY', referenceNo:'ORD-260811-0004', sourceLabel:'OMS 주문수량', targetLabel:'WMS 피킹수량', expectedValue:'12', actualValue:'10', differenceValue:'-2', reasonCode:'SYNC_PENDING', reasonText:'연계 결과 안정화 대기', status:'pending', occurredAt:'2026-08-11T10:47:00+09:00', sourceId:orderRows[3].id, targetId:'pick-line-4', version:2 },
+]
+
+
+let claimRows:any[] = [
+ {id:'50000000-0000-4000-8000-000000000001',claimNo:'CLM-260811-01',orderNo:'ORD-260811-0001',channelName:'쿠팡',type:'RETURN',reason:'사이즈 교환',requestedQty:1,status:'REQUESTED',ownerName:'QA 사용자',requestedAt:'2026-08-11T13:20:00+09:00',version:1},
+ {id:'50000000-0000-4000-8000-000000000002',claimNo:'CLM-260811-02',orderNo:'ORD-260811-0003',channelName:'자사몰',type:'EXCHANGE',reason:'색상 교환',requestedQty:1,status:'APPROVED',ownerName:'QA 사용자',requestedAt:'2026-08-11T13:35:00+09:00',version:2},
+ {id:'50000000-0000-4000-8000-000000000003',claimNo:'CLM-260811-03',orderNo:'ORD-260811-0004',channelName:'쿠팡',type:'CANCEL',reason:'고객 요청',requestedQty:2,status:'IN_PROGRESS',ownerName:'QA 사용자',requestedAt:'2026-08-11T14:10:00+09:00',version:3},
+ {id:'50000000-0000-4000-8000-000000000004',claimNo:'CLM-260811-04',orderNo:'ORD-260811-0002',channelName:'스마트스토어',type:'RETURN',reason:'검수 필요',requestedQty:1,status:'HOLD',ownerName:'QA 사용자',requestedAt:'2026-08-11T14:30:00+09:00',version:2},
]
const pickingTask:any = {
@@ -86,6 +107,10 @@ const imports = new Map()
function ok(config: AxiosRequestConfig, data: unknown, status = 200): AxiosResponse {
return { data, status, statusText: status === 204 ? 'No Content' : 'OK', headers:{}, config:config as any, request:{} }
}
+function fail(config:AxiosRequestConfig,data:unknown,status:number):never {
+ const response=ok(config,data,status)
+ throw new AxiosError(typeof data==='object'&&data&&'title' in data?String((data as any).title):`Demo HTTP ${status}`,AxiosError.ERR_BAD_REQUEST,config as any,{},response)
+}
function text(v:unknown){ return String(v ?? '').trim().toLowerCase() }
function body(config:AxiosRequestConfig):any {
if (typeof config.data === 'string') { try { return JSON.parse(config.data) } catch { return config.data } }
@@ -114,25 +139,25 @@ const demoAdapter:AxiosAdapter = async config => {
if(method==='GET'&&url==='/api/oms/orders'){
let rows=[...orderRows]; const keyword=text(q.keyword)
- if(q.status) rows=rows.filter(x=>x.status===q.status)
+ if(q.status) rows=rows.filter(x=>x.shipmentStatus===q.status)
if(String(q.exceptionOnly)==='true'||q.exceptionOnly===true) rows=rows.filter(x=>x.exceptionCount>0)
if(keyword) rows=rows.filter(x=>`${x.orderNo} ${x.customerName} ${x.itemSummary} ${x.channelName}`.toLowerCase().includes(keyword))
- const counters={all:orderRows.length,new:orderRows.filter(x=>x.status==='NEW').length,readyToShip:orderRows.filter(x=>x.status==='READY').length,exceptions:orderRows.filter(x=>x.exceptionCount>0).length}
+ const counters={all:orderRows.length,new:orderRows.filter(x=>x.shipmentStatus==='NEW').length,readyToShip:orderRows.filter(x=>x.shipmentStatus==='READY').length,exceptions:orderRows.filter(x=>x.exceptionCount>0).length}
const pageSize=Number(q.pageSize??100); const page=Math.max(Number(q.page??1),1); const slice=rows.slice((page-1)*pageSize,page*pageSize)
return ok(config,{items:clone(slice),totalCount:rows.length,totalQty:rows.reduce((s,x)=>s+x.totalQty,0),totalAmount:rows.reduce((s,x)=>s+x.amount,0),counters})
}
- if(method==='GET'&&/^\/api\/oms\/orders\/[^/]+$/.test(url)){const id=url.split('/').at(-1)!;const existing=orderDetails.get(id);if(existing)return ok(config,clone(existing));const row=orderRows.find(x=>x.id===id);if(row)return ok(config,{orderId:id,orderNo:row.orderNo,version:1,status:row.shipmentStatus,orderDate:'2026-08-11',customerId:customers[0].id,warehouseId:warehouses[0].id,receiverName:row.customerName,phone:'010-0000-0000',address1:'서울특별시',lines:[]});return ok(config,null)}
+ if(method==='GET'&&/^\/api\/oms\/orders\/[^/]+$/.test(url)){const id=url.split('/').at(-1)!;const existing=orderDetails.get(id);if(existing)return ok(config,clone(existing));const row=orderRows.find(x=>x.id===id);if(row)return ok(config,{orderId:id,orderNo:row.orderNo,version:1,status:demoOrderLifecycleFromShipment(row.shipmentStatus),orderDate:'2026-08-11',customerId:customers[0].id,warehouseId:warehouses[0].id,receiverName:row.customerName,phone:'010-0000-0000',address1:'서울특별시',lines:[]});return ok(config,null)}
if(method==='GET'&&/^\/api\/oms\/orders\/[^/]+\/audit$/.test(url)){const id=url.split('/').at(-2)!;return ok(config,clone(auditByEntity.get(id)??[]))}
if(method==='POST'&&url==='/api/oms/orders/ship'){
- const ids:Array=data.mode==='ids'?(data.ids??[]):orderRows.filter(row=>row.status==='READY').map(row=>row.id)
- let accepted=0; for(const id of ids){const row=orderRows.find(x=>x.id===id);if(row&&row.status==='READY'){row.shipmentStatus='출고지시';accepted++}}
+ const ids:Array=data.mode==='ids'?(data.ids??[]):orderRows.filter(row=>row.shipmentStatus==='READY').map(row=>row.id)
+ let accepted=0; for(const id of ids){const row=orderRows.find(x=>x.id===id);if(row&&row.shipmentStatus==='READY'){row.shipmentStatus='CONFIRMED';accepted++}}
return ok(config,{requested:ids.length,accepted,rejected:ids.length-accepted})
}
if(method==='POST'&&url==='/api/oms/orders/register'){
- const id=uid();const orderNo=`ORD-260811-${String(orderRows.length+1).padStart(4,'0')}`;const detail={...data,orderId:id,orderNo,version:1,status:'작성',lines:(data.lines??[]).map((line:any,index:number)=>{const item=items.find(x=>x.id===line.itemId);return{id:`${id}-${index+1}`,clientId:line.clientId,itemId:line.itemId,itemCode:item?.code??'',itemName:item?.name??'',orderQty:Number(line.orderQty),unitPrice:Number(line.unitPrice),amount:Number(line.orderQty)*Number(line.unitPrice),remark:line.remark??''}})};orderDetails.set(id,detail);orderRows.unshift({id,orderNo,channelName:'직접주문',orderedAt:now(),customerName:data.receiverName,itemSummary:detail.lines[0]?.itemName??'상품 없음',totalQty:detail.lines.reduce((s:number,x:any)=>s+x.orderQty,0),amount:detail.lines.reduce((s:number,x:any)=>s+x.amount,0),allocationStatus:'미확인',shipmentStatus:'작성',exceptionCount:0,status:'NEW'});audit(id,'주문 등록');return ok(config,{orderId:id,orderNo,version:1,status:'작성'})
+ const id=uid();const orderNo=`ORD-260811-${String(orderRows.length+1).padStart(4,'0')}`;const detail={...data,orderId:id,orderNo,version:1,status:'DRAFT',lines:(data.lines??[]).map((line:any,index:number)=>{const item=items.find(x=>x.id===line.itemId);return{id:`${id}-${index+1}`,clientId:line.clientId,itemId:line.itemId,itemCode:item?.code??'',itemName:item?.name??'',orderQty:Number(line.orderQty),unitPrice:Number(line.unitPrice),amount:Number(line.orderQty)*Number(line.unitPrice),remark:line.remark??''}})};orderDetails.set(id,detail);orderRows.unshift({id,orderNo,channelName:'직접주문',orderedAt:now(),customerName:data.receiverName,itemSummary:detail.lines[0]?.itemName??'상품 없음',totalQty:detail.lines.reduce((s:number,x:any)=>s+x.orderQty,0),amount:detail.lines.reduce((s:number,x:any)=>s+x.amount,0),allocationStatus:'미확인',shipmentStatus:'NEW',exceptionCount:0});audit(id,'주문 등록');return ok(config,{orderId:id,orderNo,version:1,status:'DRAFT'})
}
- if(method==='PUT'&&/^\/api\/oms\/orders\/[^/]+$/.test(url)){const id=url.split('/').at(-1)!;const existing=orderDetails.get(id);const version=Number(existing?.version??0)+1;const next={...(existing??{}),...data,orderId:id,orderNo:existing?.orderNo??`ORD-${id.slice(0,8)}`,version,status:existing?.status??'작성',lines:(data.lines??existing?.lines??[]).map((line:any,index:number)=>{const item=items.find(x=>x.id===line.itemId);return{...line,id:line.id??`${id}-${index+1}`,itemCode:item?.code??line.itemCode??'',itemName:item?.name??line.itemName??'',amount:Number(line.orderQty)*Number(line.unitPrice)}})};orderDetails.set(id,next);audit(id,'주문 수정');return ok(config,{orderId:id,orderNo:next.orderNo,version,status:next.status})}
- if(method==='POST'&&/^\/api\/oms\/orders\/[^/]+\/confirm$/.test(url)){const id=url.split('/').at(-2)!;const existing=orderDetails.get(id);if(existing){existing.version=Number(existing.version)+1;existing.status='확정';audit(id,'주문 확정');return ok(config,{orderId:id,orderNo:existing.orderNo,version:existing.version,status:'확정'})}return ok(config,{orderId:id,orderNo:'',version:1,status:'확정'})}
+ if(method==='PUT'&&/^\/api\/oms\/orders\/[^/]+$/.test(url)){const id=url.split('/').at(-1)!;const existing=orderDetails.get(id);const version=Number(existing?.version??0)+1;const next={...(existing??{}),...data,orderId:id,orderNo:existing?.orderNo??`ORD-${id.slice(0,8)}`,version,status:existing?.status??'DRAFT',lines:(data.lines??existing?.lines??[]).map((line:any,index:number)=>{const item=items.find(x=>x.id===line.itemId);return{...line,id:line.id??`${id}-${index+1}`,itemCode:item?.code??line.itemCode??'',itemName:item?.name??line.itemName??'',amount:Number(line.orderQty)*Number(line.unitPrice)}})};orderDetails.set(id,next);audit(id,'주문 수정');return ok(config,{orderId:id,orderNo:next.orderNo,version,status:next.status})}
+ if(method==='POST'&&/^\/api\/oms\/orders\/[^/]+\/confirm$/.test(url)){const id=url.split('/').at(-2)!;const existing=orderDetails.get(id);if(!existing)return fail(config,{type:'not-found',code:'ORDER_NOT_FOUND',title:'주문을 찾을 수 없습니다.'},404);if(existing.status!=='DRAFT')return fail(config,{type:'business-rule',code:'ORDER_NOT_CONFIRMABLE',title:'주문을 확정할 수 없습니다.',detail:'작성 상태의 주문만 확정할 수 있습니다.'},409);existing.version=Number(existing.version)+1;existing.status='CONFIRMED';audit(id,'주문 확정');return ok(config,{orderId:id,orderNo:existing.orderNo,version:existing.version,status:'CONFIRMED'})}
if(url.startsWith('/api/lookups/customers')){
if(method==='GET'&&url==='/api/lookups/customers')return ok(config,lookupResponse(customers,q))
@@ -163,15 +188,50 @@ const demoAdapter:AxiosAdapter = async config => {
if(method==='GET'&&/^\/api\/erp\/inventory\/[^/]+\/history$/.test(url)){return ok(config,{items:[{occurredAt:'2026-08-11T10:21:00+09:00',businessType:'출고',inQty:0,outQty:2,balanceQty:830,referenceNo:'ORD-260811-0001'},{occurredAt:'2026-08-11T08:40:00+09:00',businessType:'입고',inQty:100,outQty:0,balanceQty:832,referenceNo:'GR-260811-001'}]})}
if(method==='POST'&&url==='/api/erp/item-prices/bulk'){return ok(config,{requested:data.rows?.length??0,saved:data.rows?.length??0,created:data.rows?.length??0,updated:0})}
- if(method==='GET'&&url==='/api/operations/work-items'){return ok(config,{items:clone(workItems),totalCount:workItems.length,counters:{all:workItems.length,open:workItems.filter(x=>x.status==='open').length,critical:workItems.filter(x=>x.severity==='error').length}})}
- if(method==='POST'&&url==='/api/operations/work-items/claim'){for(const id of data.ids??[]){const item=workItems.find(x=>x.id===id);if(item)item.owner='QA 사용자'}return ok(config,{updated:(data.ids??[]).length})}
- if(method==='POST'&&url==='/api/operations/work-items/resolve'){for(const id of data.ids??[]){const item=workItems.find(x=>x.id===id);if(item)item.status='resolved'}return ok(config,{updated:(data.ids??[]).length})}
+ if(method==='GET'&&url==='/api/operations/work-items'){
+ let rows=[...workItems];const keyword=text(q.keyword)
+ if(q.module)rows=rows.filter(x=>x.sourceModule===q.module)
+ if(q.severity)rows=rows.filter(x=>x.severity===q.severity)
+ if(q.status)rows=rows.filter(x=>x.status===q.status)
+ if(q.code)rows=rows.filter(x=>x.code===q.code)
+ if(q.owner==='mine')rows=rows.filter(x=>x.ownerId==='demo-user')
+ if(q.owner==='unassigned')rows=rows.filter(x=>!x.ownerId)
+ if(keyword)rows=rows.filter(x=>`${x.title} ${x.detail??''} ${x.referenceNo} ${x.sourceId}`.toLowerCase().includes(keyword))
+ const counters=Object.values(workItems.filter(x=>['open','claimed'].includes(x.status)).reduce((acc:any,item:any)=>{const current=acc[item.code]??{key:item.code,label:item.title,count:0,severity:item.severity};current.count++;if(item.severity==='critical')current.severity='critical';else if(item.severity==='warning'&¤t.severity!=='critical')current.severity='warning';acc[item.code]=current;return acc},{}))
+ return ok(config,{items:clone(rows.map(x=>({...x,actions:demoWorkItemActions(x)}))),totalCount:rows.length,counters:clone(counters)})
+ }
+ if(method==='POST'&&url==='/api/operations/work-items/claim'){let claimedCount=0;for(const id of data.ids??[]){const item=workItems.find(x=>x.id===id);if(item&&item.status==='open'){item.status='claimed';item.ownerId='demo-user';item.ownerName='QA 사용자';item.version++;claimedCount++}}return ok(config,{claimedCount,skippedCount:Math.max((data.ids??[]).length-claimedCount,0)})}
+ if(method==='POST'&&url==='/api/operations/work-items/resolve'){let resolvedCount=0;for(const id of data.ids??[]){const item=workItems.find(x=>x.id===id);if(item&&['open','claimed'].includes(item.status)){item.status='resolved';item.version++;resolvedCount++}}return ok(config,{resolvedCount,rejectedCount:Math.max((data.ids??[]).length-resolvedCount,0)})}
if(method==='POST'&&/^\/api\/operations\/work-items\/[^/]+\/retry$/.test(url))return ok(config,{accepted:true})
- if(method==='GET'&&url==='/api/reconcile/items'){return ok(config,{items:clone(reconcileItems),totalCount:reconcileItems.length,mismatchCount:reconcileItems.filter(x=>x.difference!==0).length})}
- if(method==='POST'&&url==='/api/reconcile/items/create-exceptions')return ok(config,{created:(data.ids??[]).length})
+ if(method==='GET'&&url==='/api/reconcile/items'){
+ const keyword=text(q.keyword);let rows=[...reconcileItems]
+ if(q.reconcileType)rows=rows.filter(x=>x.reconcileType===q.reconcileType)
+ if(q.status)rows=rows.filter(x=>x.status===q.status)
+ if(keyword)rows=rows.filter(x=>`${x.referenceNo} ${x.reasonText??''}`.toLowerCase().includes(keyword))
+ const summaryBase=reconcileItems.filter(x=>(!q.reconcileType||x.reconcileType===q.reconcileType)&&(!keyword||`${x.referenceNo} ${x.reasonText??''}`.toLowerCase().includes(keyword)))
+ const summary={totalCount:summaryBase.length,matchedCount:summaryBase.filter(x=>x.status==='matched').length,mismatchCount:summaryBase.filter(x=>x.status==='mismatch').length,pendingCount:summaryBase.filter(x=>x.status==='pending').length,resolvedCount:summaryBase.filter(x=>x.status==='resolved').length}
+ return ok(config,{items:clone(rows),summary})
+ }
+ if(method==='POST'&&url==='/api/reconcile/items/create-exceptions'){
+ const requested=[...new Set(data.ids??[])].slice(0,500);let createdOrUpdatedCount=0
+ for(const id of requested){const row=reconcileItems.find(x=>x.id===id);if(!row||!['mismatch','pending'].includes(row.status))continue;createdOrUpdatedCount++;const workId=`reconcile-${row.id}`;if(!workItems.some(x=>x.id===workId))workItems.push({id:workId,sourceModule:'COMMON',sourceType:'reconcile',sourceId:row.id,referenceNo:row.referenceNo,sourceScreenId:'COMMON-REC-001',code:'RECONCILE_MISMATCH',title:`대사 불일치 · ${row.referenceNo}`,detail:row.reasonText??'대사 근거 확인 필요',severity:'warning',status:'open',ownerId:null,ownerName:null,occurredAt:row.occurredAt,dueAt:null,ageMinutes:0,version:row.version,context:{reconcileType:row.reconcileType,expectedValue:row.expectedValue,actualValue:row.actualValue,differenceValue:row.differenceValue},retryActionKey:null,allowManualResolution:true})}
+ return ok(config,{createdOrUpdatedCount,skippedCount:requested.length-createdOrUpdatedCount})
+ }
- if(method==='GET'&&url==='/api/oms/claims')return ok(config,{items:[{id:'claim-1',claimNo:'CLM-260811-01',orderNo:'ORD-260811-0001',type:'RETURN',reason:'사이즈 교환',status:'접수',customerName:'홍길동',requestedAt:now(),version:1}],totalCount:1})
- if(method==='POST'&&/^\/api\/oms\/claims\/[^/]+\/(approve|hold|start|complete)$/.test(url)){const transition=url.split('/').at(-1)!;return ok(config,{id:url.split('/').at(-2),status:{approve:'승인',hold:'보류',start:'처리중',complete:'완료'}[transition],version:2})}
+ if(method==='GET'&&url==='/api/oms/claims'){
+ let rows=[...claimRows];const keyword=text(q.keyword)
+ if(q.type)rows=rows.filter(x=>x.type===q.type)
+ if(q.status)rows=rows.filter(x=>x.status===q.status)
+ if(keyword)rows=rows.filter(x=>`${x.claimNo} ${x.orderNo} ${x.reason} ${x.channelName}`.toLowerCase().includes(keyword))
+ return ok(config,{items:clone(rows),totalCount:rows.length})
+ }
+ if(method==='POST'&&/^\/api\/oms\/claims\/[^/]+\/(approve|hold|start|complete)$/.test(url)){
+ const transition=url.split('/').at(-1)!;const id=url.split('/').at(-2)!;const row=claimRows.find(x=>x.id===id)
+ const policy:any={approve:{from:'REQUESTED',to:'APPROVED'},hold:{from:'REQUESTED',to:'HOLD'},start:{from:'APPROVED',to:'IN_PROGRESS'},complete:{from:'IN_PROGRESS',to:'COMPLETED'}}
+ const rule=policy[transition]
+ if(row&&rule&&row.status===rule.from){row.status=rule.to;row.version++;return ok(config,{id:row.id,status:row.status,version:row.version})}
+ return fail(config,{type:'business-rule',code:'CLAIM_TRANSITION_NOT_ALLOWED',title:'현재 상태에서는 요청한 클레임 전이를 실행할 수 없습니다.',detail:`${rule?.from??'허용 상태'} 상태를 확인하세요.`},409)
+ }
if(method==='GET'&&/^\/api\/wms\/picking\/tasks\/[^/]+$/.test(url))return ok(config,clone(pickingTask))
if(method==='POST'&&/^\/api\/wms\/picking\/tasks\/[^/]+\/start$/.test(url)){pickingTask.status='picking';pickingTask.stage='await-location';pickingTask.message='A-03-02 위치를 스캔하세요.';pickingTask.version++;return ok(config,clone(pickingTask))}
@@ -190,7 +250,7 @@ const demoAdapter:AxiosAdapter = async config => {
if(method==='POST'&&/^\/api\/wms\/picking\/tasks\/[^/]+\/exceptions$/.test(url)){pickingTask.status='exception';pickingTask.version++;return ok(config,clone(pickingTask))}
if(method==='POST'&&url==='/api/imports/sessions'){
- const id=uid();const session={id,importType:'oms.orders.v1',screenId:'OMS-ORD-003',fileName:'demo-orders.xlsx',status:'mapping-required',totalRows:128,validRows:0,invalidRows:0,warningRows:0,createdRows:0,updatedRows:0,progressPercent:10,mapping:[],sourceColumns:['주문번호','상품코드','수량','구매자'],createdAt:now()};imports.set(id,session);operations=[{id:`import:${id}`,type:'excel-import',title:'주문 Excel Import',sourceScreenId:'OMS-ORD-003',status:'running',requestedAt:now(),startedAt:now(),processed:0,total:128,succeeded:0,failed:0},...operations];return ok(config,clone(session))
+ const id=uid();const mapping=[{sourceColumn:'주문번호',targetField:'orderNo',source:'exact',confidence:1,reason:'정확 일치'},{sourceColumn:'주문일자',targetField:'orderDate',source:'alias',confidence:1,reason:'Alias 일치'},{sourceColumn:'업체코드',targetField:'customerCode',source:'alias',confidence:1,reason:'Alias 일치'},{sourceColumn:'출고창고',targetField:'warehouseCode',source:'alias',confidence:1,reason:'Alias 일치'},{sourceColumn:'받는분',targetField:'receiverName',source:'alias',confidence:1,reason:'Alias 일치'},{sourceColumn:'상품코드',targetField:'itemCode',source:'alias',confidence:1,reason:'Alias 일치'},{sourceColumn:'수량',targetField:'orderQty',source:'alias',confidence:1,reason:'Alias 일치'}];const session={id,importType:'oms.orders.v1',screenId:'OMS-ORD-003',fileName:'demo-orders.xlsx',status:'mapping-required',totalRows:128,validRows:0,invalidRows:0,warningRows:0,createdRows:0,updatedRows:0,progressPercent:10,mapping,sourceColumns:mapping.map(x=>x.sourceColumn),createdAt:now()};imports.set(id,session);operations=[{id:`import:${id}`,type:'excel-import',title:'주문 Excel Import',sourceScreenId:'OMS-ORD-003',status:'running',requestedAt:now(),startedAt:now(),processed:0,total:128,succeeded:0,failed:0},...operations];return ok(config,clone(session))
}
if(method==='GET'&&/^\/api\/imports\/sessions\/[^/]+$/.test(url)){const id=url.split('/').at(-1)!;return ok(config,clone(imports.get(id)??null))}
if(method==='PUT'&&/^\/api\/imports\/sessions\/[^/]+\/mapping$/.test(url)){const id=url.split('/').at(-2)!;const s=imports.get(id);if(s){s.mapping=data.mappings??[];s.status='uploaded';s.progressPercent=20}return ok(config,clone(s))}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/generated/kbxApiClient.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/generated/kbxApiClient.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/generated/kbxApiClient.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/generated/kbxApiClient.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/kbxHttpClient.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/kbxHttpClient.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/kbxHttpClient.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/kbxHttpClient.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/useKbxProblemHandler.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/useKbxProblemHandler.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/http/useKbxProblemHandler.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/http/useKbxProblemHandler.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/imports/createImportProgressConnection.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/imports/createImportProgressConnection.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/imports/createImportProgressConnection.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/imports/createImportProgressConnection.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/lookups/lookupRegistry.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/lookups/lookupRegistry.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/lookups/lookupRegistry.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/lookups/lookupRegistry.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/main.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/main.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/main.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/main.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
index 51165d55..2e273e75 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
@@ -6,6 +6,7 @@ import {
KbxSelect, KbxStatus, KbxToast, KbxDataState, KbxTabs, KbxDataGrid, KbxSearchPanel, kbxComponentCatalog, kbxTemplateManifest,
} from '@kbx/ui'
import type { KbxAiProposal, KbxAuditEntry, KbxCommandDefinition, KbxDensity, KbxGridColumn, KbxSearchField, KbxValidationError } from '@kbx/contracts'
+import { kbxStatusCatalog } from '../../../registry/statusCatalog'
const density=ref((new URLSearchParams(location.search).get('density') as KbxDensity) || 'compact')
const text=ref('대한상사')
@@ -27,26 +28,26 @@ const searchFields:KbxSearchField[]=[
]
type DemoRow={id:string;orderNo:string;customerName:string;orderQty:number;amount:number;status:string}
const gridRows=ref([
- {id:'1',orderNo:'TEST-ORD-001',customerName:'대한상사',orderQty:10,amount:128000,status:'출고대기'},
- {id:'2',orderNo:'TEST-ORD-002',customerName:'서울유통',orderQty:8,amount:96000,status:'재고부족'},
- {id:'3',orderNo:'TEST-ORD-003',customerName:'부산물류',orderQty:4,amount:52000,status:'신규'},
+ {id:'1',orderNo:'TEST-ORD-001',customerName:'대한상사',orderQty:10,amount:128000,status:'READY'},
+ {id:'2',orderNo:'TEST-ORD-002',customerName:'서울유통',orderQty:8,amount:96000,status:'ERROR'},
+ {id:'3',orderNo:'TEST-ORD-003',customerName:'부산물류',orderQty:4,amount:52000,status:'NEW'},
])
const gridColumns:KbxGridColumn[]=[
{field:'orderNo',header:'주문번호',type:'link',width:150,pinned:'left'},
{field:'customerName',header:'거래처',width:160},
{field:'orderQty',header:'수량',type:'quantity',width:100,editable:true},
{field:'amount',header:'금액',type:'money',width:130},
- {field:'status',header:'상태',type:'status',width:110},
+ {field:'status',header:'상태',type:'status',width:120,statusMap:{definitions:kbxStatusCatalog.orderShipment}},
]
const gridErrors:KbxValidationError[]=[{rowKey:'2',field:'orderQty',code:'INSUFFICIENT_STOCK',message:'출고 가능 수량은 6개입니다.'}]
const fastRows=ref([
- {id:'F1',orderNo:'TEST-FAST-001',customerName:'대한상사',orderQty:1,amount:12000,status:'작성'},
- {id:'F2',orderNo:'TEST-FAST-002',customerName:'대한상사',orderQty:2,amount:24000,status:'작성'},
- {id:'F3',orderNo:'TEST-FAST-003',customerName:'대한상사',orderQty:3,amount:36000,status:'작성'},
+ {id:'F1',orderNo:'TEST-FAST-001',customerName:'대한상사',orderQty:1,amount:12000,status:'NEW'},
+ {id:'F2',orderNo:'TEST-FAST-002',customerName:'대한상사',orderQty:2,amount:24000,status:'NEW'},
+ {id:'F3',orderNo:'TEST-FAST-003',customerName:'대한상사',orderQty:3,amount:36000,status:'NEW'},
])
let fastSeq=4
-function addFastRow(){fastRows.value.push({id:`F${fastSeq}`,orderNo:`TEST-FAST-${String(fastSeq++).padStart(3,'0')}`,customerName:'',orderQty:1,amount:0,status:'작성'})}
+function addFastRow(){fastRows.value.push({id:`F${fastSeq}`,orderNo:`TEST-FAST-${String(fastSeq++).padStart(3,'0')}`,customerName:'',orderQty:1,amount:0,status:'NEW'})}
function duplicateFastRows(rows:DemoRow[]){for(const row of rows)fastRows.value.push({...row,id:`F${fastSeq}`,orderNo:`TEST-FAST-${String(fastSeq++).padStart(3,'0')}`})}
const commands:KbxCommandDefinition[]=[
@@ -76,7 +77,7 @@ const groupCounts=computed(()=>Object.fromEntries([...new Set(kbxComponentCatalo
Loading / Empty / Error
-
Command / 상태
+
Command / 상태
AI / Audit
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/design-system/design-system.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/design-system/design-system.definition.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/design-system/design-system.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/design-system/design-system.definition.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/ExperimentsPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/ExperimentsPage.vue
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/ExperimentsPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/ExperimentsPage.vue
index 5fd44a71..5f426ff0 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/ExperimentsPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/ExperimentsPage.vue
@@ -5,11 +5,12 @@ import { KbxListPage, KbxDataGrid, KbxDialog, KbxInput, KbxNumberField, KbxSelec
import type { KbxExperimentOverviewRow, KbxGridColumn } from '@kbx/contracts'
import { experimentsScreen } from './experiments.definition'
import { experimentApi } from './experimentApi'
+import { kbxStatusCatalog } from '../../../registry/statusCatalog'
const selected=ref([])
const query=useQuery({queryKey:['kbx','experiments'],queryFn:experimentApi.overview})
const rows=computed(()=>query.data.value?.items??[])
const columns:KbxGridColumn[]=[
- {field:'experimentId',header:'실험',width:280},{field:'screenId',header:'화면',width:140},{field:'state',header:'상태',type:'status',width:110},{field:'rolloutPercent',header:'배포 %',type:'integer',width:90},{field:'decision',header:'판정',width:150},{field:'updatedAt',header:'변경일시',type:'datetime',width:170},
+ {field:'experimentId',header:'실험',width:280},{field:'screenId',header:'화면',width:140},{field:'state',header:'상태',type:'status',width:120,statusMap:{definitions:kbxStatusCatalog.experiment}},{field:'rolloutPercent',header:'배포 %',type:'integer',width:90},{field:'decision',header:'판정',width:150},{field:'updatedAt',header:'변경일시',type:'datetime',width:170},
]
const dialogOpen=ref(false),mode=ref<'rollout'|'rollback'>('rollout'),reason=ref(''),rolloutPercent=ref(0),rolloutState=ref('running'),error=ref('')
function openManage(next:'rollout'|'rollback'){const item=selected.value[0];if(!item)return;mode.value=next;reason.value='';error.value='';rolloutPercent.value=item.rolloutPercent;rolloutState.value=item.state==='paused'?'paused':'running';dialogOpen.value=true}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/experimentApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/experimentApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/experimentApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/experimentApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/experiments.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/experiments.definition.ts
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/experiments.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/experiments.definition.ts
index 039c9f20..eb032489 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/experiments/experiments.definition.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/experiments/experiments.definition.ts
@@ -1,6 +1,6 @@
import { defineKbxScreen } from '@kbx/ui'
export const experimentsScreen=defineKbxScreen({
- id:'COMMON-EXP-001',version:'1.0.0',module:'COMMON',type:'list', templateCode:'T01',title:'UX 실험·점진배포',
+ id:'COMMON-EXP-001',version:'1.1.0',module:'COMMON',type:'list', templateCode:'T01',title:'UX 실험·점진배포',
description:'안전한 UX 변경만 점진 배포하고 가드레일 지표와 즉시 롤백 상태를 확인합니다.',
permissions:['common.experiment.read'],helpKey:'COMMON-EXP-001',telemetry:{enabled:true},
commands:[{id:'search',label:'조회',group:'query',shortcut:'F3'},{id:'rollout',label:'배포 설정',group:'workflow',permission:'common.experiment.manage',requiresSelection:true,minSelection:1,maxSelection:1},{id:'rollback',label:'즉시 롤백',group:'workflow',variant:'danger',permission:'common.experiment.manage',requiresSelection:true,minSelection:1,maxSelection:1}],
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
index fa9c34d8..275e6779 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
@@ -5,13 +5,14 @@ import { KbxListPage, KbxDataGrid } from '@kbx/ui'
import type { KbxExternalDataStatusRow, KbxGridColumn } from '@kbx/contracts'
import { externalDataScreen } from './external-data.definition'
import { externalDataApi } from './externalDataApi'
+import { kbxStatusCatalog } from '../../../registry/statusCatalog'
const selected=ref([])
const query=useQuery({queryKey:['kbx','external-data','status'],queryFn:externalDataApi.status})
const rows=computed(()=>query.data.value?.items??[])
const columns:KbxGridColumn[]=[
{field:'sourceLabel',header:'출처',width:110,pinned:'left'},
{field:'datasetId',header:'데이터셋',width:320},
- {field:'state',header:'신선도',type:'status',width:130},
+ {field:'state',header:'신선도',type:'status',width:130,statusMap:{definitions:kbxStatusCatalog.externalData}},
{field:'cacheEntries',header:'캐시',type:'integer',width:90},
{field:'staleEntries',header:'Stale',type:'integer',width:90},
{field:'unavailableEntries',header:'사용불가',type:'integer',width:100},
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/external-data.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/external-data.definition.ts
similarity index 90%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/external-data.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/external-data.definition.ts
index 7a0f97f5..3d28f7cb 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/external-data.definition.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/external-data.definition.ts
@@ -1,6 +1,6 @@
import { defineKbxScreen } from '@kbx/ui'
export const externalDataScreen=defineKbxScreen({
- id:'COMMON-DATA-001',version:'1.0.0',module:'COMMON',type:'list', templateCode:'T01',title:'외부 데이터 상태',
+ id:'COMMON-DATA-001',version:'1.1.0',module:'COMMON',type:'list', templateCode:'T01',title:'외부 데이터 상태',
description:'KRX·OPENDART·KIS 외부 데이터의 출처·수신시각·신선도·캐시 상태를 확인합니다.',
permissions:['common.external-data.read'],helpKey:'COMMON-DATA-001',telemetry:{enabled:true},
commands:[
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/externalDataApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/externalDataApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/external-data/externalDataApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/external-data/externalDataApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/home/HomeRoutePage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/home/HomeRoutePage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/home/HomeRoutePage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/home/HomeRoutePage.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/not-found/NotFoundRoutePage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/not-found/NotFoundRoutePage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/not-found/NotFoundRoutePage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/not-found/NotFoundRoutePage.vue
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/operations/OperationsQueuePage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/operations/OperationsQueuePage.vue
new file mode 100644
index 00000000..0635b559
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/operations/OperationsQueuePage.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+ 정상 건은 표시하지 않습니다. 중요도와 경과시간이 높은 예외부터 처리합니다.
+
+
+
+
+
+
+
+
+
+
+ {{ actionReceipt.kind==='claim'
+ ? (actionReceipt.skipped>0 ? '담당 지정이 일부 처리되었습니다.' : '담당 지정을 완료했습니다.')
+ : (actionReceipt.skipped>0 ? '해결 처리가 완료되지 않았습니다.' : '해결 처리를 완료했습니다.') }}
+ 요청 {{ actionReceipt.requested.toLocaleString('ko-KR') }}건 · 내 업무 전환 {{ actionReceipt.succeeded.toLocaleString('ko-KR') }}건 · 건너뜀 {{ actionReceipt.skipped.toLocaleString('ko-KR') }}건
+ 요청 {{ actionReceipt.requested.toLocaleString('ko-KR') }}건 · 해결 {{ actionReceipt.succeeded.toLocaleString('ko-KR') }}건 · 거절 {{ actionReceipt.skipped.toLocaleString('ko-KR') }}건
+ HTTP 성공 여부가 아니라 서버 업무 결과를 기준으로 표시합니다. 최신 상태를 다시 조회해 다음 행동을 결정하세요.
+
+ {{ exceptionReceipt.skipped>0 ? '예외 업무 등록이 일부 처리되었습니다.' : '예외 업무 등록을 완료했습니다.' }}
+ 요청 {{ exceptionReceipt.requested.toLocaleString('ko-KR') }}건 · 생성/갱신 {{ exceptionReceipt.created.toLocaleString('ko-KR') }}건 · 건너뜀 {{ exceptionReceipt.skipped.toLocaleString('ko-KR') }}건
+ 건너뜀은 실행 시점에 더 이상 불일치/확인중 상태가 아니었던 건입니다. 서버의 최신 대사 상태를 기준으로 다음 행동을 결정하세요.
+
원천값을 화면에서 직접 덮어쓰지 않습니다. 불일치는 예외 업무로 등록한 뒤 담당자가 근거와 업무 규칙을 확인합니다.
+
+
+
+
+
+
+
+
+
+ 불일치 건은 원천 데이터를 직접 수정하지 않고 예외 업무로 전환해 담당자가 원인을 확인합니다.
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcile.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcile.definition.ts
similarity index 91%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcile.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcile.definition.ts
index a2738e21..8d17916d 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcile.definition.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcile.definition.ts
@@ -1,8 +1,9 @@
import { defineKbxScreen, type KbxGridColumn, type KbxReconcileItem, type KbxSearchField } from '@kbx/ui'
+import { kbxStatusCatalog } from '../../../registry/statusCatalog'
export const reconcileScreen = defineKbxScreen({
id: 'COMMON-REC-001',
- version: '1.0.0',
+ version: '1.3.0',
module: 'COMMON',
type: 'reconcile', templateCode:'T07',
title: '업무 데이터 대사',
@@ -37,6 +38,6 @@ export const reconcileColumns: KbxGridColumn[] = [
{ field: 'actualValue', header: '실제값', width: 130 },
{ field: 'differenceValue', header: '차이', width: 110 },
{ field: 'reasonText', header: '원인', width: 280 },
- { field: 'status', header: '상태', type: 'status', width: 100 },
+ { field: 'status', header: '상태', type: 'status', width: 110, statusMap:{definitions:kbxStatusCatalog.reconcile} },
{ field: 'occurredAt', header: '확인시각', type: 'datetime', width: 160 },
]
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcileApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcileApi.ts
similarity index 66%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcileApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcileApi.ts
index cc8af329..43ead33b 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/reconcileApi.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/reconcileApi.ts
@@ -1,6 +1,11 @@
import type { KbxReconcileResult } from '@kbx/contracts'
import { kbxApi } from '../../../http/generated/kbxApiClient'
+export interface CreateReconcileExceptionsResponse {
+ createdOrUpdatedCount: number
+ skippedCount: number
+}
+
export interface ReconcileFilter {
reconcileType?: string | null
status?: string | null
@@ -14,6 +19,6 @@ export const reconcileApi = {
return kbxApi.request('common.reconcile.search', { query: filter })
},
createExceptions(ids: string[]) {
- return kbxApi.request('common.reconcile.createExceptions', { body: { ids } })
+ return kbxApi.request('common.reconcile.createExceptions', { body: { ids } })
},
}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/reconcile/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/reconcile/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
index 57570e4e..f7f7997d 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
@@ -1,5 +1,5 @@
+
+
+
+
{{pageNotice}}
+
+
+
+
+
+ {clearError(undefined,'fromWarehouseId');touch()}" />
+ {clearError(undefined,'toWarehouseId');touch()}" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory-move/inventory-move.definition.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory-move/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory-move/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory-move/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory-move/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/InventoryPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/InventoryPage.vue
similarity index 86%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/InventoryPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/InventoryPage.vue
index da3b5008..05413f75 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/InventoryPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/InventoryPage.vue
@@ -38,7 +38,7 @@ const drawerSummary=computed(()=>selectedItem.value?[
-
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/inventory.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/inventory.definition.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/inventory.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/inventory.definition.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/inventoryApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/inventoryApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/inventory/inventoryApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/inventory/inventoryApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue
similarity index 78%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue
index 304e3f68..6373fccc 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/erp/item-prices/ItemPriceFastEntryPage.vue
@@ -22,13 +22,14 @@ async function command(id:string){ if(id==='save')await vm.save(); if(id==='new'
-
+ Enter 다음 셀F2 품목 조회Ctrl+V Excel 붙여넣기행 선택 후 아래 채우기/복제
저장 {{vm.lastResult.value.saved.toLocaleString('ko-KR')}}건 · 신규 {{vm.lastResult.value.created.toLocaleString('ko-KR')}} · 수정 {{vm.lastResult.value.updated.toLocaleString('ko-KR')}}
+ 다음 행동 · 위치 {{ current.locationCode }} 스캔
+ 다음 행동 · 상품 {{ current.itemCode }} 스캔
+ 중복 스캔하지 말고 서버 확인을 기다리세요.
+
+
+
+
+
+
+ {{ vm.task.value.taskNo }}
+ 총 {{ vm.task.value.totalLines }}개 라인 · {{ vm.task.value.totalQty }}개
+ 작업 시작 후 위치 → 상품 순서로 스캔합니다.
+
+
+
+
+
스캔 상태{{ scanReadiness }}
+
최근 서버 확인{{ lastConfirmedText }}
+
최근 서버 확인아직 확인된 스캔 없음
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ vm.reportException(type, memo)"
+ />
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/picking.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/picking.definition.ts
similarity index 93%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/picking.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/picking.definition.ts
index b7322c8b..17a04c2f 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/picking.definition.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/picking.definition.ts
@@ -2,7 +2,7 @@ import { defineKbxScreen } from '@kbx/ui'
export const pickingScreen = defineKbxScreen({
id: 'WMS-PICK-001',
- version: '1.0.0',
+ version: '1.2.0',
module: 'WMS',
type: 'wms-mobile', templateCode:'T09',
title: '출고 피킹',
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/pickingApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/pickingApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/pickingApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/pickingApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/useWmsPicking.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/useWmsPicking.ts
similarity index 64%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/useWmsPicking.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/useWmsPicking.ts
index 8eeca71b..2f903458 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/picking/useWmsPicking.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/useWmsPicking.ts
@@ -1,4 +1,4 @@
-import { computed, onMounted, ref, watch } from 'vue'
+import { computed, inject, onMounted, ref, watch } from 'vue'
import { useMutation, useQuery } from '@tanstack/vue-query'
import type {
KbxBarcodeEvent,
@@ -20,19 +20,24 @@ import {
import { kbxTelemetry, startKbxTask } from '../../../telemetry/kbxTelemetryClient'
import { pickingScreen } from './picking.definition'
import { queuePickingScan, readPickingRetryQueue, removePickingScan } from './wmsRetryQueue'
+import { KbxScreenPreferenceScopeKey } from '../../../preferences/screenPreferenceStore'
function newIdempotencyKey(taskId: string) {
return `${taskId}:${crypto.randomUUID()}`
}
+type ScopedScanMutation = { command: KbxWmsScanCommand; scope: string }
+
export function useWmsPicking(taskId: string) {
const { online } = useKbxNetworkState()
+ const retryScope = inject(KbxScreenPreferenceScopeKey, ref(''))
const task = ref(null)
const message = ref('')
const pendingCommands = ref(0)
const syncing = ref(false)
const exceptionOpen = ref(false)
const quantityOpen = ref(false)
+ const lastConfirmedScan = ref<{ barcode:string; confirmedAt:string } | null>(null)
let taskTelemetry:ReturnType|undefined
const query = useQuery({
@@ -60,30 +65,42 @@ export function useWmsPicking(taskId: string) {
message.value = result.message ?? '피킹을 시작합니다.'
playKbxWmsFeedback('neutral')
},
+ onError(error) {
+ message.value = isKbxProblem(error) ? error.title : '작업을 시작하지 못했습니다.'
+ playKbxWmsFeedback('error')
+ void query.refetch()
+ },
})
const scanMutation = useMutation({
- mutationFn: (command: KbxWmsScanCommand) => scanPickingBarcode(command),
- onSuccess(result, command) {
- removePickingScan(command.idempotencyKey)
- pendingCommands.value = readPickingRetryQueue().filter(x => x.command.taskId === taskId).length
+ mutationFn: ({ command }: ScopedScanMutation) => scanPickingBarcode(command),
+ onSuccess(result, input) {
+ removePickingScan(input.command.idempotencyKey, input.scope)
+ if (input.scope !== retryScope.value) return
+ pendingCommands.value = readPickingRetryQueue(input.scope).filter(x => x.command.taskId === taskId).length
task.value = result.task
message.value = result.message
+ lastConfirmedScan.value = { barcode: input.command.barcode, confirmedAt: new Date().toISOString() }
playKbxWmsFeedback(result.feedback)
if(result.task.stage==='completed'){taskTelemetry?.complete('success');taskTelemetry=undefined}
},
- onError(error, command) {
+ onError(error, input) {
+ const sameScope = input.scope === retryScope.value
// 4xx is an authoritative server rejection. Only network/5xx ambiguity is safe-retried.
if (isKbxProblem(error) && !isRetryableKbxProblem(error)) {
- message.value = error.title ?? '현재 작업 상태를 다시 확인하세요.'
- playKbxWmsFeedback('error')
- void query.refetch()
+ if (sameScope) {
+ message.value = error.title ?? '현재 작업 상태를 다시 확인하세요.'
+ playKbxWmsFeedback('error')
+ void query.refetch()
+ }
return
}
- // The request may have committed even if the response was lost. Reuse the exact idempotency key.
- queuePickingScan(command)
- pendingCommands.value = readPickingRetryQueue().filter(x => x.command.taskId === taskId).length
+ // The request may have committed even if the response was lost. Preserve the scope that issued
+ // the command so a tenant/user switch cannot move an ambiguous scan into another operator queue.
+ queuePickingScan(input.command, input.scope)
+ if (!sameScope) return
+ pendingCommands.value = readPickingRetryQueue(input.scope).filter(x => x.command.taskId === taskId).length
message.value = '서버 확인이 필요합니다. 연결되면 같은 작업을 안전하게 재전송합니다.'
playKbxWmsFeedback('warning')
},
@@ -136,6 +153,11 @@ export function useWmsPicking(taskId: string) {
message.value = result.message ?? '예외를 등록했습니다.'
playKbxWmsFeedback('warning')
},
+ onError(error) {
+ message.value = isKbxProblem(error) ? error.title : '예외를 등록하지 못했습니다.'
+ playKbxWmsFeedback('error')
+ void query.refetch()
+ },
})
const scanEnabled = computed(() =>
@@ -150,11 +172,11 @@ export function useWmsPicking(taskId: string) {
const scanLabel = computed(() => {
switch (task.value?.stage) {
- case 'await-location': return 'LOCATION SCAN'
- case 'await-item': return 'ITEM SCAN'
- case 'processing': return 'PROCESSING'
- case 'completed': return 'COMPLETED'
- default: return 'SCAN READY'
+ case 'await-location': return '위치 스캔'
+ case 'await-item': return '상품 스캔'
+ case 'processing': return '서버 확인 중'
+ case 'completed': return '피킹 완료'
+ default: return '스캔 대기'
}
})
@@ -172,12 +194,14 @@ export function useWmsPicking(taskId: string) {
occurredAt: new Date(event.occurredAt).toISOString(),
}
- await scanMutation.mutateAsync(command).catch(() => undefined)
+ const scope = retryScope.value
+ await scanMutation.mutateAsync({ command, scope }).catch(() => undefined)
}
async function flushRetryQueue() {
if (!online.value || syncing.value) return
- const queued = readPickingRetryQueue()
+ const scope = retryScope.value
+ const queued = readPickingRetryQueue(scope)
.filter(x => x.command.taskId === taskId)
.sort((a, b) => a.queuedAt.localeCompare(b.queuedAt))
if (!queued.length) return
@@ -188,22 +212,28 @@ export function useWmsPicking(taskId: string) {
for (const item of queued) {
try {
const result = await scanPickingBarcode(item.command)
+ removePickingScan(item.command.idempotencyKey, scope)
+ if (scope !== retryScope.value) break
task.value = result.task
message.value = result.message
- removePickingScan(item.command.idempotencyKey)
+ lastConfirmedScan.value = { barcode: item.command.barcode, confirmedAt: new Date().toISOString() }
} catch (error) {
if (isKbxProblem(error) && !isRetryableKbxProblem(error)) {
- removePickingScan(item.command.idempotencyKey)
- message.value = error.title ?? '작업 상태가 변경되었습니다. 최신 상태를 확인하세요.'
- playKbxWmsFeedback('error')
- await query.refetch()
+ removePickingScan(item.command.idempotencyKey, scope)
+ if (scope === retryScope.value) {
+ message.value = error.title ?? '작업 상태가 변경되었습니다. 최신 상태를 확인하세요.'
+ playKbxWmsFeedback('error')
+ await query.refetch()
+ }
}
break
}
}
} finally {
- pendingCommands.value = readPickingRetryQueue().filter(x => x.command.taskId === taskId).length
+ const scopeChanged = scope !== retryScope.value
+ pendingCommands.value = readPickingRetryQueue(retryScope.value).filter(x => x.command.taskId === taskId).length
syncing.value = false
+ if (scopeChanged && online.value) void flushRetryQueue()
}
}
@@ -211,8 +241,22 @@ export function useWmsPicking(taskId: string) {
if (value) void flushRetryQueue()
})
+ watch(retryScope, (scope, previous) => {
+ if (scope === previous) return
+ // Shared-PDA context switch is a hard UX/security boundary. Never carry prior operator scan truth
+ // or overlay state into the next tenant/user scope, and only count/replay that new scope's queue.
+ taskTelemetry?.abandon('scope_changed')
+ taskTelemetry = undefined
+ lastConfirmedScan.value = null
+ exceptionOpen.value = false
+ quantityOpen.value = false
+ pendingCommands.value = readPickingRetryQueue(scope).filter(x => x.command.taskId === taskId).length
+ message.value = pendingCommands.value > 0 ? '현재 사용자 범위의 미확인 스캔을 서버와 다시 확인합니다.' : ''
+ if (online.value) void flushRetryQueue()
+ })
+
onMounted(() => {
- pendingCommands.value = readPickingRetryQueue().filter(x => x.command.taskId === taskId).length
+ pendingCommands.value = readPickingRetryQueue(retryScope.value).filter(x => x.command.taskId === taskId).length
if (online.value) void flushRetryQueue()
})
@@ -222,6 +266,7 @@ export function useWmsPicking(taskId: string) {
online,
pendingCommands,
syncing,
+ lastConfirmedScan,
scanEnabled,
scanLabel,
exceptionOpen,
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/wmsRetryQueue.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/wmsRetryQueue.ts
new file mode 100644
index 00000000..4a26fd0f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/picking/wmsRetryQueue.ts
@@ -0,0 +1,65 @@
+import type { KbxWmsScanCommand } from '@kbx/contracts'
+
+const STORAGE_PREFIX = 'kbx:wms:safe-retry:v2:'
+const LEGACY_STORAGE_KEY = 'kbx:wms:safe-retry:v1'
+const ANONYMOUS_SCOPE = 'anonymous:secure-default'
+const MAX_QUEUE_ITEMS = 32
+
+export interface QueuedPickingScan {
+ command: KbxWmsScanCommand
+ queuedAt: string
+}
+
+function scopeHash(scope:string){
+ // Storage keys must not expose tenant/user identifiers. This is partitioning, not cryptography.
+ let hash=2166136261
+ for(const ch of scope){hash^=ch.charCodeAt(0);hash=Math.imul(hash,16777619)}
+ return (hash>>>0).toString(36)
+}
+function store(scope:string){
+ // Authenticated tenant/user scope can safely survive reload/browser restart. Anonymous/default
+ // contexts stay session-only so a shared PDA cannot replay another operator's queue later.
+ return scope&&scope!==ANONYMOUS_SCOPE?localStorage:sessionStorage
+}
+function storageKey(scope:string){return `${STORAGE_PREFIX}${scopeHash(scope||ANONYMOUS_SCOPE)}`}
+function retireLegacyQueue(){
+ // v1 was an unscoped localStorage queue. Never replay it after the isolation upgrade.
+ try { localStorage.removeItem(LEGACY_STORAGE_KEY) } catch { /* storage can be unavailable */ }
+}
+function validItem(item:unknown): item is QueuedPickingScan {
+ if(!item||typeof item!=='object'||!('queuedAt' in item)||typeof item.queuedAt!=='string'||!('command' in item)||!item.command||typeof item.command!=='object')return false
+ const command=item.command
+ return 'idempotencyKey' in command&&typeof command.idempotencyKey==='string'&&'taskId' in command&&typeof command.taskId==='string'&&'barcode' in command&&typeof command.barcode==='string'
+}
+
+export function readPickingRetryQueue(scope=''): QueuedPickingScan[] {
+ retireLegacyQueue()
+ try {
+ const parsed = JSON.parse(store(scope).getItem(storageKey(scope)) ?? '[]') as unknown
+ if (!Array.isArray(parsed)) return []
+ return parsed.filter(validItem).slice(-MAX_QUEUE_ITEMS)
+ } catch {
+ return []
+ }
+}
+
+export function queuePickingScan(command: KbxWmsScanCommand, scope='') {
+ retireLegacyQueue()
+ // Safety-first queue: only unacknowledged commands are retained for replay.
+ // UI stops accepting the next authoritative scan until the server confirms this one.
+ const queue = readPickingRetryQueue(scope)
+ if (!queue.some(x => x.command.idempotencyKey === command.idempotencyKey)) {
+ queue.push({ command, queuedAt: new Date().toISOString() })
+ store(scope).setItem(storageKey(scope), JSON.stringify(queue.slice(-MAX_QUEUE_ITEMS)))
+ }
+}
+
+export function removePickingScan(idempotencyKey: string, scope='') {
+ const next = readPickingRetryQueue(scope).filter(x => x.command.idempotencyKey !== idempotencyKey)
+ store(scope).setItem(storageKey(scope), JSON.stringify(next))
+}
+
+export function clearPickingRetryQueue(scope='') {
+ store(scope).removeItem(storageKey(scope))
+ retireLegacyQueue()
+}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/WmsPutawayPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/WmsPutawayPage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/WmsPutawayPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/WmsPutawayPage.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/putaway.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/putaway.definition.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/putaway.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/putaway.definition.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/putaway/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/putaway/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/WmsReceivingPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/WmsReceivingPage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/WmsReceivingPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/WmsReceivingPage.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/receiving.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/receiving.definition.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/receiving.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/receiving.definition.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/receiving/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/receiving/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/shared/wmsFrontendCapability.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/shared/wmsFrontendCapability.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/shared/wmsFrontendCapability.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/shared/wmsFrontendCapability.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/WmsWorkPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/WmsWorkPage.vue
new file mode 100644
index 00000000..c72bab2b
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/WmsWorkPage.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+ 예외 작업은 행을 열어 원인을 먼저 확인하세요.
+
+
+
+
+ router.push(routeForWmsTask(row))"
+ />
+
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/routes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/routes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/routes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/routes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/work.definition.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/work.definition.ts
similarity index 90%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/work.definition.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/work.definition.ts
index 6e8e72fb..eb66545b 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/work.definition.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/work.definition.ts
@@ -1,4 +1,5 @@
import { defineKbxScreen, type KbxGridColumn, type KbxSearchField } from '@kbx/ui'
+import { kbxStatusCatalog } from '../../../registry/statusCatalog'
export interface WmsWorkRow {
taskId: string
@@ -15,7 +16,7 @@ export interface WmsWorkRow {
}
export const wmsWorkScreen = defineKbxScreen({
- id: 'WMS-WORK-001', version: '1.2.0', module: 'WMS', type: 'queue', templateCode:'T06', title: '물류 작업',
+ id: 'WMS-WORK-001', version: '1.4.0', module: 'WMS', type: 'queue', templateCode:'T06', title: '물류 작업',
description: '입고·적치·피킹·검수·실사 작업과 예외를 작업자 관점에서 조회합니다.',
helpKey: 'WMS-WORK-001', permissions: ['wms.work.read'], telemetry: { enabled: true },
commands: [
@@ -42,6 +43,6 @@ export const wmsWorkColumns: KbxGridColumn[] = [
{ field:'completedLines', header:'완료', type:'integer', width:80 },
{ field:'totalLines', header:'전체', type:'integer', width:80 },
{ field:'slaAt', header:'SLA', type:'datetime', width:155 },
- { field:'status', header:'상태', type:'status', width:100 },
+ { field:'status', header:'상태', type:'status', width:110, statusMap:{definitions:kbxStatusCatalog.wmsWork} },
{ field:'exceptionCount', header:'예외', type:'integer', width:80 },
]
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/workApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/workApi.ts
similarity index 77%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/workApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/workApi.ts
index 359c8248..f8955ff1 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/modules/wms/work/workApi.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/modules/wms/work/workApi.ts
@@ -2,6 +2,8 @@ import type { KbxIntegrationProblem } from '@kbx/contracts'
import type { WmsWorkRow } from './work.definition'
export interface WmsWorkSearch { taskType?: string; status?: string; owner?: string; keyword?: string }
+export interface WmsWorkSearchSummary { totalCount:number; readyCount:number; inProgressCount:number; blockedCount:number }
+export interface WmsWorkSearchResult { items:WmsWorkRow[]; totalCount:number; summary:WmsWorkSearchSummary }
const demoRows:WmsWorkRow[]=[
{taskId:'41000000-0000-4000-8000-000000000001',taskNo:'RCV-260811-001',taskType:'RECEIVING',waveNo:'ASN-260811-001',ownerName:'QA 사용자',progress:0,totalLines:3,completedLines:0,slaAt:'2026-08-11T23:40:00+09:00',status:'READY',exceptionCount:0},
@@ -11,24 +13,37 @@ const demoRows:WmsWorkRow[]=[
{taskId:'30000000-0000-4000-8000-000000000009',taskNo:'PICK-260811-009',taskType:'PICKING',waveNo:'W260811-03',ownerName:'QA 사용자',progress:42,totalLines:62,completedLines:26,slaAt:'2026-08-11T23:20:00+09:00',status:'BLOCKED',exceptionCount:2},
]
-function matches(row:WmsWorkRow, search:WmsWorkSearch){
+function matchesBase(row:WmsWorkRow, search:WmsWorkSearch){
if(search.taskType&&row.taskType!==search.taskType)return false
- if(search.status&&row.status!==search.status)return false
if(search.owner==='mine'&&row.ownerName!=='QA 사용자')return false
if(search.owner==='unassigned'&&row.ownerName)return false
const keyword=String(search.keyword??'').trim().toLocaleLowerCase()
if(keyword&&!`${row.taskNo} ${row.waveNo??''} ${row.ownerName??''} ${row.taskType}`.toLocaleLowerCase().includes(keyword))return false
return true
}
+function matches(row:WmsWorkRow, search:WmsWorkSearch){
+ return matchesBase(row,search)&&(!search.status||row.status===search.status)
+}
/**
* The work queue must never pretend that an unconnected production query returned an empty set.
* Demo mode provides browser-only fixtures so the FE workflow can be exercised without BE coupling.
*/
-export async function searchWmsWork(search: WmsWorkSearch): Promise {
+export async function searchWmsWork(search: WmsWorkSearch): Promise {
if(import.meta.env.VITE_KBX_DEMO_MODE==='true'){
await new Promise(resolve=>setTimeout(resolve,90))
- return demoRows.filter(row=>matches(row,search)).map(row=>({...row}))
+ const summaryRows=demoRows.filter(row=>matchesBase(row,search))
+ const items=demoRows.filter(row=>matches(row,search)).map(row=>({...row}))
+ return {
+ items,
+ totalCount:items.length,
+ summary:{
+ totalCount:summaryRows.length,
+ readyCount:summaryRows.filter(row=>row.status==='READY').length,
+ inProgressCount:summaryRows.filter(row=>row.status==='IN_PROGRESS').length,
+ blockedCount:summaryRows.filter(row=>row.status==='BLOCKED').length,
+ },
+ }
}
const problem:KbxIntegrationProblem={
type:'integration',
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/permissions/authorizationPolicy.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/permissions/authorizationPolicy.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/permissions/authorizationPolicy.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/permissions/authorizationPolicy.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/permissions/permissionContext.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/permissions/permissionContext.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/permissions/permissionContext.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/permissions/permissionContext.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/preferences/screenPreferenceStore.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/preferences/screenPreferenceStore.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/preferences/screenPreferenceStore.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/preferences/screenPreferenceStore.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/registry/screens.generated.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/screens.generated.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/registry/screens.generated.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/screens.generated.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/registry/screens.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/screens.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/registry/screens.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/screens.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/statusCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/statusCatalog.ts
new file mode 100644
index 00000000..8f1eaf6d
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/registry/statusCatalog.ts
@@ -0,0 +1,97 @@
+import type { KbxStatusDefinition } from '@kbx/contracts'
+
+type StatusSet = readonly KbxStatusDefinition[]
+
+/**
+ * Product-wide UI status dictionary.
+ * Domain/API raw value는 그대로 유지하고 Grid/Status renderer에서 Label/Semantic만 해석한다.
+ */
+export const kbxStatusCatalog = {
+ orderAllocation: [
+ { value:'정상', label:'정상', semantic:'ready' },
+ { value:'할당완료', label:'할당완료', semantic:'completed' },
+ { value:'부족', label:'재고 부족', semantic:'warning' },
+ { value:'미확인', label:'미확인', semantic:'pending' },
+ ],
+ orderLifecycle: [
+ { value:'NEW', label:'신규', semantic:'draft' },
+ { value:'DRAFT', label:'작성', semantic:'draft' },
+ { value:'CONFIRMED', label:'확정', semantic:'pending' },
+ { value:'ALLOCATED', label:'할당', semantic:'processing' },
+ { value:'PICKING', label:'피킹', semantic:'processing' },
+ { value:'CHECKED', label:'검수', semantic:'processing' },
+ { value:'SHIPPED', label:'출고완료', semantic:'completed' },
+ { value:'HOLD', label:'보류', semantic:'hold' },
+ { value:'ERROR', label:'오류', semantic:'error' },
+ ],
+ orderShipment: [
+ { value:'NEW', label:'신규', semantic:'pending' },
+ { value:'READY', label:'출고대기', semantic:'ready' },
+ { value:'CONFIRMED', label:'출고지시', semantic:'processing' },
+ { value:'HOLD', label:'보류', semantic:'hold' },
+ { value:'SHIPPED', label:'출고완료', semantic:'completed' },
+ { value:'ERROR', label:'오류', semantic:'error' },
+ ],
+ claim: [
+ { value:'REQUESTED', label:'접수', semantic:'pending' },
+ { value:'APPROVED', label:'승인', semantic:'processing' },
+ { value:'IN_PROGRESS', label:'처리중', semantic:'processing' },
+ { value:'HOLD', label:'보류', semantic:'hold' },
+ { value:'COMPLETED', label:'완료', semantic:'completed' },
+ ],
+ workSeverity: [
+ { value:'info', label:'정보', semantic:'info' },
+ { value:'warning', label:'주의', semantic:'warning' },
+ { value:'critical', label:'긴급', semantic:'error' },
+ ],
+ workItem: [
+ { value:'open', label:'미처리', semantic:'pending' },
+ { value:'claimed', label:'처리중', semantic:'processing' },
+ { value:'resolved', label:'해결', semantic:'completed' },
+ { value:'ignored', label:'무시', semantic:'disabled' },
+ ],
+ reconcile: [
+ { value:'matched', label:'정상', semantic:'completed' },
+ { value:'mismatch', label:'불일치', semantic:'warning' },
+ { value:'pending', label:'확인중', semantic:'pending' },
+ { value:'resolved', label:'해결', semantic:'completed' },
+ ],
+ wmsWork: [
+ { value:'READY', label:'대기', semantic:'ready' },
+ { value:'IN_PROGRESS', label:'진행', semantic:'processing' },
+ { value:'BLOCKED', label:'예외', semantic:'error' },
+ { value:'COMPLETED', label:'완료', semantic:'completed' },
+ { value:'CANCELLED', label:'취소', semantic:'cancelled' },
+ ],
+ experiment: [
+ { value:'draft', label:'초안', semantic:'draft' },
+ { value:'running', label:'진행', semantic:'processing' },
+ { value:'paused', label:'일시중지', semantic:'hold' },
+ { value:'rolled-back', label:'롤백', semantic:'cancelled' },
+ { value:'graduated', label:'승격', semantic:'completed' },
+ { value:'completed', label:'완료', semantic:'completed' },
+ ],
+ externalData: [
+ { value:'fresh', label:'최신', semantic:'ready' },
+ { value:'stale', label:'Stale', semantic:'warning' },
+ { value:'expired', label:'만료', semantic:'error' },
+ { value:'unavailable', label:'사용불가', semantic:'error' },
+ ],
+} as const satisfies Record
+
+
+export type KbxOrderLifecycleValue = typeof kbxStatusCatalog.orderLifecycle[number]['value']
+export type KbxOrderShipmentValue = typeof kbxStatusCatalog.orderShipment[number]['value']
+
+export function kbxStatusOptions(definitions: StatusSet, values?: readonly string[]) {
+ const allowed = values ? new Set(values) : null
+ return definitions
+ .filter(definition => !allowed || allowed.has(definition.value))
+ .map(definition => ({ value: definition.value, label: definition.label }))
+}
+
+
+export function normalizeKbxStatusValue(definitions: StatusSet, value: unknown): string | null {
+ const raw = typeof value === 'string' ? value.trim() : ''
+ return raw && definitions.some(definition => definition.value === raw) ? raw : null
+}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/router/appRoutes.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/router/appRoutes.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/router/appRoutes.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/router/appRoutes.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/KbxRuntimeShell.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/KbxRuntimeShell.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/KbxRuntimeShell.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/KbxRuntimeShell.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/runtimeApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/runtimeApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/runtimeApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/runtimeApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/useKbxRuntime.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/useKbxRuntime.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/runtime/useKbxRuntime.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/runtime/useKbxRuntime.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/KbxAppFrame.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/KbxAppFrame.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/KbxAppFrame.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/KbxAppFrame.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/navigationCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/navigationCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/navigationCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/navigationCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/useKbxWorkspaceBinding.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/useKbxWorkspaceBinding.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/useKbxWorkspaceBinding.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/useKbxWorkspaceBinding.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceLifecycleRegistry.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceLifecycleRegistry.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceLifecycleRegistry.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceLifecycleRegistry.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceSessionStore.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceSessionStore.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceSessionStore.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceSessionStore.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceStore.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceStore.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/shell/workspaceStore.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/shell/workspaceStore.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/styles/app.css b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/styles/app.css
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/styles/app.css
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/styles/app.css
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/telemetry/kbxTelemetryClient.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/telemetry/kbxTelemetryClient.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/telemetry/kbxTelemetryClient.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/telemetry/kbxTelemetryClient.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/aiAssistantApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/aiAssistantApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/aiAssistantApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/aiAssistantApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/suggestionApi.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/suggestionApi.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/suggestionApi.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/suggestionApi.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/useKbxScreenUtility.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/useKbxScreenUtility.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/utility/useKbxScreenUtility.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/utility/useKbxScreenUtility.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/validation/kbxFieldSchema.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/validation/kbxFieldSchema.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/src/validation/kbxFieldSchema.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/src/validation/kbxFieldSchema.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/tsconfig.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/tsconfig.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/tsconfig.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/tsconfig.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/vite.config.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/vite.config.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/apps/web/vite.config.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/apps/web/vite.config.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_001_oms_order_golden_screen.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_001_oms_order_golden_screen.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_001_oms_order_golden_screen.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_001_oms_order_golden_screen.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_002_wms_picking_golden_screen.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_002_wms_picking_golden_screen.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_002_wms_picking_golden_screen.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_002_wms_picking_golden_screen.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_003_erp_reference_projections.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_003_erp_reference_projections.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_003_erp_reference_projections.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_003_erp_reference_projections.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_004_kbx_excel_import.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_004_kbx_excel_import.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_004_kbx_excel_import.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_004_kbx_excel_import.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_005_kbx_operations_reconcile.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_005_kbx_operations_reconcile.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_005_kbx_operations_reconcile.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_005_kbx_operations_reconcile.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_006_kbx_experience_governance.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_006_kbx_experience_governance.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_006_kbx_experience_governance.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_006_kbx_experience_governance.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_007_process_coverage.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_007_process_coverage.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_007_process_coverage.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_007_process_coverage.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_008_kbx_runtime_operations.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_008_kbx_runtime_operations.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_008_kbx_runtime_operations.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_008_kbx_runtime_operations.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_009_kbx_api_contracts.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_009_kbx_api_contracts.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_009_kbx_api_contracts.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_009_kbx_api_contracts.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_010_kbx_authorization_sensitive_data.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_010_kbx_authorization_sensitive_data.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_010_kbx_authorization_sensitive_data.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_010_kbx_authorization_sensitive_data.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_011_kbx_ux_telemetry.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_011_kbx_ux_telemetry.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_011_kbx_ux_telemetry.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_011_kbx_ux_telemetry.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_012_kbx_experiment_rollout.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_012_kbx_experiment_rollout.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_012_kbx_experiment_rollout.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_012_kbx_experiment_rollout.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_013_kbx_integration_resilience.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_013_kbx_integration_resilience.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_013_kbx_integration_resilience.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_013_kbx_integration_resilience.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_014_kbx_external_data.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_014_kbx_external_data.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_014_kbx_external_data.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_014_kbx_external_data.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_015_fast_entry_master_detail.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_015_fast_entry_master_detail.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_015_fast_entry_master_detail.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_015_fast_entry_master_detail.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_016_record_lifecycle.sql b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_016_record_lifecycle.sql
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Database/Migrations/20260808_016_record_lifecycle.sql
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Database/Migrations/20260808_016_record_lifecycle.sql
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Ai/Ask/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Ai/Ask/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Ai/Ask/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Ai/Ask/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Assignments/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Assignments/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Assignments/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Assignments/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Overview/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Overview/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Overview/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Overview/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Rollback/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Rollback/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Rollback/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Rollback/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Rollout/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Rollout/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Experiments/Rollout/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Experiments/Rollout/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/ExternalData/Refresh/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/ExternalData/Refresh/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/ExternalData/Refresh/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/ExternalData/Refresh/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/ExternalData/Status/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/ExternalData/Status/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/ExternalData/Status/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/ExternalData/Status/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/CommitEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/CommitEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/CommitEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/CommitEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/CreateSessionEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/CreateSessionEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/CreateSessionEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/CreateSessionEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/ErrorWorkbookEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/ErrorWorkbookEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/ErrorWorkbookEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/ErrorWorkbookEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/GetSessionEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/GetSessionEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/GetSessionEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/GetSessionEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/SaveMappingEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/SaveMappingEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/SaveMappingEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/SaveMappingEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/SaveNamedMappingEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/SaveNamedMappingEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/SaveNamedMappingEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/SaveNamedMappingEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/TemplateEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/TemplateEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/TemplateEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/TemplateEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/ValidateEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/ValidateEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Endpoints/ValidateEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Endpoints/ValidateEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Jobs/CommitImportJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Jobs/CommitImportJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Jobs/CommitImportJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Jobs/CommitImportJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Jobs/ValidateImportJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Jobs/ValidateImportJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Imports/Jobs/ValidateImportJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Imports/Jobs/ValidateImportJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Integrations/Attempts/Get/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Integrations/Attempts/Get/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Integrations/Attempts/Get/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Integrations/Attempts/Get/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Integrations/Attempts/Retry/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Integrations/Attempts/Retry/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Integrations/Attempts/Retry/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Integrations/Attempts/Retry/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Claim/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Claim/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Claim/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Claim/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Resolve/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Resolve/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Resolve/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Resolve/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Retry/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Retry/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Retry/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Retry/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Operations/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Operations/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Reconcile/CreateExceptions/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Reconcile/CreateExceptions/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Reconcile/CreateExceptions/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Reconcile/CreateExceptions/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Reconcile/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Reconcile/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Reconcile/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Reconcile/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Health/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Health/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Health/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Health/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Notifications/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Notifications/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Notifications/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Notifications/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Operations/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Operations/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Runtime/Operations/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Runtime/Operations/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Suggestions/Submit/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Suggestions/Submit/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/Suggestions/Submit/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/Suggestions/Submit/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/UxTelemetry/Ingest/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/UxTelemetry/Ingest/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/UxTelemetry/Ingest/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/UxTelemetry/Ingest/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/UxTelemetry/Metrics/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/UxTelemetry/Metrics/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/Common/UxTelemetry/Metrics/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/Common/UxTelemetry/Metrics/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/HistoryEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/HistoryEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/HistoryEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/HistoryEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/LocationsEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/LocationsEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Inventory/Search/LocationsEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Inventory/Search/LocationsEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/InventoryMove/Workflow/InventoryMoveWorkflow.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/InventoryMove/Workflow/InventoryMoveWorkflow.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/InventoryMove/Workflow/InventoryMoveWorkflow.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/InventoryMove/Workflow/InventoryMoveWorkflow.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/ItemPrices/BulkSave/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/ItemPrices/BulkSave/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/ItemPrices/BulkSave/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/ItemPrices/BulkSave/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Audit/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Audit/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Audit/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Audit/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Deactivate/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Deactivate/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Deactivate/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Deactivate/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Get/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Get/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Get/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Get/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/CreateEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/CreateEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/CreateEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/CreateEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/Handler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/Handler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/Handler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/Handler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/Models.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/Models.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/Models.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/Models.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/UpdateEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/UpdateEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Save/UpdateEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Save/UpdateEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Handler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Handler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Handler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Handler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Request.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Request.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Request.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Request.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Response.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Response.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Items/Search/Response.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Items/Search/Response.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Purchases/Workflow/PurchaseWorkflow.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Purchases/Workflow/PurchaseWorkflow.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/ERP/Purchases/Workflow/PurchaseWorkflow.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/ERP/Purchases/Workflow/PurchaseWorkflow.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Claims/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Claims/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Claims/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Claims/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Claims/Workflow/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Claims/Workflow/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Claims/Workflow/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Claims/Workflow/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/ResolveByCodeEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/ResolveByCodeEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/ResolveByCodeEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/ResolveByCodeEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/ResolveEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/ResolveEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Customers/ResolveEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Customers/ResolveEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/ResolveByCodeEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/ResolveByCodeEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/ResolveByCodeEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/ResolveByCodeEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/ResolveEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/ResolveEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Items/ResolveEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Items/ResolveEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/ResolveByCodeEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/ResolveByCodeEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/ResolveByCodeEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/ResolveByCodeEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/ResolveEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/ResolveEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Lookups/Warehouses/ResolveEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Lookups/Warehouses/ResolveEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Audit/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Audit/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Audit/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Audit/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Confirm/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Confirm/Endpoint.cs
similarity index 51%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Confirm/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Confirm/Endpoint.cs
index 7814e969..a00366fe 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Confirm/Endpoint.cs
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Confirm/Endpoint.cs
@@ -1,4 +1,4 @@
-using System.Text.Json;using Dapper;using FastEndpoints;using Npgsql;using Shared.Problems;
+using System.Text.Json;using Modules.OMS.Orders;using Dapper;using FastEndpoints;using Npgsql;using Shared.Problems;
namespace Modules.OMS.Orders.Confirm;
public sealed record Request(long Version);public sealed record Response(Guid OrderId,long Version,string Status);
-public sealed class Endpoint(NpgsqlDataSource dataSource):Endpoint{public override void Configure(){Post("/api/oms/orders/{id}/confirm");Permissions("oms.order.confirm");}public override async Task HandleAsync(Request req,CancellationToken ct){var id=Route("id");var key=HttpContext.Request.Headers["Idempotency-Key"].FirstOrDefault();if(string.IsNullOrWhiteSpace(key)){await Send.ResponseAsync(KbxValidationProblem.Create(new(null,null,"IDEMPOTENCY_KEY_REQUIRED","안전한 재처리를 위해 Idempotency-Key가 필요합니다.")),400,cancellation:ct);return;}await using var c=await dataSource.OpenConnectionAsync(ct);await using var tx=await c.BeginTransactionAsync(ct);var replay=await c.QuerySingleOrDefaultAsync(new CommandDefinition("select response_json::text from kbx.command_receipts where operation_id=@OperationId and idempotency_key=@Key",new{OperationId="oms.orders.confirm",Key=key},tx,cancellationToken:ct));if(replay is not null){await tx.RollbackAsync(ct);await Send.OkAsync(JsonSerializer.Deserialize(replay)!,ct);return;}var current=await c.QuerySingleOrDefaultAsync<(long Version,string Status)>(new CommandDefinition("select version as Version,status as Status from oms.orders where id=@Id for update",new{Id=id},tx,cancellationToken:ct));if(current.Status is null){await Send.ResponseAsync(KbxNotFoundProblem.Create("ORDER_NOT_FOUND","주문을 찾을 수 없습니다."),404,cancellation:ct);return;}if(current.Version!=req.Version){await Send.ResponseAsync(KbxConflictProblem.Version(current.Version),409,cancellation:ct);return;}if(current.Status!="DRAFT"){await Send.ResponseAsync(KbxBusinessProblem.Create("ORDER_NOT_CONFIRMABLE","주문을 확정할 수 없습니다.","작성 상태의 주문만 확정할 수 있습니다."),409,cancellation:ct);return;}var next=current.Version+1;var actor=User.Identity?.Name??"unknown";await c.ExecuteAsync(new CommandDefinition(@"update oms.orders set status='CONFIRMED',version=@Version,updated_at=now(),updated_by=@Actor where id=@Id;insert into audit.entries(id,aggregate_type,aggregate_id,action,actor,occurred_at,data) values(@AuditId,'Order',@Id,'ORDER_CONFIRMED',@Actor,now(),jsonb_build_object('version',@Version,'changes',jsonb_build_array(jsonb_build_object('field','status','label','상태','before','작성','after','확정'))));insert into integration.outbox(id,event_type,aggregate_id,payload,occurred_at,status) values(@EventId,'OrderConfirmed',@Id,jsonb_build_object('orderId',@Id,'version',@Version),now(),'PENDING');",new{Id=id,Version=next,Actor=actor,AuditId=Guid.NewGuid(),EventId=Guid.NewGuid()},tx,cancellationToken:ct));var response=new Response(id,next,"확정");await c.ExecuteAsync(new CommandDefinition("insert into kbx.command_receipts(operation_id,idempotency_key,response_json) values(@OperationId,@Key,cast(@ResponseJson as jsonb))",new{OperationId="oms.orders.confirm",Key=key,ResponseJson=JsonSerializer.Serialize(response)},tx,cancellationToken:ct));await tx.CommitAsync(ct);await Send.OkAsync(response,ct);}}
+public sealed class Endpoint(NpgsqlDataSource dataSource):Endpoint{public override void Configure(){Post("/api/oms/orders/{id}/confirm");Permissions("oms.order.confirm");}public override async Task HandleAsync(Request req,CancellationToken ct){var id=Route("id");var key=HttpContext.Request.Headers["Idempotency-Key"].FirstOrDefault();if(string.IsNullOrWhiteSpace(key)){await Send.ResponseAsync(KbxValidationProblem.Create(new(null,null,"IDEMPOTENCY_KEY_REQUIRED","안전한 재처리를 위해 Idempotency-Key가 필요합니다.")),400,cancellation:ct);return;}await using var c=await dataSource.OpenConnectionAsync(ct);await using var tx=await c.BeginTransactionAsync(ct);var replay=await c.QuerySingleOrDefaultAsync(new CommandDefinition("select response_json::text from kbx.command_receipts where operation_id=@OperationId and idempotency_key=@Key",new{OperationId="oms.orders.confirm",Key=key},tx,cancellationToken:ct));if(replay is not null){await tx.RollbackAsync(ct);await Send.OkAsync(JsonSerializer.Deserialize(replay)!,ct);return;}var current=await c.QuerySingleOrDefaultAsync<(long Version,string Status)>(new CommandDefinition("select version as Version,status as Status from oms.orders where id=@Id for update",new{Id=id},tx,cancellationToken:ct));if(current.Status is null){await Send.ResponseAsync(KbxNotFoundProblem.Create("ORDER_NOT_FOUND","주문을 찾을 수 없습니다."),404,cancellation:ct);return;}if(current.Version!=req.Version){await Send.ResponseAsync(KbxConflictProblem.Version(current.Version),409,cancellation:ct);return;}if(current.Status!=OrderLifecycleStatus.Draft){await Send.ResponseAsync(KbxBusinessProblem.Create("ORDER_NOT_CONFIRMABLE","주문을 확정할 수 없습니다.","작성 상태의 주문만 확정할 수 있습니다."),409,cancellation:ct);return;}var next=current.Version+1;var actor=User.Identity?.Name??"unknown";await c.ExecuteAsync(new CommandDefinition(@"update oms.orders set status=@ConfirmedStatus,version=@Version,updated_at=now(),updated_by=@Actor where id=@Id;insert into audit.entries(id,aggregate_type,aggregate_id,action,actor,occurred_at,data) values(@AuditId,'Order',@Id,'ORDER_CONFIRMED',@Actor,now(),jsonb_build_object('version',@Version,'changes',jsonb_build_array(jsonb_build_object('field','status','label','상태','before','작성','after','확정'))));insert into integration.outbox(id,event_type,aggregate_id,payload,occurred_at,status) values(@EventId,'OrderConfirmed',@Id,jsonb_build_object('orderId',@Id,'version',@Version),now(),'PENDING');",new{Id=id,Version=next,Actor=actor,AuditId=Guid.NewGuid(),EventId=Guid.NewGuid(),ConfirmedStatus=OrderLifecycleStatus.Confirmed},tx,cancellationToken:ct));var response=new Response(id,next,OrderLifecycleStatus.Confirmed);await c.ExecuteAsync(new CommandDefinition("insert into kbx.command_receipts(operation_id,idempotency_key,response_json) values(@OperationId,@Key,cast(@ResponseJson as jsonb))",new{OperationId="oms.orders.confirm",Key=key,ResponseJson=JsonSerializer.Serialize(response)},tx,cancellationToken:ct));await tx.CommitAsync(ct);await Send.OkAsync(response,ct);}}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Get/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Get/Endpoint.cs
similarity index 76%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Get/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Get/Endpoint.cs
index b3882f0d..2ba80eb4 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Get/Endpoint.cs
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Get/Endpoint.cs
@@ -2,4 +2,4 @@ using Dapper;using FastEndpoints;using Npgsql;using Shared.Problems;
namespace Modules.OMS.Orders.Get;
public sealed record OrderLine(Guid Id,string ClientId,Guid ItemId,string ItemCode,string ItemName,decimal OrderQty,decimal UnitPrice,decimal Amount,string Remark);
public sealed record Response(Guid OrderId,string OrderNo,long Version,string Status,DateOnly OrderDate,Guid CustomerId,Guid WarehouseId,string ReceiverName,string Phone,string? PostalCode,string Address1,string? Address2,IReadOnlyList Lines);
-public sealed class Endpoint(NpgsqlDataSource dataSource):EndpointWithoutRequest{public override void Configure(){Get("/api/oms/orders/{id}");Permissions("oms.order.read");}public override async Task HandleAsync(CancellationToken ct){var id=Route("id");await using var c=await dataSource.OpenConnectionAsync(ct);var h=await c.QuerySingleOrDefaultAsync(new CommandDefinition("select id as OrderId,order_no as OrderNo,version,status,order_date as OrderDate,customer_id as CustomerId,warehouse_id as WarehouseId,receiver_name as ReceiverName,phone,postal_code as PostalCode,address1,address2 from oms.orders where id=@Id",new{Id=id},cancellationToken:ct));if(h is null){await Send.ResponseAsync(KbxNotFoundProblem.Create("ORDER_NOT_FOUND","주문을 찾을 수 없습니다."),404,cancellation:ct);return;}var lines=(await c.QueryAsync(new CommandDefinition(@"select l.id,l.id::text as ClientId,l.item_id as ItemId,i.code as ItemCode,i.name as ItemName,l.quantity as OrderQty,l.unit_price as UnitPrice,l.amount,coalesce(l.remark,'') as Remark from oms.order_lines l join catalog.items i on i.id=l.item_id where l.order_id=@Id order by l.line_no",new{Id=id},cancellationToken:ct))).AsList();string display=(string)h.status switch{"DRAFT"=>"작성","CONFIRMED"=>"확정","ALLOCATED"=>"할당","PICKING"=>"피킹","CHECKED"=>"검수","SHIPPED"=>"출고완료",_=>(string)h.status};await Send.OkAsync(new((Guid)h.orderid,(string)h.orderno,(long)h.version,display,(DateOnly)h.orderdate,(Guid)h.customerid,(Guid)h.warehouseid,(string)h.receivername,(string)h.phone,(string?)h.postalcode,(string)h.address1,(string?)h.address2,lines),ct);}}
+public sealed class Endpoint(NpgsqlDataSource dataSource):EndpointWithoutRequest{public override void Configure(){Get("/api/oms/orders/{id}");Permissions("oms.order.read");}public override async Task HandleAsync(CancellationToken ct){var id=Route("id");await using var c=await dataSource.OpenConnectionAsync(ct);var h=await c.QuerySingleOrDefaultAsync(new CommandDefinition("select id as OrderId,order_no as OrderNo,version,status,order_date as OrderDate,customer_id as CustomerId,warehouse_id as WarehouseId,receiver_name as ReceiverName,phone,postal_code as PostalCode,address1,address2 from oms.orders where id=@Id",new{Id=id},cancellationToken:ct));if(h is null){await Send.ResponseAsync(KbxNotFoundProblem.Create("ORDER_NOT_FOUND","주문을 찾을 수 없습니다."),404,cancellation:ct);return;}var lines=(await c.QueryAsync(new CommandDefinition(@"select l.id,l.id::text as ClientId,l.item_id as ItemId,i.code as ItemCode,i.name as ItemName,l.quantity as OrderQty,l.unit_price as UnitPrice,l.amount,coalesce(l.remark,'') as Remark from oms.order_lines l join catalog.items i on i.id=l.item_id where l.order_id=@Id order by l.line_no",new{Id=id},cancellationToken:ct))).AsList();await Send.OkAsync(new((Guid)h.orderid,(string)h.orderno,(long)h.version,(string)h.status,(DateOnly)h.orderdate,(Guid)h.customerid,(Guid)h.warehouseid,(string)h.receivername,(string)h.phone,(string?)h.postalcode,(string)h.address1,(string?)h.address2,lines),ct);}}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Import/OrderImportDefinition.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Import/OrderImportDefinition.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Import/OrderImportDefinition.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Import/OrderImportDefinition.cs
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderLifecycleStatus.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderLifecycleStatus.cs
new file mode 100644
index 00000000..98a62fc5
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderLifecycleStatus.cs
@@ -0,0 +1,15 @@
+namespace Modules.OMS.Orders;
+
+///
+/// Canonical OMS order aggregate lifecycle codes.
+/// API responses expose these values verbatim; UI labels are resolved by the FE status catalog.
+///
+public static class OrderLifecycleStatus
+{
+ public const string Draft = "DRAFT";
+ public const string Confirmed = "CONFIRMED";
+ public const string Allocated = "ALLOCATED";
+ public const string Picking = "PICKING";
+ public const string Checked = "CHECKED";
+ public const string Shipped = "SHIPPED";
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderShipmentStatus.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderShipmentStatus.cs
new file mode 100644
index 00000000..2d7cea74
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/OrderShipmentStatus.cs
@@ -0,0 +1,11 @@
+namespace Modules.OMS.Orders;
+
+public static class OrderShipmentStatus
+{
+ public const string New = "NEW";
+ public const string Ready = "READY";
+ public const string Confirmed = "CONFIRMED";
+ public const string Hold = "HOLD";
+ public const string Shipped = "SHIPPED";
+ public const string Error = "ERROR";
+}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Handler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Handler.cs
similarity index 95%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Handler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Handler.cs
index 59aa64f5..d6799e33 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Handler.cs
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Handler.cs
@@ -1,6 +1,7 @@
using System.Data;
using System.Security.Claims;
using Dapper;
+using Modules.OMS.Orders;
using Npgsql;
using Shared.Problems;
@@ -67,8 +68,8 @@ public sealed class RegisterOrderHandler(NpgsqlDataSource dataSource)
orderNo = $"ORD-{DateTime.UtcNow:yyyyMMdd}-{Guid.NewGuid().ToString("N")[..8].ToUpperInvariant()}";
await connection.ExecuteAsync(new CommandDefinition(@"
insert into oms.orders(id, order_no, order_date, customer_id, warehouse_id, receiver_name, phone, postal_code, address1, address2, status, version, created_at, created_by)
-values (@Id, @OrderNo, @OrderDate, @CustomerId, @WarehouseId, @ReceiverName, @Phone, @PostalCode, @Address1, @Address2, 'DRAFT', 1, now(), @Actor);",
- new { Id = orderId, OrderNo = orderNo, request.OrderDate, request.CustomerId, request.WarehouseId, request.ReceiverName, request.Phone, request.PostalCode, request.Address1, request.Address2, Actor = actor }, tx, cancellationToken: ct));
+values (@Id, @OrderNo, @OrderDate, @CustomerId, @WarehouseId, @ReceiverName, @Phone, @PostalCode, @Address1, @Address2, @InitialStatus, 1, now(), @Actor);",
+ new { Id = orderId, OrderNo = orderNo, request.OrderDate, request.CustomerId, request.WarehouseId, request.ReceiverName, request.Phone, request.PostalCode, request.Address1, request.Address2, Actor = actor, InitialStatus = OrderLifecycleStatus.Draft }, tx, cancellationToken: ct));
}
else
{
@@ -79,7 +80,7 @@ values (@Id, @OrderNo, @OrderDate, @CustomerId, @WarehouseId, @ReceiverName, @Ph
return RegisterOrderResult.Fail(KbxBusinessProblem.Create("ORDER_NOT_FOUND", "주문을 찾을 수 없습니다."));
if (current.Version != request.Version)
return RegisterOrderResult.Fail(KbxConflictProblem.Version(current.Version));
- if (current.Status != "DRAFT")
+ if (current.Status != OrderLifecycleStatus.Draft)
return RegisterOrderResult.Fail(KbxBusinessProblem.Create("ORDER_NOT_EDITABLE", "주문을 수정할 수 없습니다.", "작성 상태의 주문만 수정할 수 있습니다."));
orderNo = current.OrderNo;
@@ -114,6 +115,6 @@ values (@Id, 'OrderSaved', @OrderId, jsonb_build_object('orderId', @OrderId, 've
new { Id = Guid.NewGuid(), OrderId = orderId, Version = nextVersion }, tx, cancellationToken: ct));
await tx.CommitAsync(ct);
- return RegisterOrderResult.Ok(new(orderId, orderNo, nextVersion, "작성"));
+ return RegisterOrderResult.Ok(new(orderId, orderNo, nextVersion, OrderLifecycleStatus.Draft));
}
}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Request.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Request.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Request.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Request.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Response.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Response.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Response.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Response.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/UpdateEndpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/UpdateEndpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/UpdateEndpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/UpdateEndpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Validator.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Validator.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Register/Validator.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Register/Validator.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Handler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Handler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Handler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Handler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Request.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Request.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Request.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Request.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Response.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Response.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Search/Response.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Search/Response.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Ship/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Ship/Endpoint.cs
similarity index 91%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Ship/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Ship/Endpoint.cs
index e9db47e4..efce2288 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/OMS/Orders/Ship/Endpoint.cs
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/OMS/Orders/Ship/Endpoint.cs
@@ -1,6 +1,7 @@
using System.Text.Json;
using Dapper;
using FastEndpoints;
+using Modules.OMS.Orders;
using Npgsql;
using Shared.Problems;
@@ -87,6 +88,8 @@ public sealed class Endpoint(NpgsqlDataSource dataSource)
Keyword = string.IsNullOrWhiteSpace(filter?.Keyword) ? null : filter!.Keyword!.Trim(),
ExceptionOnly = filter?.ExceptionOnly ?? false,
ExcludedIds = (req.ExcludedIds ?? Array.Empty()).ToArray(),
+ RequiredOrderStatus = OrderLifecycleStatus.Confirmed,
+ RequiredShipmentStatus = OrderShipmentStatus.Ready,
};
var result = await connection.QuerySingleAsync(new CommandDefinition($"""
@@ -94,11 +97,14 @@ public sealed class Endpoint(NpgsqlDataSource dataSource)
{targetSql}
),
accepted as materialized (
- update oms.orders
- set status='CONFIRMED', version=version+1, updated_at=now(), updated_by='web'
- where id in (select id from target)
- and status in ('NEW','DRAFT','READY')
- returning id
+ update oms.orders o
+ set version=version+1, updated_at=now(), updated_by='web'
+ from target t
+ join oms_order_search_projection p on p.id=t.id
+ where o.id=t.id
+ and o.status=@RequiredOrderStatus
+ and p.shipment_status=@RequiredShipmentStatus
+ returning o.id
),
audit_insert as (
insert into audit.entries(id,aggregate_type,aggregate_id,action,actor,occurred_at,data)
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Exceptions/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Exceptions/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Exceptions/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Exceptions/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/GetTask/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/GetTask/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/GetTask/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/GetTask/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Handler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Handler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Handler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Handler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Request.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Request.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Scan/Request.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Scan/Request.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/SetQuantity/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/SetQuantity/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/SetQuantity/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/SetQuantity/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/Models.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/Models.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/Models.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/Models.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingScanStateMachine.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingScanStateMachine.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingScanStateMachine.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingScanStateMachine.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingTaskQueries.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingTaskQueries.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingTaskQueries.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingTaskQueries.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingTransitions.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingTransitions.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Shared/PickingTransitions.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Shared/PickingTransitions.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Start/Endpoint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Start/Endpoint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Start/Endpoint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Start/Endpoint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Tests/PickingScanStateMachineTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Tests/PickingScanStateMachineTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Modules/WMS/Picking/Tests/PickingScanStateMachineTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Modules/WMS/Picking/Tests/PickingScanStateMachineTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/Generated/KbxPermissions.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/Generated/KbxPermissions.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/Generated/KbxPermissions.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/Generated/KbxPermissions.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/KbxAuthorizationContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/KbxAuthorizationContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/KbxAuthorizationContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/KbxAuthorizationContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/KbxSensitiveDataPolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/KbxSensitiveDataPolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/KbxSensitiveDataPolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/KbxSensitiveDataPolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/SensitiveDataDisclosureAuditWriter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/SensitiveDataDisclosureAuditWriter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Authorization/SensitiveDataDisclosureAuditWriter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Authorization/SensitiveDataDisclosureAuditWriter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/Generated/KbxConfigurationCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/Generated/KbxConfigurationCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/Generated/KbxConfigurationCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/Generated/KbxConfigurationCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationFingerprint.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationFingerprint.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationFingerprint.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationFingerprint.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationStartupValidator.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationStartupValidator.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/KbxConfigurationStartupValidator.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/KbxConfigurationStartupValidator.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/Tests/KbxConfigurationContractTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/Tests/KbxConfigurationContractTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Configuration/Tests/KbxConfigurationContractTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Configuration/Tests/KbxConfigurationContractTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Generated/KbxApiCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Generated/KbxApiCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Generated/KbxApiCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Generated/KbxApiCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Generated/KbxFieldCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Generated/KbxFieldCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Generated/KbxFieldCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Generated/KbxFieldCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxApiContractSwaggerExtensions.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxApiContractSwaggerExtensions.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxApiContractSwaggerExtensions.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxApiContractSwaggerExtensions.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldContractSwaggerExtensions.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldContractSwaggerExtensions.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldContractSwaggerExtensions.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldContractSwaggerExtensions.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldKeyAttribute.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldKeyAttribute.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldKeyAttribute.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldKeyAttribute.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldOpenApiSchemaFilter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldOpenApiSchemaFilter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/KbxFieldOpenApiSchemaFilter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/KbxFieldOpenApiSchemaFilter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Tests/KbxApiCatalogTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Tests/KbxApiCatalogTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Tests/KbxApiCatalogTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Tests/KbxApiCatalogTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Tests/KbxFieldCatalogTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Tests/KbxFieldCatalogTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Contracts/Tests/KbxFieldCatalogTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Contracts/Tests/KbxFieldCatalogTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ClosedXmlWorkbookService.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ClosedXmlWorkbookService.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ClosedXmlWorkbookService.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ClosedXmlWorkbookService.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/IImportDefinition.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/IImportDefinition.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/IImportDefinition.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/IImportDefinition.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportFieldDefinitionFactory.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportFieldDefinitionFactory.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportFieldDefinitionFactory.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportFieldDefinitionFactory.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportIdentity.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportIdentity.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportIdentity.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportIdentity.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportMappingEngine.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportMappingEngine.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportMappingEngine.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportMappingEngine.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportMappingSuggestions.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportMappingSuggestions.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportMappingSuggestions.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportMappingSuggestions.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportProgressHub.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportProgressHub.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportProgressHub.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportProgressHub.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/ImportRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/ImportRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/KbxExcelImportRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/KbxExcelImportRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/KbxExcelImportRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/KbxExcelImportRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/PurgeExpiredImportsJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/PurgeExpiredImportsJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/PurgeExpiredImportsJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/PurgeExpiredImportsJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/Tests/ImportMappingEngineTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/Tests/ImportMappingEngineTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/Tests/ImportMappingEngineTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/Tests/ImportMappingEngineTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/Tests/XlsxSafetyInspectorTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/Tests/XlsxSafetyInspectorTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/Tests/XlsxSafetyInspectorTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/Tests/XlsxSafetyInspectorTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/XlsxSafetyInspector.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/XlsxSafetyInspector.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Excel/XlsxSafetyInspector.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Excel/XlsxSafetyInspector.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/IKbxAiAssistantProvider.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/IKbxAiAssistantProvider.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/IKbxAiAssistantProvider.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/IKbxAiAssistantProvider.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/KbxExperienceContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/KbxExperienceContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/KbxExperienceContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/KbxExperienceContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/KbxExperienceRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/KbxExperienceRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experience/KbxExperienceRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experience/KbxExperienceRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/Generated/KbxExperimentCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/Generated/KbxExperimentCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/Generated/KbxExperimentCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/Generated/KbxExperimentCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentAssignmentPolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentAssignmentPolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentAssignmentPolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentAssignmentPolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentAssignmentService.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentAssignmentService.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentAssignmentService.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentAssignmentService.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentGuardrailJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentGuardrailJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentGuardrailJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentGuardrailJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentOverviewQuery.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentOverviewQuery.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentOverviewQuery.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentOverviewQuery.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentRealtime.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentRealtime.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentRealtime.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentRealtime.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentRuntimeStore.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentRuntimeStore.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/KbxExperimentRuntimeStore.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/KbxExperimentRuntimeStore.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/Tests/KbxExperimentContractTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/Tests/KbxExperimentContractTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Experiments/Tests/KbxExperimentContractTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Experiments/Tests/KbxExperimentContractTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/Generated/KbxExternalDataCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/Generated/KbxExternalDataCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/Generated/KbxExternalDataCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/Generated/KbxExternalDataCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataCacheCoordinator.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataCacheCoordinator.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataCacheCoordinator.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataCacheCoordinator.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataFreshnessPolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataFreshnessPolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataFreshnessPolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataFreshnessPolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataProvenanceFactory.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataProvenanceFactory.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataProvenanceFactory.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataProvenanceFactory.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRefreshScheduler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRefreshScheduler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRefreshScheduler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRefreshScheduler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRetentionJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRetentionJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataRetentionJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KbxExternalDataRetentionJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KisCurrentPriceNormalizer.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KisCurrentPriceNormalizer.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KisCurrentPriceNormalizer.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KisCurrentPriceNormalizer.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KrxApprovedServiceNormalizerRegistry.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KrxApprovedServiceNormalizerRegistry.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KrxApprovedServiceNormalizerRegistry.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/KrxApprovedServiceNormalizerRegistry.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/OpenDartCompanyProfileNormalizer.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/OpenDartCompanyProfileNormalizer.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/OpenDartCompanyProfileNormalizer.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/OpenDartCompanyProfileNormalizer.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/OpenDartDisclosureListNormalizer.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/OpenDartDisclosureListNormalizer.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/OpenDartDisclosureListNormalizer.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/ExternalData/OpenDartDisclosureListNormalizer.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Generated/KbxIntegrationCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Generated/KbxIntegrationCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Generated/KbxIntegrationCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Generated/KbxIntegrationCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxDurableIntegrationRetryPlanner.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxDurableIntegrationRetryPlanner.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxDurableIntegrationRetryPlanner.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxDurableIntegrationRetryPlanner.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxInboxReceiptStore.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxInboxReceiptStore.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxInboxReceiptStore.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxInboxReceiptStore.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationAdapterRegistry.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationAdapterRegistry.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationAdapterRegistry.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationAdapterRegistry.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationAttemptRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationAttemptRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationAttemptRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationAttemptRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationFailureClassifier.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationFailureClassifier.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationFailureClassifier.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationFailureClassifier.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationOperationsProjector.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationOperationsProjector.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationOperationsProjector.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationOperationsProjector.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationProblemFactory.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationProblemFactory.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationProblemFactory.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationProblemFactory.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationRetryActionHandler.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationRetryActionHandler.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxIntegrationRetryActionHandler.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxIntegrationRetryActionHandler.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxOutboxIntegrationDispatcher.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxOutboxIntegrationDispatcher.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxOutboxIntegrationDispatcher.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxOutboxIntegrationDispatcher.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxPollyIntegrationPipeline.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxPollyIntegrationPipeline.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/KbxPollyIntegrationPipeline.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/KbxPollyIntegrationPipeline.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Tests/KbxDurableIntegrationRetryPlannerTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Tests/KbxDurableIntegrationRetryPlannerTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Tests/KbxDurableIntegrationRetryPlannerTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Tests/KbxDurableIntegrationRetryPlannerTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Tests/KbxIntegrationFailureClassifierTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Tests/KbxIntegrationFailureClassifierTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Integrations/Tests/KbxIntegrationFailureClassifierTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Integrations/Tests/KbxIntegrationFailureClassifierTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/KbxOperationsRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/KbxOperationsRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/KbxOperationsRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/KbxOperationsRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Models.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Models.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Models.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Models.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/OperationsIdentity.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/OperationsIdentity.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/OperationsIdentity.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/OperationsIdentity.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/OperationsProjectionWriter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/OperationsProjectionWriter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/OperationsProjectionWriter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/OperationsProjectionWriter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/ReconcilePolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/ReconcilePolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/ReconcilePolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/ReconcilePolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/ReconcileProjectionWriter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/ReconcileProjectionWriter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/ReconcileProjectionWriter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/ReconcileProjectionWriter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Tests/ReconcilePolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Tests/ReconcilePolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Tests/ReconcilePolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Tests/ReconcilePolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Tests/WorkItemActionPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Tests/WorkItemActionPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/Tests/WorkItemActionPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/Tests/WorkItemActionPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/WorkItemActionPolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/WorkItemActionPolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/WorkItemActionPolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/WorkItemActionPolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/WorkItemActionRegistry.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/WorkItemActionRegistry.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Operations/WorkItemActionRegistry.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Operations/WorkItemActionRegistry.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Problems/KbxFastEndpoints.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Problems/KbxFastEndpoints.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Problems/KbxFastEndpoints.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Problems/KbxFastEndpoints.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Problems/KbxProblems.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Problems/KbxProblems.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Problems/KbxProblems.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Problems/KbxProblems.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/Generated/KbxExternalProviderCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/Generated/KbxExternalProviderCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/Generated/KbxExternalProviderCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/Generated/KbxExternalProviderCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KbxExternalProviderContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KbxExternalProviderContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KbxExternalProviderContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KbxExternalProviderContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KbxProviderRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KbxProviderRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KbxProviderRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KbxProviderRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisAccessTokenProvider.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisAccessTokenProvider.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisAccessTokenProvider.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisAccessTokenProvider.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisMarketDataAdapter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisMarketDataAdapter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisMarketDataAdapter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisMarketDataAdapter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisRequestPacer.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisRequestPacer.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KisRequestPacer.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KisRequestPacer.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KrxOpenApiAdapter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KrxOpenApiAdapter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/KrxOpenApiAdapter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/KrxOpenApiAdapter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/OpenDartAdapter.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/OpenDartAdapter.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Providers/OpenDartAdapter.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Providers/OpenDartAdapter.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxCorrelationMiddleware.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxCorrelationMiddleware.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxCorrelationMiddleware.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxCorrelationMiddleware.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxNotificationRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxNotificationRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxNotificationRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxNotificationRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxOperationPolicy.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxOperationPolicy.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxOperationPolicy.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxOperationPolicy.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxOperationRunRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxOperationRunRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxOperationRunRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxOperationRunRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeNoticeRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeNoticeRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeNoticeRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeNoticeRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeRegistration.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeRegistration.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxRuntimeRegistration.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxRuntimeRegistration.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxTelemetry.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxTelemetry.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/KbxTelemetry.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/KbxTelemetry.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/RuntimeIdentity.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/RuntimeIdentity.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/RuntimeIdentity.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/RuntimeIdentity.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/Tests/KbxOperationPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/Tests/KbxOperationPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Runtime/Tests/KbxOperationPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Runtime/Tests/KbxOperationPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/Generated/KbxTelemetryCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/Generated/KbxTelemetryCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/Generated/KbxTelemetryCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/Generated/KbxTelemetryCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxMetricsQuery.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxMetricsQuery.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxMetricsQuery.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxMetricsQuery.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxTelemetryContracts.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxTelemetryContracts.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxTelemetryContracts.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxTelemetryContracts.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxTelemetryRepository.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxTelemetryRepository.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/KbxUxTelemetryRepository.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/KbxUxTelemetryRepository.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/PurgeUxTelemetryJob.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/PurgeUxTelemetryJob.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/PurgeUxTelemetryJob.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/PurgeUxTelemetryJob.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/Tests/KbxUxTelemetryGuardTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/Tests/KbxUxTelemetryGuardTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Telemetry/Tests/KbxUxTelemetryGuardTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Telemetry/Tests/KbxUxTelemetryGuardTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Testing/Generated/KbxTestScenarioCatalog.g.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Testing/Generated/KbxTestScenarioCatalog.g.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Testing/Generated/KbxTestScenarioCatalog.g.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Testing/Generated/KbxTestScenarioCatalog.g.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Workflow/Tests/WorkflowGuardTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Workflow/Tests/WorkflowGuardTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Workflow/Tests/WorkflowGuardTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Workflow/Tests/WorkflowGuardTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Workflow/WorkflowGuard.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Workflow/WorkflowGuard.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/Workflow/WorkflowGuard.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/Shared/Workflow/WorkflowGuard.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/ExternalData/KbxExternalDataFreshnessPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/ExternalData/KbxExternalDataFreshnessPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/ExternalData/KbxExternalDataFreshnessPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/ExternalData/KbxExternalDataFreshnessPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/KisProviderPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/KisProviderPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/KisProviderPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/KisProviderPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/KrxProviderPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/KrxProviderPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/KrxProviderPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/KrxProviderPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/OpenDartProviderPolicyTests.cs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/OpenDartProviderPolicyTests.cs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/tests/Providers/OpenDartProviderPolicyTests.cs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/backend/tests/Providers/OpenDartProviderPolicyTests.cs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/api/kbx.api.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/api/kbx.api.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/api/kbx.api.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/api/kbx.api.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/api/openapi.kbx.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/api/openapi.kbx.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/api/openapi.kbx.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/api/openapi.kbx.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/authorization/kbx.authorization.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/authorization/kbx.authorization.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/authorization/kbx.authorization.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/authorization/kbx.authorization.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/configuration/kbx.configuration.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/configuration/kbx.configuration.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/configuration/kbx.configuration.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/configuration/kbx.configuration.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/experiments/kbx.experiments.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/experiments/kbx.experiments.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/experiments/kbx.experiments.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/experiments/kbx.experiments.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/external-data/kbx.external-data.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/external-data/kbx.external-data.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/external-data/kbx.external-data.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/external-data/kbx.external-data.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/fields/kbx.fields.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/fields/kbx.fields.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/fields/kbx.fields.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/fields/kbx.fields.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/fields/kbx.fields.schema.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/fields/kbx.fields.schema.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/fields/kbx.fields.schema.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/fields/kbx.fields.schema.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/integrations/kbx.integrations.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/integrations/kbx.integrations.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/integrations/kbx.integrations.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/integrations/kbx.integrations.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/problems/kbx.problem.schema.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/problems/kbx.problem.schema.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/problems/kbx.problem.schema.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/problems/kbx.problem.schema.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/providers/kbx.providers.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/providers/kbx.providers.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/providers/kbx.providers.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/providers/kbx.providers.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/screens/kbx.screen-recipes.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/screens/kbx.screen-recipes.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/screens/kbx.screen-recipes.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/screens/kbx.screen-recipes.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/telemetry/kbx.telemetry.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/telemetry/kbx.telemetry.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/telemetry/kbx.telemetry.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/telemetry/kbx.telemetry.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-evidence.schema.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-evidence.schema.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-evidence.schema.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-evidence.schema.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-fixtures.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-fixtures.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-fixtures.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-fixtures.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-scenarios.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-scenarios.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/contracts/testing/kbx.test-scenarios.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/testing/kbx.test-scenarios.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/.env.kbx.example b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/.env.kbx.example
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/.env.kbx.example
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/.env.kbx.example
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environment-matrix.generated.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environment-matrix.generated.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environment-matrix.generated.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environment-matrix.generated.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/development.env.example b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/development.env.example
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/development.env.example
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/development.env.example
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/production.env.example b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/production.env.example
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/production.env.example
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/production.env.example
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/staging.env.example b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/staging.env.example
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/staging.env.example
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/staging.env.example
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/test.env.example b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/test.env.example
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/environments/test.env.example
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/environments/test.env.example
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/nonsecret-defaults.generated.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/nonsecret-defaults.generated.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/nonsecret-defaults.generated.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/nonsecret-defaults.generated.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/release-artifact.contract.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/release-artifact.contract.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/deploy/kbx/release-artifact.contract.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/deploy/kbx/release-artifact.contract.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/components.contract.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/components.contract.json
similarity index 98%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/components.contract.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/components.contract.json
index d2a1c567..80dfcf2d 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/components.contract.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/components.contract.json
@@ -1,7 +1,7 @@
{
"schemaVersion": "1.0",
"namingRule": "KBX/{Category}/{Component}",
- "componentCount": 85,
+ "componentCount": 86,
"coreComponentCount": 34,
"components": [
{
@@ -146,7 +146,7 @@
"codeName": "KbxDataGrid",
"figmaName": "KBX/Business/KbxDataGrid",
"category": "business",
- "version": "1.5.0",
+ "version": "1.6.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -237,7 +237,7 @@
"codeName": "KbxStatus",
"figmaName": "KBX/Business/KbxStatus",
"category": "business",
- "version": "1.0.0",
+ "version": "1.1.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -330,7 +330,7 @@
"codeName": "KbxMasterDetailPage",
"figmaName": "KBX/Template/KbxMasterDetailPage",
"category": "template",
- "version": "1.8.0",
+ "version": "1.9.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -447,7 +447,7 @@
"codeName": "KbxExcelImport",
"figmaName": "KBX/Business/KbxExcelImport",
"category": "business",
- "version": "1.1.0",
+ "version": "1.3.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -557,7 +557,7 @@
"codeName": "KbxWorkQueuePage",
"figmaName": "KBX/Template/KbxWorkQueuePage",
"category": "template",
- "version": "1.6.0",
+ "version": "1.7.0",
"designRequired": false,
"designStatus": "code-only",
"variants": {
@@ -771,11 +771,29 @@
]
}
},
+ {
+ "codeName": "KbxRecordNavigator",
+ "figmaName": "KBX/Business/KbxRecordNavigator",
+ "category": "business",
+ "version": "1.0.0",
+ "designRequired": false,
+ "designStatus": "cataloged",
+ "variants": {
+ "state": [
+ "default",
+ "disabled"
+ ],
+ "density": [
+ "compact",
+ "comfortable"
+ ]
+ }
+ },
{
"codeName": "KbxWorkflowBar",
"figmaName": "KBX/Business/KbxWorkflowBar",
"category": "business",
- "version": "1.1.0",
+ "version": "1.2.0",
"designRequired": false,
"designStatus": "code-only",
"variants": {
@@ -1064,7 +1082,7 @@
"codeName": "KbxDialog",
"figmaName": "KBX/Primitive/KbxDialog",
"category": "primitive",
- "version": "1.0.0",
+ "version": "1.1.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -1082,7 +1100,7 @@
"codeName": "KbxDrawer",
"figmaName": "KBX/Primitive/KbxDrawer",
"category": "primitive",
- "version": "1.0.0",
+ "version": "1.1.0",
"designRequired": true,
"designStatus": "cataloged",
"variants": {
@@ -1189,7 +1207,7 @@
"codeName": "KbxFastEntryPage",
"figmaName": "KBX/Template/KbxFastEntryPage",
"category": "template",
- "version": "1.9.0",
+ "version": "1.10.0",
"designRequired": false,
"designStatus": "code-only",
"variants": {
@@ -1508,7 +1526,7 @@
"codeName": "KbxHomePage",
"figmaName": "KBX/Shell/KbxHomePage",
"category": "shell",
- "version": "1.10.0",
+ "version": "1.12.0",
"designRequired": false,
"designStatus": "cataloged",
"variants": {
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/variables.contract.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/variables.contract.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/design/figma/variables.contract.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/design/figma/variables.contract.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-contract-governance-v14.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-contract-governance-v14.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-contract-governance-v14.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-contract-governance-v14.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-drift-findings-v14.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-drift-findings-v14.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-drift-findings-v14.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-drift-findings-v14.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-field-contract-v13.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-field-contract-v13.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/api-field-contract-v13.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/api-field-contract-v13.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/application-shell-v10.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/application-shell-v10.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/application-shell-v10.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/application-shell-v10.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/architecture-guardrails.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/architecture-guardrails.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/architecture-guardrails.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/architecture-guardrails.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/authorization-sensitive-data-v15.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/authorization-sensitive-data-v15.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/authorization-sensitive-data-v15.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/authorization-sensitive-data-v15.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/backend-integration.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/backend-integration.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/backend-integration.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/backend-integration.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-catalog-acceptance-v11.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-catalog-acceptance-v11.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-catalog-acceptance-v11.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-catalog-acceptance-v11.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-interaction-contract-v24.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-interaction-contract-v24.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-interaction-contract-v24.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-interaction-contract-v24.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-versioning-v11.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-versioning-v11.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/component-versioning-v11.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/component-versioning-v11.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/configuration-governance-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/configuration-governance-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/configuration-governance-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/configuration-governance-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/configuration-reference.generated.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/configuration-reference.generated.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/configuration-reference.generated.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/configuration-reference.generated.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/core-component-recovery-home-navigation-v34.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/core-component-recovery-home-navigation-v34.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/core-component-recovery-home-navigation-v34.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/core-component-recovery-home-navigation-v34.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/deployment-runbook-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/deployment-runbook-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/deployment-runbook-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/deployment-runbook-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/design-code-parity-v12.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/design-code-parity-v12.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/design-code-parity-v12.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/design-code-parity-v12.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/design-token-policy-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/design-token-policy-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/design-token-policy-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/design-token-policy-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/environment-promotion-checklist-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/environment-promotion-checklist-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/environment-promotion-checklist-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/environment-promotion-checklist-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/erp-reference-screens-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/erp-reference-screens-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/erp-reference-screens-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/erp-reference-screens-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-artifact-hashes.sha256 b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-artifact-hashes.sha256
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-artifact-hashes.sha256
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-artifact-hashes.sha256
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-design-debt-gate.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-design-debt-gate.txt
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-design-debt-gate.txt
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-design-debt-gate.txt
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-golden-fe-parity-gate.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-golden-fe-parity-gate.txt
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-golden-fe-parity-gate.txt
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-golden-fe-parity-gate.txt
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-golden-fe-parity.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-golden-fe-parity.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-golden-fe-parity.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-golden-fe-parity.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-typescript-syntax-gate.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-typescript-syntax-gate.txt
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v41-typescript-syntax-gate.txt
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v41-typescript-syntax-gate.txt
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-browser-matrix.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-browser-matrix.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-browser-matrix.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-browser-matrix.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-fe-state-evidence.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-fe-state-evidence.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-fe-state-evidence.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-fe-state-evidence.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-theme-state-browser.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-theme-state-browser.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v44-theme-state-browser.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v44-theme-state-browser.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v45-browser-preference-theme.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v45-browser-preference-theme.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v45-browser-preference-theme.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v45-browser-preference-theme.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v46-browser-resume-theme.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v46-browser-resume-theme.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v46-browser-resume-theme.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v46-browser-resume-theme.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v47-browser-problem-theme.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v47-browser-problem-theme.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v47-browser-problem-theme.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v47-browser-problem-theme.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v47-fe-problem-evidence.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v47-fe-problem-evidence.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v47-fe-problem-evidence.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v47-fe-problem-evidence.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v48-browser-template-completion.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v48-browser-template-completion.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v48-browser-template-completion.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v48-browser-template-completion.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v48-fe-template-completion.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v48-fe-template-completion.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v48-fe-template-completion.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v48-fe-template-completion.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v49-browser-workbench-theme.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v49-browser-workbench-theme.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v49-browser-workbench-theme.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v49-browser-workbench-theme.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v49-fe-workbench-wms.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v49-fe-workbench-wms.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v49-fe-workbench-wms.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v49-fe-workbench-wms.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v50-browser-operational-truth.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v50-browser-operational-truth.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v50-browser-operational-truth.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v50-browser-operational-truth.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v50-fe-operational-truth.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v50-fe-operational-truth.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v50-fe-operational-truth.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v50-fe-operational-truth.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v51-fe-presentation-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v51-fe-presentation-validation.txt
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v51-fe-presentation-validation.txt
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v51-fe-presentation-validation.txt
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v52-artifact-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v52-artifact-sha256.txt
new file mode 100644
index 00000000..7c5a5bc5
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v52-artifact-sha256.txt
@@ -0,0 +1 @@
+e5591f8df77587eb934490c89b19e4fe1a1178839d10dd3aa10d1388be74fd18 kbx-foundation-v52-fe-operational-navigation-screen-anatomy.zip
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v52-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v52-environment-limitations.txt
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/evidence/v52-environment-limitations.txt
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v52-environment-limitations.txt
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-core-evidence-sha256.txt
new file mode 100644
index 00000000..d180150e
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-core-evidence-sha256.txt
@@ -0,0 +1,2 @@
+a33c3b809dc6cb5dcb1a4c71859a0c173a17bc03195db610660939fb19ee441b docs/evidence/v53-validate-kbx-full.log
+8427e2a08b805d173e21294057958a1dcf5e0700871e4cb1559b858576829507 docs/frontend/KBX-FE-Golden-Screen-Interaction-Hardening-v53.md
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-environment-limitations.txt
new file mode 100644
index 00000000..7c283961
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-environment-limitations.txt
@@ -0,0 +1,31 @@
+KBX Foundation v53 — Runtime validation environment limitations
+Date: 2026-08-12 (Asia/Seoul)
+
+Available:
+- node: available
+- npm: available
+
+Unavailable in this execution environment:
+- pnpm
+- root node_modules
+- apps/web/node_modules
+
+Therefore NOT executed / NOT claimed:
+- pnpm workspace install
+- Vite production build
+- Vue application runtime typecheck via installed workspace dependencies
+- Vitest runtime/component suite
+- Playwright actual Vue/Vite browser E2E
+
+Executed successfully:
+- node scripts/validate-typescript-syntax.mjs
+- node scripts/validate-fe-reference.mjs
+- node scripts/validate-fe-golden-interaction-v53.mjs
+- node scripts/measure-design-debt.mjs
+- node scripts/validate-kbx.mjs
+
+Full regression evidence:
+- docs/evidence/v53-validate-kbx-full.log
+
+Interpretation:
+Static/syntax/contract/governance regression PASS must not be represented as a real Vite/Playwright runtime PASS.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-fe-golden-interaction-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-fe-golden-interaction-validation.txt
new file mode 100644
index 00000000..20be7787
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v53-fe-golden-interaction-validation.txt
@@ -0,0 +1,33 @@
+PASS: home module rail derives action pressure from the same attention truth as the home queue
+PASS: home module rail is keyboard navigable without requiring mouse selection
+PASS: home module rail exposes stable focus targets
+PASS: module selection lands focus on the filtered work explorer
+PASS: home module rail preserves active/focus cues in high-contrast navigation
+PASS: standard section heading owns count units instead of forcing screen-specific count markup
+PASS: KbxMasterPage.vue exposes standard list-actions work-surface actions
+PASS: KbxMasterPage.vue exposes standard detail-actions work-surface actions
+PASS: KbxTransactionPage.vue exposes standard header-actions work-surface actions
+PASS: KbxTransactionPage.vue exposes standard detail-actions work-surface actions
+PASS: KbxQueuePage.vue exposes standard queue-actions work-surface actions
+PASS: KbxReconcilePage.vue exposes standard comparison-actions work-surface actions
+PASS: OMS order registration makes current record/status/error context explicit
+PASS: OMS order registration exposes row-add and error recovery beside the detail work surface
+PASS: OMS order detail count uses business-meaningful unit
+PASS: ERP purchase draft participates in workspace dirty-state recovery
+PASS: ERP purchase grid supports both F2 lookup and direct item-code resolution
+PASS: ERP purchase draft has field/row validation before save intent
+PASS: ERP purchase does not fabricate authoritative workflow state on the client
+PASS: ERP purchase detail supports real fast-entry grid interactions
+PASS: ERP inventory move gives immediate cross-field and stock UX validation
+PASS: ERP inventory move resolves item availability into the editing grid
+PASS: ERP inventory move does not simulate Domain workflow transitions on the client
+PASS: ERP inventory move participates in the common save keyboard contract
+PASS: WMS picking exposes task context and next instruction through the T09 template contract
+PASS: WMS picking dedicates a persistent notice surface to offline/retry truth
+PASS: WMS picking tells the operator what to do next and prevents ambiguous repeat scans
+PASS: WMS scanner labels use operator-facing Korean terminology
+PASS: static HTML reference identifies the v53 golden-screen interaction build
+PASS: static JavaScript reference mirrors module attention pressure
+PASS: static JavaScript module rail mirrors keyboard navigation
+PASS: static HTML reference visibly exposes module keyboard focus
+PASS: FE golden-screen interaction hardening v53 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-core-evidence-sha256.txt
new file mode 100644
index 00000000..37949a97
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-core-evidence-sha256.txt
@@ -0,0 +1,9 @@
+296dc43c598451ad1b4d3f36934679c12b0e7f19c9331c81555f8451a2410a69 packages/kbx-ui/src/shell/KbxHomePage.vue
+c16370652a993292a9560359bca750c4d29d5e9320eeca351dbc9817066c0fa9 packages/kbx-ui/src/components/KbxRecordNavigator.vue
+d5a01b4d5fbb104567d065beab8b9b7cd5af3b3bdfebf84df38dee334fb807f0 packages/kbx-ui/src/components/KbxWorkflowBar.vue
+38659b94d8799425530815f28ff7757a47cbb647976dae1b03d65b75813c9304 packages/kbx-ui/src/components/KbxFastEntryPage.vue
+e3d93c65e1029b0deed4e187619ac29643af55a6ad8928ea63e6d99358fff066 packages/kbx-ui/src/components/KbxMasterDetailPage.vue
+aa279bd3656aa1a549d76ceec901122f8e77661c5577ef691dda22ee524462e5 apps/web/fe-reference/index.html
+d1d121a87e46e54646f81e55d139d29fcd97083358ad5f32c914b04b6863cae4 apps/web/fe-reference/kbx-fe.js
+6078a2803d5f843679214d278feccb862ea0fd967f62a95504cf7930439ed958 apps/web/fe-reference/kbx-fe.css
+51b4c29240bb0e93464e1849201b4cc6d8396a5c9d0a3b39d4a351c99d86da53 docs/evidence/v54-validate-kbx-full.log
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-environment-limitations.txt
new file mode 100644
index 00000000..ce4aaaf7
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-environment-limitations.txt
@@ -0,0 +1,26 @@
+KBX v54 runtime validation environment
+====================================
+
+Observed in the current container:
+- Chromium: /usr/bin/chromium
+- pnpm: not installed / not on PATH
+- project root node_modules: missing
+
+What was executed successfully:
+- node --check apps/web/fe-reference/kbx-fe.js
+- node scripts/validate-typescript-syntax.mjs -> 309 TS/Vue script units PASS
+- node scripts/validate-fe-work-surface-v54.mjs -> PASS
+- node scripts/validate-kbx.mjs -> full PASS
+
+What was NOT claimed:
+- Vite production build PASS
+- Vitest runtime PASS
+- Playwright browser E2E PASS
+
+Static Chromium QA attempt:
+- A local HTTP server plus Chromium headless screenshot at 1440x900 was attempted.
+- Chromium did not terminate within the bounded execution window.
+- stderr contained DBus connection errors and zygote termination communication errors.
+- No screenshot from this attempt is accepted as evidence.
+
+This limitation is environmental evidence, not a frontend success claim.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-fe-work-surface-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-fe-work-surface-validation.txt
new file mode 100644
index 00000000..ff15f9ec
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v54-fe-work-surface-validation.txt
@@ -0,0 +1,47 @@
+PASS: home operational triage includes 긴급·예외 lane
+PASS: home operational triage includes 미저장 lane
+PASS: home operational triage includes 진행 작업 lane
+PASS: home operational triage includes 알림 lane
+PASS: home triage limits each source lane instead of letting one source monopolize the workbench
+PASS: home exposes visible triage volume and stable lane anatomy
+PASS: home module rail retains keyboard-first wayfinding
+PASS: record navigator exposes record position and hard previous/next boundaries
+PASS: record navigator has explicit previous/next interaction contract
+PASS: record navigator preserves keyboard focus and high-contrast feedback
+PASS: T02 item master exposes current-record wayfinding beside the detail work surface
+PASS: T02 record navigation is fail-closed while the detail has unsaved changes
+PASS: T02 record navigation reuses the existing dirty-safe selection path instead of bypassing it
+PASS: workflow bar explicitly tells the user what can happen next
+PASS: workflow bar exposes current step semantics and progress
+PASS: workflow bar explains terminal/blocked states instead of showing an unexplained blank action area
+PASS: T04 owns fast-entry grid title and row-count anatomy
+PASS: T04 reserves standard grid-level actions beside the work-surface heading
+PASS: real T04 item-price screen uses the standard work-surface heading/count contract
+PASS: real T04 exposes error pressure beside the entry surface
+PASS: T05 exposes standard master-actions location
+PASS: T05 exposes standard detail-actions location
+PASS: T05 exposes standard bottom-actions location
+PASS: T05 gives each pane an explicit purpose instead of relying on layout alone
+PASS: T05 exposes per-pane data volume for scanable master/detail context
+PASS: real inventory explorer uses master purpose/count contract
+PASS: real inventory explorer uses detail purpose/count contract
+PASS: real inventory explorer uses history purpose/count contract
+PASS: new record navigator is governed in the component manifest
+PASS: workflow explicit-next-action change is versioned
+PASS: T04 work-surface contract change is versioned
+PASS: T05 pane anatomy change is versioned
+PASS: home triage/navigation change is versioned
+PASS: static HTML reference identifies the v54 work-surface build
+PASS: static reference CSP preserves connect-src 'self'
+PASS: static reference CSP preserves frame-src 'none'
+PASS: static reference CSP preserves worker-src 'none'
+PASS: static reference CSP preserves object-src 'none'
+PASS: static reference CSP preserves frame-ancestors 'none'
+PASS: static JavaScript reference mirrors four-lane home operational triage
+PASS: mixed urgent overflow no longer routes incorrectly to notifications only
+PASS: static T02 reference mirrors dirty-safe previous/next record navigation
+PASS: static T04 reference mirrors the named fast-entry work surface
+PASS: static CSS has concrete triage, record navigation, and fast-entry surfaces
+PASS: v54 static styles do not rely on undefined theme variables
+PASS: static reference preserves high-contrast/focus cues for new v54 interactions
+PASS: FE work-surface triage and wayfinding hardening v54 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-core-evidence-sha256.txt
new file mode 100644
index 00000000..ac1ce7ab
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-core-evidence-sha256.txt
@@ -0,0 +1,4 @@
+8706b28ac06d29844076cd16817b85505eb7ccf10501fd16d52b1b7b6609afdd docs/frontend/KBX-FE-Recovery-Workbench-Hardening-v55.md
+76f71e2cf2bf452ee14c3d411afc834959834e255fcaa9cadb107deefc0e592e docs/evidence/v55-validate-kbx-full.log
+59dfe38e5bf4236c8895ed911ce67e89fd835cfeed12fc29251a333ea244564d docs/evidence/v55-fe-recovery-workbench-validation.txt
+c1f4687f5a1cc2646d28f20a10cc44b065eb8ec60752c3e16f0509300e0e3998 docs/evidence/v55-environment-limitations.txt
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-environment-limitations.txt
new file mode 100644
index 00000000..ee7d3d4b
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-environment-limitations.txt
@@ -0,0 +1,26 @@
+KBX Foundation v55 runtime evidence limitations
+Date: 2026-08-12 Asia/Seoul
+
+Available:
+- node v22.16.0
+- chromium /usr/bin/chromium
+- static Node-based KBX validators
+
+Unavailable in project runtime:
+- pnpm executable
+- root node_modules
+- apps/web node_modules
+
+Therefore not claimed:
+- Vite production build PASS
+- Vitest browser/component runtime PASS
+- Vue/PrimeVue/AG Grid Playwright E2E PASS
+
+Chromium static screenshot attempt:
+- command: chromium --headless=new --no-sandbox ... file://.../apps/web/fe-reference/index.html#import
+- result: timeout exit 124 after 20 seconds
+- dominant stderr: DBus connection errors in container
+- screenshot was not accepted as release evidence
+
+Policy:
+Static/source/contract/syntax validation and browser runtime validation remain separate claims.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-fe-recovery-workbench-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-fe-recovery-workbench-validation.txt
new file mode 100644
index 00000000..5582590f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v55-fe-recovery-workbench-validation.txt
@@ -0,0 +1,46 @@
+PASS: T08 Vue import owns file stage
+PASS: T08 Vue import owns mapping stage
+PASS: T08 Vue import owns validation stage
+PASS: T08 Vue import owns preview stage
+PASS: T08 Vue import owns commit stage
+PASS: T08 Vue import owns result stage
+PASS: T08 maps server status to explicit preview and commit work surfaces
+PASS: T08 exposes a dedicated preview surface before mutation
+PASS: T08 preview supports deterministic first/next validation-error focus
+PASS: T08 avoids inventing projected create/update counts when server preview does not supply them
+PASS: T08 commit surface warns against duplicate user submission during background mutation
+PASS: T06 compatibility wrapper preserves queueTitle?:string
+PASS: T06 compatibility wrapper preserves queueDescription?:string
+PASS: T06 compatibility wrapper preserves queueCount?:number
+PASS: T06 compatibility wrapper preserves queueCountUnit?:string
+PASS: T06 wrapper forwards work-surface title/count/actions instead of silently dropping them
+PASS: T06 distinguishes visible-page pressure metrics from authoritative total count
+PASS: real T06 queue exposes authoritative total volume in the standard heading
+PASS: real T06 lets operators jump directly to the next urgent exception without rescanning the grid
+PASS: real T06 provides an explicit mine-work shortcut using the existing server filter contract
+PASS: T07 exposes explicit all/mismatch/pending/resolved quick-result navigation
+PASS: T07 keeps row comparison context in a dedicated evidence drawer
+PASS: T07 custom detail action respects frontend permission expression while backend remains authoritative
+PASS: T07 resolution policy forbids client-side reconciliation truth mutation
+PASS: T09 records only server-confirmed scans, including idempotent retry confirmation
+PASS: T09 start/exception mutation failures now produce actionable operator feedback
+PASS: T09 explicitly separates scan readiness from last authoritative server confirmation
+PASS: T09 direct quantity action is fail-closed during offline/pending/server-confirmation states
+PASS: T08 governance now matches the six-stage Business UX standard
+PASS: T06 governance distinguishes authoritative total and visible pressure
+PASS: T07 governance requires evidence-preserving row detail
+PASS: T09 governance requires authoritative scan truth visibility
+PASS: six-stage T08 business component change is versioned
+PASS: T06 wrapper contract fix is versioned
+PASS: static HTML reference identifies the v55 recovery-workbench build
+PASS: static reference CSP preserves connect-src 'self'
+PASS: static reference CSP preserves frame-src 'none'
+PASS: static reference CSP preserves worker-src 'none'
+PASS: static reference CSP preserves object-src 'none'
+PASS: static reference CSP preserves frame-ancestors 'none'
+PASS: static HTML/JavaScript T08 retains the same six-stage import grammar
+PASS: static T08 mirrors validation error focus navigation
+PASS: static T09 distinguishes last confirmed scan from buffered/invalid input
+PASS: static CSS provides concrete recovery/scan-truth work surfaces
+PASS: new static styles use defined theme variables and retain high-contrast support
+PASS: FE recovery workbench hardening v55 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-changed-files.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-changed-files.txt
new file mode 100644
index 00000000..8877f4fe
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-changed-files.txt
@@ -0,0 +1,29 @@
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/README.md and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/README.md differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/fe-reference/index.html and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/fe-reference/index.html differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/fe-reference/kbx-fe.css and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/fe-reference/kbx-fe.css differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/fe-reference/kbx-fe.js and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/fe-reference/kbx-fe.js differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/App.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/App.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/http/demo/installFrontendDemoApi.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/http/demo/installFrontendDemoApi.ts differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/modules/common/operations/OperationsQueuePage.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/modules/common/operations/OperationsQueuePage.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/modules/common/operations/operationsApi.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/modules/common/operations/operationsApi.ts differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/modules/wms/picking/useWmsPicking.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/modules/wms/picking/useWmsPicking.ts differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/apps/web/src/modules/wms/picking/wmsRetryQueue.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/apps/web/src/modules/wms/picking/wmsRetryQueue.ts differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/design/figma/components.contract.json and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/design/figma/components.contract.json differ
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/docs/evidence: v56-environment-limitations.txt
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/docs/evidence: v56-fe-interaction-closure-validation.txt
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/docs/evidence: v56-typescript-syntax.log
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/docs/evidence: v56-validate-kbx-full.log
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/docs/frontend: KBX-FE-Interaction-Closure-Hardening-v56.md
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/generated/component-manifest.json and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/generated/component-manifest.json differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/generated/release-impact.json and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/generated/release-impact.json differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/generated/release-notes.md and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/generated/release-notes.md differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/package.json and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/package.json differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/packages/kbx-ui/src/components/KbxDialog.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/packages/kbx-ui/src/components/KbxDialog.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/packages/kbx-ui/src/components/KbxDrawer.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/packages/kbx-ui/src/components/KbxDrawer.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/packages/kbx-ui/src/components/KbxExcelImport.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/packages/kbx-ui/src/components/KbxExcelImport.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/packages/kbx-ui/src/components/KbxLookupDialog.vue and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/packages/kbx-ui/src/components/KbxLookupDialog.vue differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/packages/kbx-ui/src/registry/componentManifest.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/packages/kbx-ui/src/registry/componentManifest.ts differ
+Only in /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/scripts: validate-fe-interaction-closure-v56.mjs
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/scripts/validate-kbx.mjs and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/scripts/validate-kbx.mjs differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/tests/e2e/kbx-keyboard-regression.spec.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/tests/e2e/kbx-keyboard-regression.spec.ts differ
+Files /mnt/data/kbx-v56-work/kbx-v55-work/kbx-foundation-v55-fe-recovery-workbench-hardening/tests/e2e/oms-order-import.spec.ts and /mnt/data/kbx-v56-work/kbx-foundation-v56-fe-interaction-closure-hardening/tests/e2e/oms-order-import.spec.ts differ
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-environment-limitations.txt
new file mode 100644
index 00000000..adb1a184
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-environment-limitations.txt
@@ -0,0 +1,10 @@
+KBX Foundation v56 runtime evidence limitations
+
+- Node.js is available: v22.16.0.
+- pnpm is not installed in PATH.
+- Corepack attempted to resolve pnpm, but this isolated environment cannot reach registry.npmjs.org (EAI_AGAIN).
+- No project node_modules are present, so Vite production build, Vitest, and Playwright Vue runtime suites were not executed.
+- Chromium is installed at /usr/bin/chromium.
+- A static FE Reference render was attempted through a local HTTP server with headless Chromium at 1440x900.
+- Chromium did not produce a screenshot and was terminated after 12 seconds; logs show unavailable DBus and zygote communication errors.
+- Therefore v56 does NOT claim browser-runtime PASS. Static/contract/syntax/governance PASS and browser-runtime PASS remain deliberately separate evidence classes.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-fe-interaction-closure-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-fe-interaction-closure-validation.txt
new file mode 100644
index 00000000..dab73752
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v56-fe-interaction-closure-validation.txt
@@ -0,0 +1,28 @@
+PASS: Dialog restores focus only to a still-valid invoking control after overlay close
+PASS: Dialog restores focus without unexpected viewport jumps
+PASS: Drawer restores focus only to a still-valid invoking control after overlay close
+PASS: Drawer restores focus without unexpected viewport jumps
+PASS: Dialog supports an explicit owner-managed focus lifecycle escape hatch
+PASS: Lookup disables generic Dialog restore because successful selection intentionally advances to the next field
+PASS: T08 transfers keyboard focus to the new six-stage work surface after DOM replacement
+PASS: T08 gives every import stage an explicit focus landing
+PASS: T06 FE consumes the authoritative bulk claim result instead of treating HTTP 200 as all-success
+PASS: T06 renders partial bulk outcome as a persistent inline receipt
+PASS: T06 partial bulk receipt exposes concrete recovery actions
+PASS: T09 safe-retry storage is tenant/user-scope partitioned and anonymous contexts remain session-only
+PASS: T09 retires the old unscoped shared-PDA retry queue instead of replaying it
+PASS: T09 bounds and validates browser-persisted retry commands before replay
+PASS: T09 binds retry persistence to the same tenant/user UI scope used by the application shell
+PASS: Runtime feedback/telemetry metadata identifies the actual v56 FE build instead of stale v51
+PASS: Demo API mirrors the real partial bulk claim response contract
+PASS: Demo T08 supplies a complete required-field mapping so browser Golden Flow can actually reach validation
+PASS: Static HTML reference identifies the v56 interaction-closure build
+PASS: Static HTML/JavaScript T08 mirrors stage-focus continuity without stealing focus on progress polling rerenders
+PASS: Static T07 no longer fabricates reconciliation success by mutating reference truth client-side
+PASS: Static import stage focus remains visible in normal and forced-color themes
+PASS: T08 E2E no longer depends on a missing binary workbook fixture
+PASS: T08 E2E asserts stage-focus continuity through terminal result
+PASS: Keyboard regression explicitly covers Lookup Esc focus restoration
+PASS: T08 focus lifecycle change is component-versioned
+PASS: Overlay focus lifecycle changes are component-versioned
+PASS: FE interaction closure hardening v56 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-changed-files.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-changed-files.txt
new file mode 100644
index 00000000..43a8724d
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-changed-files.txt
@@ -0,0 +1,32 @@
+.gitea/workflows/kbx-quality-gate.yaml
+.gitea/workflows/kbx-release-readiness.yaml
+README.md
+apps/web/fe-reference/index.html
+apps/web/src/App.vue
+apps/web/src/http/demo/installFrontendDemoApi.ts
+apps/web/src/modules/common/operations/OperationsQueuePage.vue
+apps/web/src/modules/common/operations/operations.definition.ts
+apps/web/src/modules/common/reconcile/ReconcilePage.vue
+apps/web/src/modules/common/reconcile/reconcile.definition.ts
+apps/web/src/modules/common/reconcile/reconcileApi.ts
+apps/web/src/modules/wms/picking/picking.definition.ts
+apps/web/src/modules/wms/picking/useWmsPicking.ts
+Only in ./docs/evidence: v57-corepack-attempt.log
+Only in ./docs/evidence: v57-environment-limitations.txt
+Only in ./docs/evidence: v57-fe-authoritative-outcome-validation.txt
+Only in ./docs/evidence: v57-runtime-readiness.json
+Only in ./docs/evidence: v57-typescript-syntax.log
+Only in ./docs/evidence: v57-validate-kbx-full.log
+Only in ./docs/frontend: KBX-FE-Authoritative-Outcome-Runtime-Evidence-v57.md
+generated/release-impact.json
+generated/release-notes.md
+generated/screen-manifest.json
+package.json
+Only in .: playwright.config.ts
+Only in ./scripts: report-fe-runtime-readiness.mjs
+Only in ./scripts: validate-fe-authoritative-outcome-v57.mjs
+scripts/validate-fe-interaction-closure-v56.mjs
+scripts/validate-kbx.mjs
+tests/e2e/common-operations.spec.ts
+tests/e2e/common-reconcile.spec.ts
+tests/e2e/wms-picking.spec.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-environment-limitations.txt
new file mode 100644
index 00000000..4def787a
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-environment-limitations.txt
@@ -0,0 +1,32 @@
+KBX v57 runtime environment limitations
+======================================
+
+Static/contract validation:
+- node scripts/validate-kbx.mjs: PASS
+- node scripts/validate-typescript-syntax.mjs: PASS (310 TS/Vue script units)
+- node scripts/validate-fe-authoritative-outcome-v57.mjs: PASS
+
+Runtime readiness:
+- Node: v22.16.0
+- packageManager declared: pnpm@10.33.4
+- pnpm-lock.yaml: absent
+- node_modules: absent
+- @playwright/test installed: no
+- vitest installed: no
+- Playwright config/demo server wiring: present
+
+Dependency installation attempt:
+- `corepack pnpm --version` attempted to resolve pnpm 10.33.4.
+- It failed because registry.npmjs.org DNS lookup returned EAI_AGAIN in this container.
+- The full captured error is in docs/evidence/v57-corepack-attempt.log.
+
+Consequences:
+- No pnpm-lock.yaml was fabricated by hand.
+- No dependency install success is claimed.
+- No Vite production build/typecheck runtime is claimed.
+- No Vitest runtime PASS is claimed.
+- No Playwright browser E2E PASS is claimed.
+
+Release policy:
+- Static KBX governance may pass independently.
+- Release Readiness workflow fails when pnpm-lock.yaml is absent so runtime evidence cannot be silently treated as PASS.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-fe-authoritative-outcome-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-fe-authoritative-outcome-validation.txt
new file mode 100644
index 00000000..621b719b
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-fe-authoritative-outcome-validation.txt
@@ -0,0 +1,55 @@
+PASS: Runtime metadata identifies the v57 authoritative-outcome build
+PASS: T06 API preserves authoritative resolve counts
+PASS: T06 maps HTTP success to authoritative business outcome instead of all-success
+PASS: T06 resolved telemetry is emitted only for actual server-resolved work
+PASS: T06 persists and focuses the authoritative action receipt
+PASS: T06 partial resolve gives explicit recovery guidance
+PASS: T07 API preserves authoritative exception-creation counts
+PASS: T07 consumes server result counts without client inference
+PASS: T07 partial result persists as a focusable recovery receipt
+PASS: T07 routes to resolution work without mutating source truth
+PASS: Demo API carries real T06/T07 contract field: sourceModule
+PASS: Demo API carries real T06/T07 contract field: referenceNo
+PASS: Demo API carries real T06/T07 contract field: ageMinutes
+PASS: Demo API carries real T06/T07 contract field: allowManualResolution
+PASS: Demo API carries real T06/T07 contract field: expectedValue
+PASS: Demo API carries real T06/T07 contract field: actualValue
+PASS: Demo API carries real T06/T07 contract field: differenceValue
+PASS: Demo API carries real T06/T07 contract field: summary
+PASS: Demo Reconcile mirrors authoritative create-exception outcome
+PASS: Demo resolve advances server-like version when authoritative state changes
+PASS: T09 scan mutation captures issuing tenant/user scope
+PASS: T09 success/ambiguity always reads or writes the captured issuing scope
+PASS: T09 stale in-flight response cannot mutate a newly switched operator UI
+PASS: T09 retry replay is pinned to its captured scope for the full async loop
+PASS: T09 operator scope switch abandons prior task truth and clears prior server-confirmation display
+PASS: Root packageManager uses an exact Corepack-compatible pnpm semver
+PASS: Root declares actual Playwright and Vitest test runners
+PASS: Root exposes executable FE QA script: test:unit
+PASS: Root exposes executable FE QA script: test:e2e
+PASS: Root exposes executable FE QA script: test:e2e:desktop
+PASS: Root exposes executable FE QA script: test:e2e:wms
+PASS: Root exposes executable FE QA script: test:fe
+PASS: Root exposes executable FE QA script: validate:fe-authoritative-outcome
+PASS: Playwright owns baseURL and starts the demo runtime when no external URL is supplied
+PASS: Playwright defines the KBX 1440×900 desktop evidence project
+PASS: Playwright defines the KBX 390×844 WMS evidence project
+PASS: Playwright retains failure evidence instead of ceremonial pass/fail only
+PASS: T06 E2E proves HTTP 200 + business rejection and focusable recovery receipt
+PASS: T06 E2E proves corrected demo DTO drives urgent work navigation
+PASS: T07 E2E proves HTTP 200 + skipped business outcome and recovery focus
+PASS: T07 E2E protects the source-truth policy in the actual UI flow
+PASS: T09 E2E models response loss followed by one safe retry
+PASS: T09 E2E asserts the exact idempotency key is reused across ambiguous retry
+PASS: T09 E2E separates local scan from server-confirmed truth
+PASS: Quality Gate executes runtime FE evidence step when reproducible install is available: pnpm typecheck:web
+PASS: Quality Gate executes runtime FE evidence step when reproducible install is available: pnpm test:unit
+PASS: Quality Gate executes runtime FE evidence step when reproducible install is available: pnpm build:web:demo
+PASS: Quality Gate executes runtime FE evidence step when reproducible install is available: pnpm test:e2e
+PASS: Quality Gate reports missing lockfile as blocked runtime evidence instead of fake PASS
+PASS: Release Readiness fails closed when reproducible FE runtime evidence cannot be installed
+PASS: Static HTML reference identifies the v57 runtime-evidence build
+PASS: apps/web/src/modules/common/operations/operations.definition.ts versions the v57 behavior contract
+PASS: apps/web/src/modules/common/reconcile/reconcile.definition.ts versions the v57 behavior contract
+PASS: apps/web/src/modules/wms/picking/picking.definition.ts versions the v57 behavior contract
+PASS: FE authoritative outcome + runtime evidence hardening v57 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-runtime-readiness.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-runtime-readiness.json
new file mode 100644
index 00000000..2cb280b8
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v57-runtime-readiness.json
@@ -0,0 +1,19 @@
+{
+ "generatedAt": "2026-08-11T23:26:30.605Z",
+ "node": "v22.16.0",
+ "packageManager": "pnpm@10.33.4",
+ "lockfile": false,
+ "nodeModules": false,
+ "playwrightConfig": true,
+ "playwrightInstalled": false,
+ "vitestInstalled": false,
+ "demoRuntimeScript": true,
+ "e2eScript": true,
+ "status": "blocked",
+ "blockers": [
+ "pnpm-lock.yaml is absent; reproducible dependency install evidence is not available.",
+ "node_modules is absent in this artifact environment.",
+ "@playwright/test is declared but not installed in this artifact environment.",
+ "vitest is declared but not installed in this artifact environment."
+ ]
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-changed-files.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-changed-files.txt
new file mode 100644
index 00000000..931e0296
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-changed-files.txt
@@ -0,0 +1,33 @@
+CHANGED README.md
+CHANGED apps/web/fe-reference/index.html
+CHANGED apps/web/src/App.vue
+CHANGED apps/web/src/http/demo/installFrontendDemoApi.ts
+CHANGED apps/web/src/modules/common/ux-metrics/UxMetricsPage.vue
+CHANGED apps/web/src/modules/erp/items/ItemMasterPage.vue
+CHANGED apps/web/src/modules/oms/claims/ClaimsPage.vue
+CHANGED apps/web/src/modules/oms/claims/claims.definition.ts
+CHANGED apps/web/src/modules/wms/work/WmsWorkPage.vue
+CHANGED apps/web/src/modules/wms/work/work.definition.ts
+CHANGED apps/web/src/modules/wms/work/workApi.ts
+CHANGED design/figma/components.contract.json
+ADDED docs/evidence/v58-browser-render-attempt.log
+ADDED docs/evidence/v58-corepack-attempt.log
+ADDED docs/evidence/v58-environment-limitations.txt
+ADDED docs/evidence/v58-fe-workflow-queue-runtime-validation.txt
+ADDED docs/evidence/v58-runtime-readiness.json
+ADDED docs/evidence/v58-typescript-syntax.log
+ADDED docs/evidence/v58-validate-kbx-full.log
+ADDED docs/frontend/KBX-FE-Workflow-Queue-Runtime-Hardening-v58.md
+CHANGED generated/component-manifest.json
+CHANGED generated/release-impact.json
+CHANGED generated/release-notes.md
+CHANGED generated/screen-manifest.json
+CHANGED package.json
+CHANGED packages/kbx-ui/src/registry/componentManifest.ts
+CHANGED packages/kbx-ui/src/shell/KbxHomePage.vue
+CHANGED scripts/validate-fe-authoritative-outcome-v57.mjs
+CHANGED scripts/validate-fe-work-surface-v54.mjs
+ADDED scripts/validate-fe-workflow-queue-runtime-v58.mjs
+CHANGED scripts/validate-kbx.mjs
+CHANGED tests/e2e/oms-claims.spec.ts
+ADDED tests/e2e/wms-work-queue.spec.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-core-evidence-sha256.txt
new file mode 100644
index 00000000..c0fc2038
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-core-evidence-sha256.txt
@@ -0,0 +1,7 @@
+56cbb8126c3d1c0a70f4ee5b354643ccef3d2eed78e321ec719e62063b8be4e9 apps/web/src/modules/oms/claims/ClaimsPage.vue
+654ba1bc858fa562439ddb8cb5197d5e9661847cb08a64cf76c33f0ac09d199c apps/web/src/modules/oms/claims/claims.definition.ts
+9807023ec3e3cf35ffc6bdec01efd8451ed5361bb07684baaa8a85c7589fc9bb apps/web/src/modules/wms/work/WmsWorkPage.vue
+54c1c59f0aca07e85d1619749608a5236a328e3253ef97e1651d7517e328059d apps/web/src/modules/wms/work/workApi.ts
+8d5868c65769a188c110988a2179fbe35c1efd6407c354bf5dca4bc9a65f4301 packages/kbx-ui/src/shell/KbxHomePage.vue
+b8bd773b2b7a972def8686e753f7d8827a4f975031cebce805c68444caafa6c0 scripts/validate-fe-workflow-queue-runtime-v58.mjs
+a96579c63005a745569f023959f15e2a6fbb8271284e3f86adb5b67660308f98 docs/evidence/v58-validate-kbx-full.log
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-environment-limitations.txt
new file mode 100644
index 00000000..65675ab6
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-environment-limitations.txt
@@ -0,0 +1,9 @@
+KBX v58 Runtime Evidence Limitations
+
+1. Repository artifact has no pnpm-lock.yaml and no node_modules.
+2. Corepack pnpm@10.33.4 download was attempted again in this environment.
+3. registry.npmjs.org DNS lookup failed with EAI_AGAIN, so dependencies cannot be installed reproducibly here.
+4. Therefore Vite production build, Vue typecheck, Vitest runtime, and Playwright runtime are NOT claimed as PASS.
+5. System Chromium 144 static-reference --dump-dom was attempted with headless/no-sandbox flags.
+6. Chromium timed out with DBus/zygote errors and produced no DOM evidence; it is NOT counted as browser PASS.
+7. node scripts/validate-kbx.mjs and v58 static/runtime-contract gates PASS, but these are intentionally separated from browser runtime evidence.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-fe-workflow-queue-runtime-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-fe-workflow-queue-runtime-validation.txt
new file mode 100644
index 00000000..e3b6a628
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-fe-workflow-queue-runtime-validation.txt
@@ -0,0 +1,29 @@
+PASS: Runtime metadata identifies the v58 workflow/queue build
+PASS: OMS claims removes the invalid grid selection v-model contract
+PASS: OMS claims passes real selection count to CommandBar and consumes KbxDataGrid selectionChanged
+PASS: OMS claims connects every visible workflow transition to a real API action
+PASS: OMS claims bulk transition continues through per-row failures and records partial outcome
+PASS: OMS claims leaves a persistent focusable authoritative action receipt
+PASS: OMS claims workflow represents HOLD as an explicit domain state instead of an orphan command
+PASS: OMS claims screen versions the repaired workflow contract
+PASS: Demo claims carries real DTO/state field: status:'REQUESTED'
+PASS: Demo claims carries real DTO/state field: status:'APPROVED'
+PASS: Demo claims carries real DTO/state field: status:'IN_PROGRESS'
+PASS: Demo claims carries real DTO/state field: status:'HOLD'
+PASS: Demo claims carries real DTO/state field: channelName
+PASS: Demo claims carries real DTO/state field: requestedQty
+PASS: Demo claims carries real DTO/state field: ownerName
+PASS: Demo claims mirrors backend transition preconditions
+PASS: Demo invalid claim transition rejects as an actual HTTP/business failure rather than resolving a fake success
+PASS: T06 WMS queue starts with all statuses and loads actionable work on entry
+PASS: T06 WMS queue computes status summary independently from the active status filter
+PASS: T06 WMS queue surfaces blocked work even before the user narrows to BLOCKED
+PASS: T06 WMS queue fails closed instead of presenting BLOCKED work as startable
+PASS: T06 WMS screen versions the queue-signal contract without duplicating the implicit 전체 option
+PASS: Home counts only user-launchable menu screens instead of hidden utility entries
+PASS: SearchPanel whole-object v-model uses writable refs; unsafe bindings: none
+PASS: UX metrics fixes the same writable-search runtime contract instead of leaving a known sibling defect
+PASS: Claims E2E covers selection, start transition, authoritative receipt, and HOLD state
+PASS: WMS queue E2E proves initial exception visibility and fail-closed blocked action
+PASS: Static HTML reference identifies the v58 workflow/queue hardening build
+PASS: FE workflow truth + queue signal + runtime hardening v58 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-runtime-readiness.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-runtime-readiness.json
new file mode 100644
index 00000000..49844ce3
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v58-runtime-readiness.json
@@ -0,0 +1,19 @@
+{
+ "generatedAt": "2026-08-11T23:50:55.386Z",
+ "node": "v22.16.0",
+ "packageManager": "pnpm@10.33.4",
+ "lockfile": false,
+ "nodeModules": false,
+ "playwrightConfig": true,
+ "playwrightInstalled": false,
+ "vitestInstalled": false,
+ "demoRuntimeScript": true,
+ "e2eScript": true,
+ "status": "blocked",
+ "blockers": [
+ "pnpm-lock.yaml is absent; reproducible dependency install evidence is not available.",
+ "node_modules is absent in this artifact environment.",
+ "@playwright/test is declared but not installed in this artifact environment.",
+ "vitest is declared but not installed in this artifact environment."
+ ]
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-changed-files.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-changed-files.txt
new file mode 100644
index 00000000..28b55f56
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-changed-files.txt
@@ -0,0 +1,45 @@
+MODIFIED apps/web/fe-reference/index.html
+MODIFIED apps/web/fe-reference/kbx-fe.css
+MODIFIED apps/web/fe-reference/kbx-fe.js
+MODIFIED apps/web/src/App.vue
+MODIFIED apps/web/src/http/demo/installFrontendDemoApi.ts
+MODIFIED apps/web/src/modules/common/design-system/ComponentCatalogPage.vue
+MODIFIED apps/web/src/modules/common/experiments/ExperimentsPage.vue
+MODIFIED apps/web/src/modules/common/experiments/experiments.definition.ts
+MODIFIED apps/web/src/modules/common/external-data/ExternalDataStatusPage.vue
+MODIFIED apps/web/src/modules/common/external-data/external-data.definition.ts
+MODIFIED apps/web/src/modules/common/operations/operations.definition.ts
+MODIFIED apps/web/src/modules/common/reconcile/reconcile.definition.ts
+MODIFIED apps/web/src/modules/oms/claims/claims.definition.ts
+MODIFIED apps/web/src/modules/oms/orders/search/OrderDetailDrawer.vue
+MODIFIED apps/web/src/modules/oms/orders/search/order-list.definition.ts
+MODIFIED apps/web/src/modules/wms/work/work.definition.ts
+ADDED apps/web/src/registry/statusCatalog.ts
+MODIFIED design/figma/components.contract.json
+ADDED docs/evidence/v59-corepack-attempt.log
+ADDED docs/evidence/v59-design-debt.log
+ADDED docs/evidence/v59-environment-limitations.txt
+ADDED docs/evidence/v59-fe-grid-status-validation.txt
+ADDED docs/evidence/v59-runtime-readiness-output.txt
+ADDED docs/evidence/v59-runtime-readiness.json
+ADDED docs/evidence/v59-typescript-syntax.log
+ADDED docs/evidence/v59-validate-kbx-full.log
+ADDED docs/frontend/KBX-FE-Grid-Status-Dictionary-Hardening-v59.md
+MODIFIED generated/component-manifest.json
+MODIFIED generated/field-adoption-report.json
+MODIFIED generated/release-impact.json
+MODIFIED generated/release-notes.md
+MODIFIED generated/screen-manifest.json
+MODIFIED package.json
+MODIFIED packages/kbx-contracts/src/grid.ts
+MODIFIED packages/kbx-contracts/src/status.ts
+MODIFIED packages/kbx-ui/src/components/KbxDataGrid.vue
+MODIFIED packages/kbx-ui/src/components/KbxStatus.vue
+ADDED packages/kbx-ui/src/grid/status.ts
+MODIFIED packages/kbx-ui/src/index.ts
+MODIFIED packages/kbx-ui/src/registry/componentManifest.ts
+MODIFIED scripts/validate-fe-authoritative-outcome-v57.mjs
+ADDED scripts/validate-fe-grid-status-v59.mjs
+MODIFIED scripts/validate-fe-workflow-queue-runtime-v58.mjs
+MODIFIED scripts/validate-kbx.mjs
+ADDED tests/unit/kbx-grid-status.contract.spec.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-core-evidence-sha256.txt
new file mode 100644
index 00000000..cfc22c77
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-core-evidence-sha256.txt
@@ -0,0 +1,6 @@
+8f24946c5d268f70378d0b5ac2446a71ca374747cacf14679edb6f539cd32f6f docs/frontend/KBX-FE-Grid-Status-Dictionary-Hardening-v59.md
+6242698908a9c69be2c9a70237bb5a333f215bee81adc24c518a91ea83a8092f docs/evidence/v59-validate-kbx-full.log
+9c0cf771b745814307f60165ad8bb73e675cd0e9071978c9ecbf675987fcda6e docs/evidence/v59-fe-grid-status-validation.txt
+73581ee7445889f241faa4ace8643fefa9b63d13d9f9e75d7babdf4f2994ddfd docs/evidence/v59-runtime-readiness.json
+6a2ce63e4b14b40bdf040a82d3060bd74f0b452366dad038edc876e2802093d2 docs/evidence/v59-corepack-attempt.log
+ec639b9fd37f116cd4e5b2bb6ce8bff1a46057b6d68ecc346ec645a289f571ca scripts/validate-fe-grid-status-v59.mjs
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-environment-limitations.txt
new file mode 100644
index 00000000..ed168afe
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-environment-limitations.txt
@@ -0,0 +1,12 @@
+KBX v59 Runtime Evidence Limitations
+
+1. node scripts/validate-kbx.mjs: PASS.
+2. node scripts/validate-fe-grid-status-v59.mjs: PASS.
+3. node scripts/validate-typescript-syntax.mjs: PASS (314 TS/Vue script units).
+4. Design debt ratchet: PASS (116 <= 131).
+5. pnpm-lock.yaml is absent.
+6. node_modules is absent.
+7. @playwright/test and vitest are declared but not installed in this artifact environment.
+8. corepack pnpm --version attempted on 2026-08-12 and failed because registry.npmjs.org DNS lookup returned EAI_AGAIN.
+9. Therefore Vite production/demo build, Vitest, and Playwright browser runtime are not claimed as PASS.
+10. Static HTML JavaScript syntax was checked with node --check; this is not a substitute for browser rendering.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-fe-grid-status-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-fe-grid-status-validation.txt
new file mode 100644
index 00000000..8efd132f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-fe-grid-status-validation.txt
@@ -0,0 +1,29 @@
+PASS: Runtime metadata identifies the v59 grid-status build
+PASS: Status semantic contract covers ready/info without overloading pending
+PASS: Grid status columns require an explicit raw-value mapping contract
+PASS: Unknown domain states fail visibly through the pure status resolver
+PASS: KbxStatus renders semantic surfaces and a color-independent unknown-state signal
+PASS: KbxDataGrid status renderer contract: cellRenderer:c.type==='status'?KbxStatus
+PASS: KbxDataGrid status renderer contract: filterValueGetter:c.type==='status'
+PASS: KbxDataGrid status renderer contract: statusDisplay(column,params.value)
+PASS: KbxDataGrid status renderer contract: resolveKbxGridStatus(column.statusMap,value)
+PASS: CSV exports user labels for statuses while non-status values remain raw
+PASS: Product status dictionary includes orderLifecycle
+PASS: Product status dictionary includes orderShipment
+PASS: Product status dictionary includes claim
+PASS: Product status dictionary includes workSeverity
+PASS: Product status dictionary includes workItem
+PASS: Product status dictionary includes reconcile
+PASS: Product status dictionary includes wmsWork
+PASS: Product status dictionary includes experiment
+PASS: Product status dictionary includes externalData
+PASS: Canonical OMS/WMS values map to familiar Korean labels
+PASS: Every application Grid status column has a statusMap; missing: none
+PASS: Demo order projection uses canonical shipment values instead of pre-translated labels
+PASS: Order detail removes page-local status semantics and reuses the product dictionary
+PASS: Unit contract covers canonical preservation and unknown-state visibility
+PASS: Static HTML/JS reference mirrors semantic status and unknown-state behavior
+PASS: Static reference uses text-plus-semantic status styling
+PASS: Static HTML reference identifies the v59 status hardening build
+PASS: Component versions identify the strengthened Grid/Status contracts
+PASS: FE grid status dictionary + unknown-state hardening v59 contract
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness-output.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness-output.txt
new file mode 100644
index 00000000..7c83af18
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness-output.txt
@@ -0,0 +1,19 @@
+{
+ "generatedAt": "2026-08-12T00:02:28.908Z",
+ "node": "v22.16.0",
+ "packageManager": "pnpm@10.33.4",
+ "lockfile": false,
+ "nodeModules": false,
+ "playwrightConfig": true,
+ "playwrightInstalled": false,
+ "vitestInstalled": false,
+ "demoRuntimeScript": true,
+ "e2eScript": true,
+ "status": "blocked",
+ "blockers": [
+ "pnpm-lock.yaml is absent; reproducible dependency install evidence is not available.",
+ "node_modules is absent in this artifact environment.",
+ "@playwright/test is declared but not installed in this artifact environment.",
+ "vitest is declared but not installed in this artifact environment."
+ ]
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness.json
new file mode 100644
index 00000000..0582921d
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v59-runtime-readiness.json
@@ -0,0 +1,19 @@
+{
+ "generatedAt": "2026-08-12T00:04:42.878Z",
+ "node": "v22.16.0",
+ "packageManager": "pnpm@10.33.4",
+ "lockfile": false,
+ "nodeModules": false,
+ "playwrightConfig": true,
+ "playwrightInstalled": false,
+ "vitestInstalled": false,
+ "demoRuntimeScript": true,
+ "e2eScript": true,
+ "status": "blocked",
+ "blockers": [
+ "pnpm-lock.yaml is absent; reproducible dependency install evidence is not available.",
+ "node_modules is absent in this artifact environment.",
+ "@playwright/test is declared but not installed in this artifact environment.",
+ "vitest is declared but not installed in this artifact environment."
+ ]
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-changed-files.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-changed-files.txt
new file mode 100644
index 00000000..aa559de6
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-changed-files.txt
@@ -0,0 +1,38 @@
+MODIFIED README.md
+MODIFIED apps/web/fe-reference/index.html
+MODIFIED apps/web/fe-reference/kbx-fe.js
+MODIFIED apps/web/src/App.vue
+MODIFIED apps/web/src/http/demo/installFrontendDemoApi.ts
+MODIFIED apps/web/src/modules/oms/orders/register/OrderRegisterPage.vue
+MODIFIED apps/web/src/modules/oms/orders/register/order-register.definition.ts
+MODIFIED apps/web/src/modules/oms/orders/register/orderRegisterApi.ts
+MODIFIED apps/web/src/modules/oms/orders/register/useOrderRegistration.ts
+MODIFIED apps/web/src/modules/oms/orders/search/order-list.definition.ts
+MODIFIED apps/web/src/modules/oms/orders/search/orderApi.ts
+MODIFIED apps/web/src/modules/oms/orders/search/useOrderSearch.ts
+MODIFIED apps/web/src/registry/statusCatalog.ts
+MODIFIED backend/Modules/OMS/Orders/Confirm/Endpoint.cs
+MODIFIED backend/Modules/OMS/Orders/Get/Endpoint.cs
+ADDED backend/Modules/OMS/Orders/OrderLifecycleStatus.cs
+ADDED backend/Modules/OMS/Orders/OrderShipmentStatus.cs
+MODIFIED backend/Modules/OMS/Orders/Register/Handler.cs
+MODIFIED backend/Modules/OMS/Orders/Ship/Endpoint.cs
+ADDED docs/evidence/v60-changed-files.txt
+ADDED docs/evidence/v60-corepack-attempt.log
+ADDED docs/evidence/v60-design-debt.log
+ADDED docs/evidence/v60-environment-limitations.txt
+ADDED docs/evidence/v60-runtime-readiness.json
+ADDED docs/evidence/v60-status-canonical-validation.txt
+ADDED docs/evidence/v60-typescript-syntax.log
+ADDED docs/evidence/v60-validate-kbx-full.log
+ADDED docs/frontend/KBX-FE-Status-Canonical-Contract-Hardening-v60.md
+MODIFIED docs/release/migration-guide.md
+MODIFIED generated/release-impact.json
+MODIFIED generated/release-notes.md
+MODIFIED generated/screen-manifest.json
+MODIFIED governance/release.json
+MODIFIED package.json
+MODIFIED scripts/validate-fe-grid-status-v59.mjs
+MODIFIED scripts/validate-kbx.mjs
+ADDED scripts/validate-status-canonical-v60.mjs
+ADDED tests/unit/kbx-order-status-canonical.contract.spec.ts
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-core-evidence-sha256.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-core-evidence-sha256.txt
new file mode 100644
index 00000000..92df4a4d
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-core-evidence-sha256.txt
@@ -0,0 +1,4 @@
+a6baecfe4c3acfc79ce9181065828096cde7f13f6b40e66df400bea6926e214a docs/evidence/v60-validate-kbx-full.log
+633ea799b3335437fc3a6b9370b9ce8cfdb7d33ce9b86b2fa43b88ad3f72ad71 docs/evidence/v60-status-canonical-validation.txt
+53afcf622e8afcde1a488cedc7d3d49f98876e18e8f3c9d1e39cc2dbdeeb033d docs/evidence/v60-runtime-readiness.json
+063b6357efc44318812f25da0eed348ce06202bda7ceea0e8eae0c0d45d5221a docs/frontend/KBX-FE-Status-Canonical-Contract-Hardening-v60.md
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-environment-limitations.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-environment-limitations.txt
new file mode 100644
index 00000000..648cf673
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-environment-limitations.txt
@@ -0,0 +1,13 @@
+KBX v60 runtime evidence limitations
+
+- Full repository static/governance regression: PASS.
+- TypeScript/Vue syntax transpile: PASS.
+- Design debt ratchet: PASS.
+- Browser/Vite/Vitest/Playwright runtime evidence: BLOCKED in this artifact environment.
+- pnpm-lock.yaml: absent.
+- node_modules: absent.
+- @playwright/test / vitest: declared but not installed.
+- `corepack pnpm --version`: failed while fetching pnpm@10.33.4 because registry.npmjs.org DNS returned EAI_AGAIN.
+- dotnet CLI: unavailable in this container, therefore changed ASP.NET Core code was not compiled here.
+
+This artifact intentionally does not report Runtime E2E or backend compile PASS.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-runtime-readiness.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-runtime-readiness.json
new file mode 100644
index 00000000..974ea5e6
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-runtime-readiness.json
@@ -0,0 +1,19 @@
+{
+ "generatedAt": "2026-08-12T10:19:18.977Z",
+ "node": "v22.16.0",
+ "packageManager": "pnpm@10.33.4",
+ "lockfile": false,
+ "nodeModules": false,
+ "playwrightConfig": true,
+ "playwrightInstalled": false,
+ "vitestInstalled": false,
+ "demoRuntimeScript": true,
+ "e2eScript": true,
+ "status": "blocked",
+ "blockers": [
+ "pnpm-lock.yaml is absent; reproducible dependency install evidence is not available.",
+ "node_modules is absent in this artifact environment.",
+ "@playwright/test is declared but not installed in this artifact environment.",
+ "vitest is declared but not installed in this artifact environment."
+ ]
+}
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-status-canonical-validation.txt b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-status-canonical-validation.txt
new file mode 100644
index 00000000..d393e6e3
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/evidence/v60-status-canonical-validation.txt
@@ -0,0 +1,42 @@
+PASS: Runtime metadata identifies the v60 canonical-status build
+PASS: OMS backend lifecycle constants are explicit canonical codes
+PASS: Order GET returns canonical database status without server-side label translation
+PASS: Order register persists and returns DRAFT through the shared backend constant
+PASS: Order confirm validates and returns canonical lifecycle codes
+PASS: OMS backend shipment projection vocabulary is explicit canonical code
+PASS: Ship request requires CONFIRMED aggregate lifecycle state
+PASS: Ship request also requires READY shipment projection state for ids and filter modes
+PASS: Ship request no longer mixes shipment projection states into aggregate lifecycle or fabricates a lifecycle transition
+PASS: Order lifecycle catalog maps canonical code through familiar label: { value:'NEW', label:'신규'
+PASS: Order lifecycle catalog maps canonical code through familiar label: { value:'DRAFT', label:'작성'
+PASS: Order lifecycle catalog maps canonical code through familiar label: { value:'CONFIRMED', label:'확정'
+PASS: Order lifecycle catalog maps canonical code through familiar label: { value:'SHIPPED', label:'출고완료'
+PASS: Order lifecycle dictionary no longer uses display labels as raw values
+PASS: Frontend lifecycle catalog covers backend status DRAFT
+PASS: Frontend lifecycle catalog covers backend status CONFIRMED
+PASS: Frontend lifecycle catalog covers backend status ALLOCATED
+PASS: Frontend lifecycle catalog covers backend status PICKING
+PASS: Frontend lifecycle catalog covers backend status CHECKED
+PASS: Frontend lifecycle catalog covers backend status SHIPPED
+PASS: Status catalog owns select-option projection and canonical filter normalization
+PASS: Order transaction command/workflow uses canonical status: from:['DRAFT']
+PASS: Order transaction command/workflow uses canonical status: to:'CONFIRMED'
+PASS: Order transaction command/workflow uses canonical status: allowedStatuses:['NEW','DRAFT']
+PASS: Order transaction command/workflow uses canonical status: allowedStatuses:['DRAFT']
+PASS: Order transaction command/workflow uses canonical status: permissionByStatus:{NEW:'oms.order.create',DRAFT:'oms.order.write'}
+PASS: Order transaction policy does not use Korean display labels as machine state
+PASS: Unsaved order state is an explicit client NEW code before server DRAFT
+PASS: Transaction context displays catalog labels while commands receive raw canonical status
+PASS: Order status search options are generated from the same catalog as Grid rendering
+PASS: Route and saved-search status values are validated against the canonical shipment catalog
+PASS: Order search no longer carries a second hard-coded status allow-list
+PASS: Demo order detail/register/confirm use canonical lifecycle codes
+PASS: Demo projection uses shipmentStatus as its single query/bulk source of truth
+PASS: Demo confirm reproduces authoritative DRAFT-only transition failure
+PASS: Demo detail fallback translates projection semantics into lifecycle canonical codes instead of reusing shipment state blindly
+PASS: Static HTML/JS reference stores OMS statuses as canonical codes
+PASS: Static reference keeps familiar labels and migrates legacy saved display values to canonical codes
+PASS: Static reference separates shipment and lifecycle display semantics
+PASS: Static HTML reference identifies the v60 canonical-status build
+PASS: Unit contract covers raw/display separation, catalog options and invalid persisted display labels
+PASS: OMS canonical status API + Grid/Filter/Workflow parity hardening v60 contract
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/excel-import-v5.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/excel-import-v5.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/excel-import-v5.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/excel-import-v5.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/executable-scenario-governance-v18.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/executable-scenario-governance-v18.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/executable-scenario-governance-v18.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/executable-scenario-governance-v18.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/experiment-rollout-playbook-v17.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/experiment-rollout-playbook-v17.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/experiment-rollout-playbook-v17.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/experiment-rollout-playbook-v17.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-api-notes-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-api-notes-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-api-notes-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-api-notes-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-data-governance-v21.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-data-governance-v21.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-data-governance-v21.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-data-governance-v21.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-integration-resilience-v19.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-integration-resilience-v19.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/external-integration-resilience-v19.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/external-integration-resilience-v19.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/failure-recovery-matrix-v9.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/failure-recovery-matrix-v9.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/failure-recovery-matrix-v9.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/failure-recovery-matrix-v9.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/field-dictionary-governance-v13.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/field-dictionary-governance-v13.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/field-dictionary-governance-v13.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/field-dictionary-governance-v13.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/field-key-migration-v13.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/field-key-migration-v13.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/field-key-migration-v13.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/field-key-migration-v13.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/foundation-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/foundation-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/foundation-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/foundation-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/foundation-v7-governance.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/foundation-v7-governance.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/foundation-v7-governance.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/foundation-v7-governance.md
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Authoritative-Outcome-Runtime-Evidence-v57.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Authoritative-Outcome-Runtime-Evidence-v57.md
new file mode 100644
index 00000000..3c7a616e
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Authoritative-Outcome-Runtime-Evidence-v57.md
@@ -0,0 +1,140 @@
+# KBX FE Authoritative Outcome & Runtime Evidence Hardening v57
+
+## 1. 냉정한 진단
+
+v56까지 KBX의 공통 Template, Overlay Focus, Excel 6단계, Home Triage, WMS retry/idempotency 계약은 문서와 정적 회귀 기준에서 상당히 성숙했다. 그러나 현장 QA 관점에서는 두 종류의 위험이 남아 있었다.
+
+첫째, **Transport Success와 Business Success가 혼재**했다. HTTP 200이어도 Backend가 `ResolvedCount=0, RejectedCount=1` 또는 `CreatedOrUpdatedCount=0, SkippedCount=1`을 반환할 수 있는데 일부 FE가 응답 body를 버리거나 성공 Telemetry를 기록할 수 있었다. 업무시스템에서 이는 "통신 성공"을 "업무 성공"으로 오해하는 전형적인 운영 사실성 결함이다.
+
+둘째, **테스트 코드 존재와 실행 가능한 테스트 체계가 혼재**했다. Playwright spec은 많았지만 root에 `@playwright/test`, baseURL, webServer, viewport project가 없었다. 상대 URL을 쓰는 E2E가 실제 CI에서 어떻게 실행되는지가 계약화되지 않았다. `packageManager: pnpm@10` 역시 Corepack이 요구하는 정확한 semver가 아니었다.
+
+v57은 새 추상화를 추가하는 대신 이 두 종류의 "마지막 10%"를 닫는다.
+
+## 2. T06 — Authoritative Operations Outcome
+
+### 문제
+
+`ClaimWorkItemsResponse`는 이미 `claimedCount/skippedCount`를 제공했지만 Resolve 결과도 동일한 수준으로 사용자에게 남아야 한다. 기존 구조에서는 resolve HTTP 200 후 실제 `rejectedCount`가 있어도 Drawer가 닫히고 성공 Telemetry가 남을 수 있었다.
+
+### 변경
+
+- `ResolveWorkItemsResponse(resolvedCount, rejectedCount)`를 실제 Page가 소비
+- Claim/Resolve를 하나의 `actionReceipt`로 통합
+- 요청/성공/건너뜀 또는 거절 건수를 persistent inline receipt로 표시
+- partial result이면 `최신 상태 조회`를 명시
+- 결과 Receipt로 Focus 이동
+- `exception.resolved` Telemetry는 `resolvedCount > 0`인 경우에만 기록
+
+즉 HTTP status는 transport outcome이고, 업무 성공 여부는 response body의 authoritative count가 결정한다.
+
+## 3. T07 — Reconcile Outcome & Recovery
+
+### 문제
+
+Backend의 Create Exceptions 응답은 `CreatedOrUpdatedCount/SkippedCount`를 반환한다. FE가 이를 `unknown`으로 버리면 실행시점에 이미 정상/해결 상태로 바뀐 Row를 사용자가 "등록 성공"으로 오해할 수 있다.
+
+### 변경
+
+- `CreateReconcileExceptionsResponse`를 명시적 Type으로 승격
+- 요청/생성·갱신/건너뜀 count 표시
+- partial이면 Receipt Focus + `최신 대사 조회`
+- 생성된 항목이 있으면 `예외 센터 보기`
+- 원천 OMS/WMS 값은 Reconcile 화면에서 수정하지 않음
+
+Reconcile은 데이터 수정화면이 아니라 Evidence → Exception Workflow 전환 화면으로 유지한다.
+
+## 4. T09 — Shared PDA Scope-Race Hardening
+
+### 문제
+
+v56에서 retry queue 자체는 tenant/user scope별로 분리했지만, Scan request가 진행 중인 순간 사용자가 교체되면 callback 시점의 "현재 scope"와 command 발행 시점 scope가 달라질 수 있었다.
+
+이 상황에서 response-loss command가 새 사용자의 queue에 들어가거나 이전 작업의 server confirmation이 새 사용자 화면에 나타나는 것은 공용 PDA에서 심각한 교대근무 경계 침범이다.
+
+### 변경
+
+- `ScopedScanMutation { command, scope }`
+- Scan 발행 시 scope snapshot
+- success/error 모두 captured scope로 retry item 제거/등록
+- callback 시 현재 scope와 다르면 현재 UI/task/lastConfirmedScan을 변경하지 않음
+- retry flush 전체 loop도 시작 scope에 pin
+- scope change 시 task telemetry abandon, last confirmed scan/overlay context reset
+
+Idempotency는 중복 실행 방지이고, scope isolation은 사용자/tenant 경계 보호다. 둘을 별개로 유지한다.
+
+## 5. Demo API — Runtime Contract Repair
+
+정적 검증이 통과해도 Demo API가 실제 DTO와 다르면 Browser E2E는 제품 코드를 검증하지 못한다.
+
+v57은 Operations demo data를 `sourceModule/sourceType/sourceId/referenceNo/sourceScreenId/code/severity/status/owner/ageMinutes/actions` 계약으로, Reconcile data를 `expectedValue/actualValue/differenceValue/reason/status/summary` 계약으로 정렬했다.
+
+Demo Resolve도 authoritative state 변경 시 version을 증가시키고, Reconcile Create Exceptions는 `createdOrUpdatedCount/skippedCount`를 반환한다.
+
+Demo는 별도 제품이 아니라 실제 FE 계약을 재현하는 실행 fixture여야 한다.
+
+## 6. Browser QA Runner 계약
+
+새 `playwright.config.ts`는 다음을 고정한다.
+
+- 기본 Demo URL: `http://127.0.0.1:4173`
+- 외부 `KBX_E2E_BASE_URL`이 없으면 `pnpm dev:web:demo` 자동 기동
+- Desktop Chromium: 1440×900
+- WMS Mobile Chromium: 390×844
+- trace: retain-on-failure
+- screenshot: only-on-failure
+- video: retain-on-failure
+
+Root scripts는 `test:unit`, `test:e2e`, `test:e2e:desktop`, `test:e2e:wms`, `test:fe`를 제공한다.
+
+추가 E2E는 다음 운영 사고를 직접 모델링한다.
+
+1. Operations HTTP 200 + `rejectedCount=1` → 성공으로 가장하지 않음
+2. Reconcile HTTP 200 + `skippedCount=1` → partial receipt 및 복구
+3. WMS 첫 Scan response loss → 동일 idempotency key로 1회 안전 재전송 → server confirmed truth 이후에만 최근 확인 갱신
+
+## 7. CI/Release Gate
+
+`.gitea/workflows/kbx-quality-gate.yaml`은 lockfile 존재 시:
+
+`install → typecheck → unit → demo build → Chromium install → Playwright E2E`
+
+를 실행한다.
+
+Release Readiness는 lockfile이 없으면 runtime evidence를 BLOCKED로 기록하고 실패한다. 운영 배포 후보가 "정적 계약 PASS"만으로 runtime 검증을 통과한 것처럼 승격되지 않게 한다.
+
+## 8. 현재 검증 결과
+
+`node scripts/validate-kbx.mjs` 전체 PASS.
+
+- 161 tokens
+- 20 screens
+- 86 components
+- 34 core APIs
+- 310 TypeScript/Vue script units
+- T01~T09 9/9
+- Design Debt 116 <= 131
+- Design-Code Parity PASS
+- Release Governance major PASS
+
+## 9. Runtime 제한
+
+현재 artifact 환경은 npm registry DNS lookup이 `EAI_AGAIN`으로 실패한다. 정확한 `pnpm@10.33.4`를 Corepack이 내려받지 못하므로 lockfile 생성/의존성 설치/Playwright browser runtime 실행을 완료하지 못했다.
+
+따라서 다음은 **PASS라고 주장하지 않는다**.
+
+- `pnpm install --frozen-lockfile`
+- Vue production typecheck/build
+- Vitest runtime suite
+- Playwright Desktop/WMS E2E
+
+실행계약은 구성했지만 Runtime Evidence는 환경이 준비된 CI/개발 머신에서 반드시 생성해야 한다.
+
+## 10. 다음 P0
+
+1. Registry 접근 가능한 환경에서 `pnpm-lock.yaml` 생성 및 고정
+2. Desktop 1440×900 Golden Screen runtime suite 실행
+3. WMS 390×844 response-loss / offline / operator-scope-switch 시나리오 실행
+4. Playwright trace/screenshot/video를 Release Evidence로 보존
+5. Browser PASS 이후에만 "현장 사용 PASS" 상태로 승격
+
+다음 단계에서도 새로운 UI Framework보다는 이 Runtime Evidence와 실제 업무 완료율을 우선한다.
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Completion-v37.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Completion-v37.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Completion-v37.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Completion-v37.md
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Golden-Screen-Interaction-Hardening-v53.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Golden-Screen-Interaction-Hardening-v53.md
new file mode 100644
index 00000000..83fdf10a
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Golden-Screen-Interaction-Hardening-v53.md
@@ -0,0 +1,485 @@
+# KBX Foundation v53 — FE Golden Screen Interaction Hardening
+
+## 1. 작업 목적
+
+v53의 목표는 v52에서 정리한 화면 Anatomy를 **실제 사용자가 조작하는 Vue/HTML/JavaScript 업무 흐름**으로 한 단계 더 내리는 것이다.
+
+새 Backend 추상화나 Runtime UI Engine을 늘리지 않는다. 기존 KBX 계약을 유지한 채 다음 네 가지를 우선한다.
+
+1. Home이 모듈 선택 이후 실제 업무 탐색과 예외 압력까지 연결되어야 한다.
+2. T02/T03/T06/T07의 Section 안에서 사용자가 할 수 있는 Action이 예측 가능한 위치에 있어야 한다.
+3. 얇은 Vertical Slice는 Lookup, Grid Editing, Dirty, Validation, Keyboard를 실제 FE 코드로 구현하되 Server Command가 없는 상태를 성공으로 가장하지 않는다.
+4. WMS T09는 작업자가 다음 Scan/대기/복구 행동을 즉시 판단할 수 있어야 한다.
+
+근거 문서: `KBX Business UX-AX Standard v1.0`, `KBX Design System v1.0`, `KBX Reference Screens v1.0`, `KBX Implementation Contract v1.0`.
+
+---
+
+## 2. 냉정한 진단
+
+### 2.1 컴포넌트 수는 이미 충분하다
+
+현재 문제는 `KbxButton`, `KbxLookup`, `KbxDataGrid`, Template의 개수가 부족한 것이 아니다. 공통 계약과 Manifest는 강하다. 문제는 **화면에서 계약을 얼마나 실제 업무행동으로 연결했는가**다.
+
+계약만 강하고 조작이 비어 있으면 다음 문제가 생긴다.
+
+- 버튼은 보이지만 실제 Command가 없다.
+- 상태가 바뀌는 것처럼 보이지만 Server Domain truth가 아니다.
+- Grid는 보이지만 행 추가/Lookup/오류 이동이 끊긴다.
+- Home에 정보가 많아도 키보드로 업무영역을 빠르게 좁히기 어렵다.
+- WMS가 메시지는 보여도 작업자가 다음 행동을 즉시 알기 어렵다.
+
+### 2.2 가장 위험한 결함은 “가짜 성공”이다
+
+Purchase / Inventory Move 같은 얇은 화면에서 Server Command 연결 없이 Client가 workflow status를 바꾸는 방식은 시연 화면에서는 그럴듯하지만 업무시스템에서는 위험하다.
+
+```text
+사용자가 확정 클릭
+→ Client status = Confirmed
+→ 실제 DB/Domain은 미변경
+```
+
+이것은 단순 미완성보다 나쁘다. 화면이 잘못된 업무 사실을 전달하기 때문이다.
+
+v53에서는 로컬 입력, Lookup, Grid 편집, Validation, Dirty, Keyboard는 실제로 동작시키되 Server Command가 없는 저장/확정/출고/입고는 **fail-closed**로 처리한다. UI는 “상태를 변경하지 않았습니다”라고 명시한다.
+
+### 2.3 Home은 “메뉴 수”보다 “업무 압력”을 보여줘야 한다
+
+v52 Home Module Rail은 screen/favorite/open count를 제공했다. 하지만 실무에서 사용자는 화면 개수보다 **지금 확인할 일이 어디에 몰렸는가**를 먼저 봐야 한다.
+
+따라서 v53은 동일 Attention source에서 모듈별 확인 필요 건수를 계산한다. 별도 집계 truth를 만들지 않는다.
+
+### 2.4 Section Action은 페이지마다 흩어지면 안 된다
+
+Master/Transaction/Queue/Reconcile에서 해당 작업면의 행 추가, 오류 이동, 선택 작업 같은 Action이 임의 위치에 생기면 Predictable Layout이 무너진다.
+
+따라서 Section Header가 count/unit뿐 아니라 표준 action slot을 소유하게 했다.
+
+---
+
+## 3. v53 적용 내용
+
+## 3.1 Home — Attention-aware Module Rail + Keyboard
+
+`KbxHomePage.vue`의 module rail을 다음처럼 강화했다.
+
+- `전체 / OMS / ERP / WMS / 공통`
+- 화면 수
+- `확인 필요` 건수
+- 즐겨찾기 수
+- 열린 Workspace 수
+- ArrowLeft / ArrowRight
+- Home / End
+- 선택 후 `kbx-home-explorer` scroll + focus
+- stable `data-home-module`
+- forced-colors에서 active/focus cue 유지
+
+중요한 점은 module attention을 별도 하드코딩하지 않고 Home Attention Queue와 **동일 truth**에서 파생한다는 것이다.
+
+Home의 판단 흐름은 다음으로 정리된다.
+
+```text
+검색
+→ 운영상태
+→ 업무영역 + 확인 필요 압력
+→ 확인 필요
+→ 바로 시작
+→ 전체 업무 Explorer
+```
+
+---
+
+## 3.2 Standard Section Header — Count Unit + Action Surface
+
+`KbxSectionHeader`에 `countUnit`을 추가했다.
+
+예:
+
+```text
+주문 상품 · 3종
+품목 목록 · 218개
+현재 작업 Queue · 42건
+```
+
+화면이 매번 `건/개/종` markup을 직접 만들지 않는다.
+
+다음 Template에는 표준 Section Action slot을 추가했다.
+
+- `KbxMasterPage`: `list-actions`, `detail-actions`
+- `KbxTransactionPage`: `header-actions`, `detail-actions`
+- `KbxQueuePage`: `queue-actions`
+- `KbxReconcilePage`: `comparison-actions`
+
+목적은 Slot 자유도를 늘리는 것이 아니라 **업무면 안의 Action 위치를 고정**하는 것이다.
+
+---
+
+## 3.3 Golden Screen — OMS 주문등록
+
+`OMS-ORD-002`에 다음을 보강했다.
+
+### 현재 Context
+
+화면 상단 Context에 다음 정보를 명시한다.
+
+- 현재 주문 / 신규
+- 현재 상태
+- Dirty 여부
+- 주문 상품 수
+- 현재 Validation 오류 수
+
+### Detail Work Surface
+
+`주문 상품` Section Header에:
+
+- `행 추가`
+- `첫/다음 오류`
+
+Action을 배치했다.
+
+`행 추가` 후 품목코드 셀로 Focus가 이동한다.
+
+`오류 이동`은 Grid의 `focusError()` 계약을 사용한다.
+
+상세 건수는 일반 `건`이 아니라 업무 의미에 맞는 `종`을 사용한다.
+
+---
+
+## 3.4 ERP 구매등록 — 얇은 Wrapper에서 실제 FE Draft로
+
+기존의 매우 얇은 조립 화면을 실제 입력 가능한 Draft FE로 보강했다.
+
+구현 범위:
+
+- `KbxTransactionPage`
+- `KbxFormSection / KbxFormGrid`
+- 거래처 Lookup
+- 창고 Lookup
+- Item F2 Lookup
+- Item code 직접 입력 + `resolveByCode`
+- 행 추가 / 행 복제
+- 수량 / 단가 편집
+- 금액 즉시 재계산
+- `KbxValidationError`
+- Header/Row validation
+- Dirty state
+- Workspace navigation guard
+- F8 save intent
+- 오류 Focus
+
+Validation 예:
+
+```text
+거래처 필수
+입고창고 필수
+최소 1개 품목
+품목 필수
+수량 > 0
+단가 >= 0
+```
+
+### 중요한 보안/정합성 경계
+
+Server Save/Confirm Command가 Foundation에 연결되지 않은 상태에서 다음을 하지 않는다.
+
+```text
+status.value = CONFIRMED
+저장 성공 Toast
+가짜 Audit
+가짜 Domain commit
+```
+
+대신 사용자가 저장/확정을 시도하면 서버 Command가 연결되지 않았으며 **업무 상태를 변경하지 않았음**을 명시한다.
+
+즉, v53의 Purchase는 “실제 FE Draft interaction”까지 완성했지만 “End-to-End 업무 완료”라고 주장하지 않는다.
+
+---
+
+## 3.5 ERP 재고이동 — 실제 입력과 즉시 UX 검증
+
+Inventory Move도 동일 원칙으로 보강했다.
+
+구현:
+
+- 출발창고 / 도착창고 Lookup
+- 품목 F2 Lookup / code resolve
+- Item metadata의 available quantity 반영
+- 행 추가 / 복제 / Focus
+- 이동수량 편집
+- Dirty / F8 / Workspace guard
+- Validation summary / cell focus
+
+즉시 UX validation:
+
+```text
+출발창고 필수
+도착창고 필수
+출발창고 != 도착창고
+품목 필수
+이동수량 > 0
+이동수량 <= 가용재고
+```
+
+하지만 최종 재고 정합성은 Client 값으로 확정하지 않는다. Server Domain validation 이전에 `확정/출고/입고완료` state를 Client에서 만들지 않는다.
+
+---
+
+## 3.6 WMS Picking — 다음 행동 중심 T09
+
+WMS Picking의 가장 중요한 UX는 “예쁜 Mobile 화면”이 아니라 **작업자가 지금 무엇을 해야 하는가**다.
+
+v53은 `KbxWmsMobilePage`의 `taskContext`와 `instruction`을 실제 화면에 연결했다.
+
+별도 `notice` surface에서 다음을 구분한다.
+
+- 온라인 처리 메시지
+- 오프라인
+- 전송 대기 Command
+- 동기화 중
+- Server 확인 대기
+
+작업 본문에는 `다음 행동`을 명시한다.
+
+예:
+
+```text
+위치 스캔
+상품 스캔
+서버 확인 중
+피킹 완료
+스캔 대기
+```
+
+Server 응답 대기 중에는 중복 Scan을 하지 말라는 행동 지침을 표시한다.
+
+Offline + pending command 상태에서는 동일 Command Key를 이용한 안전한 replay 원칙을 설명하고, Server validation이 필요한 Scan을 성공으로 가장하지 않는다.
+
+---
+
+## 3.7 Queue / Reconcile 실사용 Action 위치
+
+`WMS-WORK-001`:
+
+- Queue Section Header에 `선택 작업 시작`
+- 선택 0건이면 disabled
+
+`COMMON-RECON-001`:
+
+- Comparison Section Header에 `선택건 예외 등록`
+- 선택 0건이면 disabled
+
+화면의 Command Bar를 무작정 늘리는 대신 해당 work surface의 contextual action으로 배치했다.
+
+---
+
+## 3.8 순수 HTML / JavaScript Reference parity
+
+`apps/web/fe-reference`에도 v53 Home interaction을 반영했다.
+
+- module별 attention count
+- ArrowLeft / ArrowRight / Home / End
+- 선택 후 explorer scroll/focus
+- focus-visible
+- v53 build label
+
+Vue만 계약을 갖고 순수 FE Reference가 낡는 이중화를 방지한다.
+
+---
+
+## 4. Theme 적용 원칙
+
+v51~v52의 Module Identity Theme을 그대로 유지한다.
+
+- OMS: Blue
+- ERP: Violet
+- WMS: Teal
+- COMMON: Neutral
+
+이 색은 **Navigation / Chrome / Module Context identification** 용도다.
+
+다음 의미색과 분리한다.
+
+- success
+- warning
+- danger
+- info
+- disabled
+
+즉, WMS가 Teal이라고 “성공”이 Teal인 것은 아니다. Domain state와 module identity를 같은 색 체계로 합치지 않는다.
+
+Dark / forced-colors에서도 동일한 업무 의미와 Keyboard contract를 유지한다.
+
+---
+
+## 5. 보안·업무 Truth 원칙
+
+v53에서 가장 중요한 보강은 보이는 보안보다 **truthful UI**다.
+
+### Frontend가 할 수 있는 것
+
+- Required/format/cross-field 1차 UX validation
+- Lookup resolve
+- Grid editing
+- Dirty state
+- 작업 전 Command intent
+- 오류 위치 이동
+- Permission 기반 표시
+
+### Frontend가 최종 결정하면 안 되는 것
+
+- 재고 확정
+- 구매 확정
+- 재고이동 workflow transition
+- 출고/입고 성공
+- 권한 최종 승인
+- Concurrency 승패
+- Audit truth
+
+최종 truth는 Server/Domain/DB constraint가 책임진다.
+
+Server Command가 없을 때 Client state machine으로 성공을 흉내 내지 않는 것이 v53의 명시적 정책이다.
+
+---
+
+## 6. 검증 결과
+
+실행:
+
+```bash
+node scripts/validate-kbx.mjs
+```
+
+전체 PASS.
+
+주요 결과:
+
+- Design tokens: **161**
+- Screen definitions: **20**
+- Component definitions: **85**
+- Core component APIs: **34**
+- Navigation entries: **16**
+- T01~T09 Recipe verification: **9/9**
+- TypeScript/Vue script syntax: **308 units PASS**
+- v41~v52 FE regression: **PASS**
+- 신규 `validate-fe-golden-interaction-v53.mjs`: **PASS**
+- Component catalog: **34 core APIs / 70 entries**
+- Design Debt Ratchet: **116 <= 131 PASS**
+- Design-Code Parity: **161 tokens / 34 core / 85 total PASS**
+- Release Governance: **major PASS**
+
+전체 로그:
+
+`docs/evidence/v53-validate-kbx-full.log`
+
+---
+
+## 7. Runtime 검증 제한
+
+현재 작업 환경에서:
+
+- `node`: 사용 가능
+- `npm`: 사용 가능
+- `pnpm`: 없음
+- root `node_modules`: 없음
+- `apps/web/node_modules`: 없음
+
+따라서 이번 실행에서 다음을 수행했다고 주장하지 않는다.
+
+- Vite production build
+- Vitest browser/component runtime
+- Playwright 실제 Vue runtime E2E
+
+정적 generator/contract/syntax/regression gate와 실제 browser runtime 검증은 별개의 증거다.
+
+---
+
+## 8. 다음 우선순위
+
+### P0 — Dependency 복원 후 Golden Screen Browser QA
+
+화면:
+
+1. `OMS-ORD-001`
+2. `OMS-ORD-002`
+3. `WMS-PICK-001`
+
+Viewport/환경:
+
+- 1440×900
+- 1280×720
+- Light
+- Dark
+- forced-colors
+- WMS 390×844
+
+검증:
+
+- Mouse
+- Keyboard only
+- Focus order
+- Drawer restore
+- Grid selection/edit
+- Lookup F2/Enter/Esc
+- Bulk result
+- Validation recovery
+- WMS duplicate/network/retry
+
+### P0 — Purchase / Inventory Move 실제 Server Command 연결
+
+현재 FE Draft contract는 유지한다.
+
+연결할 것은:
+
+```text
+Save / Confirm / Move Confirm / Ship / Receive
+↓
+FastEndpoint
+↓
+Application Command
+↓
+Domain validation
+↓
+PostgreSQL transaction
+↓
+Audit + Outbox
+```
+
+연결 이후에도 Client가 authoritative state를 먼저 바꾸면 안 된다.
+
+### P1 — OMS-ORD-001 실전 밀도 고도화
+
+다음 단계는 새 컴포넌트 추가보다:
+
+- all-filtered selection
+- Bulk partial failure recovery
+- Drawer context continuity
+- saved layout
+- Excel export/import continuity
+- quick filter exception pressure
+
+을 실제 Browser 시나리오로 검증하는 것이다.
+
+---
+
+## 9. 최종 판단
+
+v53에서 중요한 변화는 코드량 증가가 아니다.
+
+```text
+Template이 있다
+→ Template 안에서 행동 위치가 예측 가능하다
+
+Button이 있다
+→ 실제 FE interaction이 있다
+
+Workflow가 보인다
+→ Server가 없으면 성공을 가장하지 않는다
+
+Home에 메뉴가 있다
+→ 지금 확인할 업무 압력까지 보인다
+
+WMS에 메시지가 있다
+→ 작업자가 다음 행동을 즉시 안다
+```
+
+이 방향이 유지되어야 KBX가 “BE 계약이 강한 UI Framework”를 넘어 **실제 현장 사용자가 빠르고 안전하게 쓰는 업무 Frontend**가 된다.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Grid-Status-Dictionary-Hardening-v59.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Grid-Status-Dictionary-Hardening-v59.md
new file mode 100644
index 00000000..fb952947
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Grid-Status-Dictionary-Hardening-v59.md
@@ -0,0 +1,240 @@
+# KBX FE Grid Status Dictionary Hardening v59
+
+## 1. 냉정한 진단
+
+v58까지 `KbxDataGrid`의 `type:'status'`는 사실상 정렬 힌트였다. 가운데 정렬은 했지만 다음을 보장하지 못했다.
+
+- Domain/API raw value와 사용자 Label 분리
+- 제품 공통 Status Dictionary
+- semantic 상태 색상/텍스트 일관성
+- Filter에서 사용자 Label 검색
+- CSV Export에서 사용자 Label 출력
+- unknown/new 상태 fail-safe
+- Demo API와 실제 Backend의 canonical value parity
+
+그 결과 `READY`, `IN_PROGRESS`, `mismatch` 같은 canonical 상태가 화면에 직접 노출되거나, 화면마다 문자열을 별도 번역하는 기술부채가 생길 수 있었다. 이는 KBX Design System의 Domain 상태와 UI Semantic 상태 분리, Status 난립 방지, 색상 이외 상태표시 원칙과 맞지 않는다.
+
+## 2. v59 원칙
+
+```text
+Domain/API raw value
+ ↓ (변경하지 않음)
+KbxGridStatusMap
+ ↓
+resolveKbxGridStatus()
+ ↓
+Label + Semantic + Unknown 여부
+ ↓
+KbxStatus / Filter / CSV
+```
+
+UI는 raw value를 mutate하지 않는다. Search/API/Domain contract는 canonical 값을 사용하고 화면 렌더링만 사용자 친화 Label로 변환한다.
+
+## 3. KbxGridStatusMap
+
+`KbxGridColumn`에 `statusMap`을 추가했다.
+
+```ts
+interface KbxGridStatusMap {
+ definitions: readonly KbxStatusDefinition[]
+ unknownLabel?: string
+}
+```
+
+Application의 `type:'status'` Grid Column은 모두 명시적인 `statusMap`을 가져야 한다. v59 Gate가 이를 전체 `apps/web/src`에서 검사한다.
+
+## 4. 순수 Resolver
+
+`packages/kbx-ui/src/grid/status.ts`에 `resolveKbxGridStatus()`를 추가했다.
+
+역할은 한 가지다.
+
+- 입력 raw value 보존
+- dictionary lookup
+- 사용자 label 반환
+- semantic 반환
+- dictionary에 없는 값은 `unknown=true`
+
+unknown 값은 숨기지 않는다.
+
+```text
+정의되지 않음 · NEW_VENDOR_STATE
+```
+
+으로 노출하고 warning semantic + dashed border를 사용한다. 새로운 Backend 상태가 FE보다 먼저 배포되어도 “그럴듯한 정상 상태”로 위장되지 않는다.
+
+## 5. KbxDataGrid 1.6.0
+
+Status Column은 이제 다음 계약을 가진다.
+
+### Cell
+
+`KbxStatus` renderer 사용.
+
+### Filter
+
+사용자에게 보이는 Label을 대상으로 검색한다. Row raw value는 변경하지 않는다.
+
+### CSV
+
+status는 사용자 Label로 출력한다. 다른 값은 canonical/raw value를 유지한다.
+
+### Unknown
+
+dictionary 미등록 값은 명시적인 unknown 상태로 보여준다.
+
+## 6. KbxStatus 1.1.0
+
+기존 dot-only 의미표현을 보강했다.
+
+- `ready`
+- `info`
+- `pending`
+- `processing`
+- `completed`
+- `warning`
+- `hold`
+- `error`
+- `cancelled`
+- `disabled`
+
+semantic에 따라 Dot + Text + Surface + Border를 함께 사용한다. 색상만으로 의미를 전달하지 않는다.
+
+unknown 상태는 `data-unknown`과 `정의되지 않음` 텍스트를 함께 사용한다.
+
+## 7. 제품 Status Catalog
+
+`apps/web/src/registry/statusCatalog.ts`를 제품 공통 UI Dictionary로 추가했다.
+
+현재 포함:
+
+- OMS 주문 Lifecycle
+- OMS 주문 출고상태
+- OMS 재고상태
+- OMS Claim
+- Common Work Severity
+- Common Work Item
+- Reconcile
+- WMS Work
+- UX Experiment
+- External Data Freshness
+
+업무별 상태를 Shared UI Component에 넣지는 않았다. UI Component는 Dictionary contract만 알고, 제품 App Registry가 업무 상태 집합을 가진다.
+
+## 8. Demo 정상화
+
+기존 OMS Order Demo는 검색용 `status`는 canonical `READY`인데 `shipmentStatus`는 `출고대기`처럼 pre-translated Label이었다.
+
+v59에서는 목록 Projection을 canonical 값으로 정렬했다.
+
+```text
+NEW
+READY
+HOLD
+SHIPPED
+CONFIRMED
+```
+
+사용자 화면에서는 Status Catalog를 통해 각각 한국어 Label로 보인다.
+
+## 9. 실제 화면 적용
+
+다음 상태 Grid가 모두 명시적인 Dictionary를 사용한다.
+
+- OMS 주문관리: 재고 / 출고상태
+- OMS 반품·클레임
+- COMMON 업무 예외 센터: 중요도 / 처리상태
+- COMMON 업무 데이터 대사
+- WMS 물류 작업
+- UX 실험·점진배포
+- 외부 데이터 상태
+- Component Catalog Demo
+
+주문 Detail Drawer의 page-local `statusSemantic()`도 제거하고 공통 Dictionary Resolver를 사용하도록 바꿨다.
+
+## 10. Static HTML/JavaScript Reference
+
+순수 FE Reference에도 `statusSemantic()` / `statusChip()`을 추가했다.
+
+T01 주문, T02 품목, T06 WMS Queue, T07 Reconcile에서 text + semantic surface 형태로 상태를 표시한다.
+
+알 수 없는 상태는:
+
+```text
+정의되지 않음 ·
+```
+
+으로 보인다.
+
+Forced Colors에서도 border/text cue를 유지한다.
+
+## 11. QA Gate
+
+신규 `validate-fe-grid-status-v59.mjs`가 다음을 검사한다.
+
+1. KbxStatus semantic contract
+2. KbxGridStatusMap contract
+3. pure resolver 존재
+4. unknown fail-visible
+5. Grid Cell Renderer
+6. Filter label mapping
+7. CSV label export
+8. product Status Catalog
+9. 모든 application `type:'status'` column의 `statusMap`
+10. Demo canonical shipment status
+11. Order Drawer page-local semantic 제거
+12. unit contract
+13. Static HTML/JS parity
+14. KbxDataGrid/KbxStatus component version
+
+## 12. 전체 검증
+
+최종 전체 정적/계약 회귀:
+
+- Design Tokens: 161
+- Screens: 20
+- Components: 86
+- Core APIs: 34
+- TypeScript/Vue script units: 314
+- T01~T09: 9/9
+- Design Debt: 116 <= 131
+- Design-Code Parity: PASS
+- Release Governance: major PASS
+- v41~v59 FE regression: PASS
+
+## 13. Runtime Evidence 제한
+
+현재 Artifact 환경에는:
+
+- `pnpm-lock.yaml` 없음
+- `node_modules` 없음
+- Playwright/Vitest 미설치
+- npm registry DNS `EAI_AGAIN`
+
+따라서 Vite build/Vitest/Playwright Runtime PASS는 주장하지 않는다. Runtime readiness는 계속 `blocked`다.
+
+## 14. 다음 P0
+
+v59 이후 우선순위는 상태 Component를 더 늘리는 것이 아니다.
+
+### P0-1 — Backend/API Status Canonicalization
+
+OMS 주문 상세 API는 아직 `작성/확정/출고완료` 같은 display 문자열을 반환하고, 주문 검색 API는 canonical code를 반환한다. 같은 Aggregate의 Query 계약이 다르다. 다음 단계에서 API raw status를 canonical code로 통일하고 UI Dictionary가 Label을 전담하는 방향을 검토해야 한다.
+
+### P0-2 — Status Dictionary Governance
+
+새 Domain 상태가 추가될 때:
+
+```text
+Domain State
+→ API Contract
+→ Status Catalog
+→ Filter Option
+→ E2E Fixture
+```
+
+가 함께 변경되는 Gate가 필요하다. 지금 v59 Gate는 Grid statusMap 존재를 강제하지만 Backend enum과 UI dictionary의 완전한 자동 parity까지는 검증하지 않는다.
+
+### P0-3 — 실제 Browser Evidence
+
+Registry 접근 가능한 CI에서 Playwright를 실행해 Light/Dark/forced-colors에서 status label, unknown state, filter, CSV를 실제로 검증해야 한다.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Interaction-Closure-Hardening-v56.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Interaction-Closure-Hardening-v56.md
new file mode 100644
index 00000000..d11769d9
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Interaction-Closure-Hardening-v56.md
@@ -0,0 +1,96 @@
+# KBX FE Interaction Closure Hardening v56
+
+## 1. Executive judgement
+
+v55 closed major recovery-workbench gaps, but the remaining risk was no longer template count. It was interaction closure: keyboard focus disappearing after DOM replacement, overlays returning users to nowhere, HTTP 200 being treated as all-success for bulk work, browser-persisted WMS retry commands crossing operator sessions, and runtime feedback metadata reporting an old app version.
+
+The v56 rule is simple: a user action is not complete until the UI preserves context, reports the authoritative outcome, and leaves the operator at a deterministic next action.
+
+## 2. Changes
+
+### Overlay focus lifecycle
+- KbxDialog 1.1.0 and KbxDrawer 1.1.0 capture the invoking element on open and restore it after the overlay has actually hidden.
+- Restoration is fail-safe: disconnected or disabled targets are ignored.
+- KbxDialog supports `restoreFocus=false` for components that own a richer focus contract.
+- KbxLookupDialog uses that opt-out because KbxLookup intentionally advances to the next form field after a successful selection; generic restore must not override that behavior.
+
+### T08 Excel Import focus continuity
+- KbxExcelImport 1.3.0 gives all six stages a programmatic focus landing.
+- When server status replaces one stage DOM with another, focus moves to the new stage heading instead of falling back to `body`.
+- Error-row first/next focus remains independent from stage focus.
+- The static HTML/JavaScript reference mirrors the same behavior and avoids stealing focus during repeated progress rerenders.
+
+### T06 authoritative bulk receipt
+- The real Claim endpoint already returns `ClaimedCount` and `SkippedCount`, but FE typed it as `unknown` and discarded the result.
+- v56 consumes the real response and renders a persistent inline receipt: requested / claimed / skipped.
+- Partial processing offers `내 업무 보기` and `최신 상태 조회`; a generic success toast is not considered sufficient.
+- Demo API now matches the production response shape.
+
+### WMS shared-PDA retry isolation
+- v1 stored unacknowledged scan commands in one unscoped localStorage key.
+- This is unsafe on shared PDAs because a later operator/session could inherit an old retry queue.
+- v56 uses a hashed tenant/user UI scope for authenticated persistent storage; anonymous/default contexts are session-only.
+- The old unscoped v1 queue is explicitly retired and never replayed.
+- Parsed browser data is shape-validated and queue length is bounded before replay.
+- Idempotency key reuse and sequential replay remain unchanged.
+
+### Runtime provenance correction
+- `App.vue` still reported `v51-fe-presentation-workbench` while the source had advanced through v55.
+- v56 corrects runtime `app-version` to `v56-fe-interaction-closure-hardening` so suggestions, telemetry, and operational reproduction do not record a stale build identity.
+
+### Static FE truth hardening
+- Static T07 previously simulated reconciliation by directly setting `actual = expected` and `difference = 0` in client memory.
+- That contradicted the real v55 Reconcile policy.
+- v56 changes the static reference to register a reprocessing request while explicitly preserving OMS/WMS source truth.
+
+### E2E readiness repair
+- The OMS Import Playwright scenario referenced an XLSX fixture that did not exist in the repository.
+- v56 uses an in-memory browser file for the Demo API flow, removing an untracked binary prerequisite.
+- Demo Import now provides a complete required-field mapping so the Golden Flow can actually proceed to validation.
+- Keyboard regression now explicitly asserts F2 Lookup -> Esc -> invoking customer-code field focus restoration.
+
+## 3. QA criticism
+
+The previous project direction had several mature contracts but some tests were ceremonial: a Golden Flow could exist in source while depending on a missing binary fixture or a Demo API response shape different from the real endpoint. That creates false confidence. A QA gate must prove that the test can execute, not merely that a spec file exists.
+
+Similarly, overlay accessibility cannot stop at `Esc closes`. In an ERP screen, closing a lookup or detail surface without deterministic focus restoration breaks the operator's keyboard production line. Focus is part of transactional UX, not cosmetic accessibility.
+
+WMS local persistence must be treated as operational data. Idempotency protects the server from duplication, but it does not make an unscoped browser queue safe across operators. Storage isolation and idempotency solve different failure modes.
+
+## 4. What was deliberately not added
+
+- No new low-code/runtime metadata engine.
+- No new backend command merely to support the UI changes.
+- No optimistic domain-state mutation.
+- No broad redesign of Home after v54 stabilization.
+- No claim that Playwright/Vite/Vitest passed in this container.
+
+## 5. Verification
+
+Full `node scripts/validate-kbx.mjs`: PASS.
+
+Current governance snapshot:
+- 161 design tokens
+- 20 screens
+- 86 components
+- 34 core APIs
+- 309 TS/Vue script units
+- T01~T09 recipe verification 9/9
+- Design Debt 116 <= 131
+- Design-Code Parity PASS
+- Release Governance major PASS
+
+See `docs/evidence/v56-validate-kbx-full.log` and `docs/evidence/v56-fe-interaction-closure-validation.txt`.
+
+## 6. Next P0
+
+The next stage should stop adding structural contracts and execute runtime evidence in a dependency-complete environment:
+
+1. OMS-ORD-001 Drawer open/close and row-focus restore at 1440x900 and 1280x720.
+2. OMS-ORD-002 keyboard-only transaction from customer F2 through grid entry, validation failure, correction and F8 save.
+3. OMS-ORD-003 six-stage Import with partial completion and failed-row retry.
+4. COMMON-OPS-001 multi-select bulk claim with a true skipped subset and recovery.
+5. COMMON-REC-001 evidence Drawer, exception handoff, and proof that source values never mutate client-side.
+6. WMS-PICK-001 at 390x844: duplicate wedge scan, response-loss retry, identity-scope change, stale queue rejection, offline recovery and server-confirmed scan truth.
+
+The release gate should only be promoted from contract PASS to field PASS after those flows are captured with browser traces/screenshots and repeatable fixtures.
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Operational-Navigation-Screen-Anatomy-v52.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Operational-Navigation-Screen-Anatomy-v52.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Operational-Navigation-Screen-Anatomy-v52.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Operational-Navigation-Screen-Anatomy-v52.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Presentation-Hardening-v51.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Presentation-Hardening-v51.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-Presentation-Hardening-v51.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Presentation-Hardening-v51.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v38.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v38.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v38.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v38.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v39.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v39.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v39.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v39.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v40.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v40.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v40.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v40.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v41.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v41.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v41.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v41.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v42.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v42.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v42.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v42.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v43.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v43.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v43.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v43.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v44.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v44.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v44.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v44.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v45.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v45.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v45.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v45.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v46.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v46.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v46.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v46.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v47.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v47.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v47.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v47.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v48.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v48.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v48.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v48.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v49.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v49.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v49.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v49.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v50.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v50.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/frontend/KBX-FE-QA-Hardening-v50.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-QA-Hardening-v50.md
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Recovery-Workbench-Hardening-v55.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Recovery-Workbench-Hardening-v55.md
new file mode 100644
index 00000000..afc40a65
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Recovery-Workbench-Hardening-v55.md
@@ -0,0 +1,337 @@
+# KBX FE Recovery Workbench Hardening v55
+
+## 1. 목적
+
+v55의 목표는 공통 컴포넌트나 Backend 계약을 더 많이 만드는 것이 아니다.
+
+이번 iteration은 실제 사용자가 브라우저에서 실패·예외·대사 불일치·대량 Import·WMS Scan을 처리할 때 다음 질문에 즉시 답할 수 있게 만드는 데 집중한다.
+
+- 지금 어느 단계인가?
+- 무엇이 서버에서 확인된 사실인가?
+- 무엇이 아직 반영되지 않았는가?
+- 오류는 어디에 있는가?
+- 다음 행동은 무엇인가?
+- 실패해도 어떤 Context가 유지되는가?
+
+KBX Business UX/AX Standard의 `Familiar First`, `Exception Driven`, `Predictable Layout`, `Explicit State`, `Audit by Default`를 실제 Vue/HTML/JavaScript 작업면에 내리는 것이 목적이다.
+
+---
+
+## 2. 냉정한 비판
+
+### 2.1 T08 Vue가 표준보다 뒤처져 있었다
+
+표준은 Import를 다음 6단계로 정의한다.
+
+`파일 → 매핑 → 검증 → Preview → 반영 → 결과`
+
+그러나 v54 `KbxExcelImport` Vue 구현은 사실상 4단계였다.
+
+`파일 → 매핑 → 검증 → 반영`
+
+정적 FE Reference는 이미 6단계였기 때문에, 오히려 실제 Vue 제품 계층이 Reference보다 얇았다. 이 상태에서는 사용자가 검증 성공과 실제 Domain 반영 사이의 경계를 충분히 인식하기 어렵다.
+
+### 2.2 T06 공통 계약이 실제 Wrapper에서 유실됐다
+
+`KbxQueuePage`에는 Queue 제목·설명·건수·Action 위치가 있지만 `KbxWorkQueuePage`가 이를 전달하지 않았다.
+
+즉 공통 Template 계약은 존재하지만 실제 예외센터에서 일부 정보가 사라지는 전형적인 **Wrapper contract erosion**이었다.
+
+### 2.3 T07은 비교는 되지만 근거 검토 흐름이 약했다
+
+Reconcile의 목적은 숫자를 나열하는 것이 아니라:
+
+`Expected → Actual → Difference → Reason → Resolution`
+
+이다.
+
+v54는 Grid에서 비교 후 선택건을 예외로 등록할 수 있었지만, 행 하나의 근거를 Context 유지 상태에서 집중 검토하는 표준 Detail이 부족했다.
+
+### 2.4 T09는 네트워크 Truth는 좋아졌지만 Scan Truth가 한 단계 부족했다
+
+WMS에서는 사용자가 방금 Scan한 값과 서버가 실제로 받아 Domain 검증까지 끝낸 값이 다를 수 있다.
+
+네트워크 timeout에서는 요청이 Commit됐지만 응답만 유실됐을 수도 있다. 따라서 단순한 `최근 Scan` 표시는 오히려 중복 작업을 유도할 수 있다.
+
+필요한 것은 **최근 서버 확인 Scan**이다.
+
+---
+
+## 3. v55 실제 FE 변경
+
+### 3.1 T08 — 6단계 Import Workbench
+
+`KbxExcelImport 1.2.0`
+
+실제 Vue 단계:
+
+1. 파일
+2. 매핑
+3. 검증
+4. 미리보기
+5. 반영
+6. 결과
+
+Server status와 화면 단계는 명시적으로 연결한다.
+
+- `uploaded / mapping-required` → 매핑
+- `validating` → 검증
+- `validated` → 미리보기
+- `committing` → 반영
+- `completed / partially-completed / failed / cancelled` → 결과
+
+주요 개선:
+
+- 현재 파일명·전체 건수·정상/오류 Context 유지
+- Preview 전에 Domain DB 반영 없음 명시
+- 정상/오류/경고 집계 표시
+- 서버가 신규/수정 Projection을 제공할 때만 예상 신규/수정 표시
+- 서버 근거가 없으면 신규/수정 숫자를 추정하지 않음
+- 첫 오류 / 다음 오류 Focus 이동
+- 오류파일 다운로드
+- Commit 중 중복 파일 재제출 경고
+- 부분 성공과 전체 실패를 다른 결과 UX로 구분
+- Forced Colors Focus/Border 보강
+
+### 3.2 T06 — Exception Queue Operational Pressure
+
+`KbxWorkQueuePage 1.7.0`
+
+Wrapper가 다음을 `KbxQueuePage`로 완전히 전달한다.
+
+- queueTitle
+- queueDescription
+- queueCount
+- queueCountUnit
+- queue-heading
+- queue-actions
+
+실제 `COMMON-OPS-001`에서는:
+
+- 전체 대상 건수: Server `totalCount`
+- 표시 긴급: 현재 조회 결과 내 Critical
+- 표시 미지정: 현재 조회 결과 내 담당 미지정
+- 표시 60분+: 현재 조회 결과 내 장기 경과
+- 선택 건수
+
+를 분리했다.
+
+중요한 점은 현재 Page의 200건을 전체 Queue 통계처럼 가장하지 않는 것이다. Page-local 수치는 명시적으로 `표시`라고 표현한다.
+
+Quick action:
+
+- `내 업무`
+- `다음 긴급건`
+
+`다음 긴급건`은 Grid를 다시 훑지 않고 기존 Exception Detail Drawer를 연다.
+
+### 3.3 T07 — Evidence-preserving Reconcile
+
+`COMMON-REC-001`에 다음을 추가했다.
+
+Quick Result Filter:
+
+- 전체
+- 불일치
+- 확인중
+- 해결
+
+Double click:
+
+`Reconcile Grid → 대사 근거 Drawer`
+
+Drawer는 다음을 한 번에 보여준다.
+
+- Reference No
+- Expected
+- Actual
+- Difference
+- Reason
+- Checked Time
+- Resolution Status
+
+핵심 정책은 명시적으로 표시한다.
+
+> 원천값을 화면에서 직접 덮어쓰지 않는다.
+
+불일치/확인중 건은 `이 건 예외 등록`으로 Exception Workflow에 진입한다.
+
+Frontend는 `common.operations.create` 권한을 확인해 Action을 비활성화하지만, 실제 Enforcement는 Server가 계속 책임진다.
+
+### 3.4 T09 — Authoritative Scan Truth
+
+`useWmsPicking`에 `lastConfirmedScan`을 추가했다.
+
+이 값은 다음 경우에만 갱신한다.
+
+- Scan API 성공 응답
+- 동일 Idempotency Key Retry가 서버에서 성공 확인됨
+
+다음 경우에는 갱신하지 않는다.
+
+- 로컬 Scan 입력만 발생
+- 4xx Domain 거부
+- Network timeout 후 Retry Queue 대기
+
+실제 WMS Picking 화면에:
+
+- 스캔 가능
+- 입력 차단
+- 재전송 확인 중
+- 서버 확인 중 · 중복 스캔 금지
+- 최근 서버 확인 Barcode / 시각
+
+을 분리해 표시한다.
+
+또한 수량 직접 입력은 다음 상태에서 fail-closed 처리한다.
+
+- Offline
+- Pending Retry 존재
+- Scan API 확인 중
+
+`작업 시작`과 `예외 등록` Mutation도 실패 시 Error feedback + authoritative task refetch를 수행한다.
+
+---
+
+## 4. Theme 적용 원칙
+
+v55는 새로운 장식 테마를 만들지 않았다.
+
+기존 Business Theme를 그대로 사용한다.
+
+- OMS: Blue
+- ERP: Violet
+- WMS: Teal
+- COMMON: Neutral
+
+Module Theme는 Navigation/Context 식별에 사용하고 업무 상태의 의미색과 분리한다.
+
+- success
+- warning
+- danger
+- info
+- focus
+
+새 Preview/Error/Scan Truth surface는 전부 Semantic Token을 사용한다.
+
+Dark / Light / Forced Colors에서 동일 업무 의미가 유지되도록 한다.
+
+---
+
+## 5. 보안·정합성 판단
+
+### 유지한 원칙
+
+- UI 숨김을 보안 Enforcement로 간주하지 않음
+- Reconcile에서 Client-side 원천값 수정 금지
+- Import Preview는 Commit 이전 단계로 명시
+- WMS Server 응답 전 성공 Truth 생성 금지
+- Idempotency Key 재사용 Retry 유지
+- CSP same-origin / no-frame / no-worker / no-object 유지
+- Import AI Mapping은 추천 근거일 뿐 확정값 아님
+
+### 추가로 막은 오해
+
+- 현재 Page의 긴급 건수를 전체 Queue 건수처럼 표시하지 않음
+- Server Preview가 신규/수정 Count를 제공하지 않으면 FE에서 추정하지 않음
+- 로컬 Barcode 입력을 서버 확인 Scan으로 표시하지 않음
+
+---
+
+## 6. QA 결과
+
+`node scripts/validate-kbx.mjs`
+
+전체 PASS.
+
+최종 확인 기준:
+
+- Design Tokens: 161
+- Screen Definitions: 20
+- Component Definitions: 86
+- Core APIs: 34
+- TS/Vue syntax units: 309
+- T01~T09 Recipe Verification: 9/9
+- Design Debt: 116 <= 131
+- Design-Code Parity: PASS
+- Release Governance: major PASS
+- v41~v54 기존 FE regression: PASS
+- v55 Recovery Workbench Gate: PASS
+
+신규 Validator:
+
+`scripts/validate-fe-recovery-workbench-v55.mjs`
+
+---
+
+## 7. Runtime 검증 한계
+
+현재 Container에는:
+
+- Node.js 존재
+- Chromium 존재
+- root pnpm 없음
+- root/app node_modules 없음
+
+따라서 다음을 성공했다고 주장하지 않는다.
+
+- Vite production build
+- Vitest runtime suite
+- Vue/PrimeVue/AG Grid browser Playwright E2E
+
+Static Chromium screenshot을 다시 시도했으나 DBus/zygote 환경 문제로 20초 timeout이 발생했다. Screenshot 생성 여부를 Release 증거로 사용하지 않았다.
+
+정적/계약/Syntax PASS와 실제 Browser Runtime PASS는 분리한다.
+
+---
+
+## 8. 다음 우선순위
+
+### P0 — T08 실제 Browser Workflow
+
+실제 Browser에서 다음을 검증해야 한다.
+
+`파일선택 → Mapping Keyboard → Validation Job → 오류 Focus → Preview → Commit Confirm → Background Job → Partial Result → 오류파일 재처리`
+
+### P0 — T06/T07 Exception Resolution E2E
+
+- Queue Filter 유지
+- Detail Drawer Focus Restore
+- Claim/Resolve 실패 시 Context 보존
+- Reconcile Quick Filter
+- Row Detail
+- Permission
+- 예외 등록 후 원래 대사 Context 복원
+
+### P0 — WMS 390×844 Runtime
+
+- Scanner keyboard wedge
+- duplicate debounce
+- network timeout
+- same Idempotency Key retry
+- last confirmed scan
+- quantity sheet
+- exception sheet
+- offline blocking
+
+### P1 — T01/T02/T03와 T06~T09의 Visual QA Matrix 통합
+
+1440×900 / 1280×720 / Dark / Forced Colors / 200% Zoom / 390×844를 Release Evidence로 자동 수집해야 한다.
+
+---
+
+## 9. 최종 판단
+
+v55의 의미는 Component를 더 만든 것이 아니다.
+
+다음 경계를 실제 화면에 더 분명히 만든 것이다.
+
+`입력한 것 ≠ 서버가 확인한 것`
+
+`검증 완료 ≠ Domain 반영 완료`
+
+`현재 Page 통계 ≠ 전체 업무 통계`
+
+`대사 불일치 확인 ≠ 원천값 직접 수정`
+
+이 경계를 사용자 눈앞에서 설명할 수 있어야 OMS/WMS/ERP FE가 운영 제품 수준에 가까워진다.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Status-Canonical-Contract-Hardening-v60.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Status-Canonical-Contract-Hardening-v60.md
new file mode 100644
index 00000000..03b75f98
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Status-Canonical-Contract-Hardening-v60.md
@@ -0,0 +1,156 @@
+# KBX FE Status Canonical Contract Hardening v60
+
+## 1. 결론
+
+v59에서 Grid 상태 표현을 표준화했지만, 주문 Aggregate/API/FE Workflow/Search Projection 사이에는 여전히 상태의 기계값과 표시값이 혼재했다. v60은 이 문제를 UI 장식이 아니라 **데이터 계약과 업무 사실성 문제**로 처리한다.
+
+핵심 원칙은 단순하다.
+
+```text
+Domain / API canonical code
+ ↓
+Status Catalog
+ ↓
+사용자 Label + Semantic
+```
+
+한국어 Label은 사용자 표현이며 Domain/API machine state가 아니다.
+
+## 2. 냉정한 진단
+
+### 2.1 같은 주문이 화면마다 다른 상태 계약을 사용했다
+
+- `oms.orders.status` DB 값은 이미 `DRAFT / CONFIRMED ...` canonical code였다.
+- 주문 GET/Register/Confirm API는 이를 다시 `작성 / 확정`으로 번역해 반환했다.
+- 주문 조회 Projection은 `NEW / READY / SHIPPED / HOLD`를 사용했다.
+- FE Workflow는 일부 Korean display label을 machine state로 비교했다.
+
+이 상태에서는 List/Detail/Transaction이 같은 Aggregate를 보면서도 상태 계약이 달라진다. 테스트와 Demo가 통과해도 신규 상태 추가나 저장조건 복원 시 분화가 발생하기 쉽다.
+
+### 2.2 출고지시 Endpoint가 Aggregate와 Projection vocabulary를 혼합했다
+
+기존 Ship Endpoint는 `oms.orders.status in ('NEW','DRAFT','READY')`를 사용했다. `NEW/READY`는 shipment projection 문법이고 `DRAFT/CONFIRMED`는 aggregate lifecycle 문법이다.
+
+v60에서는 다음을 동시에 강제한다.
+
+```text
+Order lifecycle = CONFIRMED
+AND
+Shipment projection = READY
+```
+
+그리고 출고지시는 주문 Lifecycle을 다시 `CONFIRMED`로 바꾸지 않는다. Audit/Outbox event를 생성하는 별도 업무행동으로 유지한다.
+
+### 2.3 Demo Read Model에도 중복 상태 Source of Truth가 있었다
+
+Demo order row가 `shipmentStatus`와 `status`를 동시에 가지고 조회/카운터/Bulk가 서로 다른 필드를 읽었다. Ship 후 한쪽만 바뀌면 즉시 drift한다.
+
+v60에서는 `shipmentStatus` 하나를 projection query/bulk truth로 사용한다.
+
+## 3. 구현 변경
+
+### Backend
+
+- `OrderLifecycleStatus` canonical constants 추가
+ - `DRAFT`
+ - `CONFIRMED`
+ - `ALLOCATED`
+ - `PICKING`
+ - `CHECKED`
+ - `SHIPPED`
+- `OrderShipmentStatus` projection constants 추가
+ - `NEW / READY / CONFIRMED / HOLD / SHIPPED / ERROR`
+- Order GET은 DB canonical lifecycle 상태를 그대로 반환한다.
+- Register는 `DRAFT` 저장/반환.
+- Confirm은 `DRAFT → CONFIRMED`만 허용하고 canonical 상태를 반환.
+- Ship은 `aggregate CONFIRMED + projection READY` 이중 조건을 서버에서 검증하며 Aggregate lifecycle을 조작하지 않는다.
+- Audit의 사용자 설명은 한국어를 유지한다. Audit description과 machine state를 혼동하지 않는다.
+
+### Frontend
+
+- `statusCatalog.orderLifecycle`을 canonical raw value + familiar Korean label 구조로 정리.
+- `kbxStatusOptions()`로 Search Select option을 같은 Catalog에서 생성.
+- `normalizeKbxStatusValue()`로 URL/User Preference status를 canonical catalog 기준으로 복원.
+- 주문등록 Workflow/Command permission/status 정책을 canonical 값으로 변경.
+- 화면 Context에서는 Resolver를 통해 `작성/확정/...` Label을 표시하고 Command는 raw code를 사용.
+- Order Detail API Type도 canonical lifecycle type을 사용.
+
+### Demo / Static Reference
+
+- Demo register/get/confirm lifecycle을 canonical code로 통일.
+- Projection 검색/카운터/Bulk는 `shipmentStatus` 단일 truth 사용.
+- Static HTML/JavaScript도 canonical raw status를 저장하며 UI에만 한국어 Label을 표시.
+- 기존 저장조건의 `신규/출고대기/...` display 문자열은 안전한 legacy migration으로 canonical code에 매핑한다.
+
+## 4. QA / 회귀 방지
+
+`validate-status-canonical-v60.mjs`에서 다음을 자동 검증한다.
+
+- Backend lifecycle/shipment canonical constants
+- GET 서버-side label translation 제거
+- Register/Confirm canonical transition
+- Ship aggregate/projection vocabulary 분리
+- FE catalog coverage
+- Workflow/Command canonical status
+- Search option Catalog 일원화
+- saved/route filter canonical normalization
+- Demo single projection truth
+- Static Reference canonical/display separation
+- unit contract 존재
+
+전체 `validate-kbx.mjs`는 v41~v60까지 PASS한다.
+
+## 5. Breaking Change와 Migration
+
+이 변경은 API status 소비자가 `작성`, `확정` 같은 한국어 문자열을 machine value로 비교했다면 영향을 준다. 따라서 release impact는 Major로 선언했다.
+
+대표 migration:
+
+| 기존 display-as-value | canonical value |
+|---|---|
+| 작성 | DRAFT |
+| 확정 | CONFIRMED |
+| 할당 | ALLOCATED |
+| 피킹 | PICKING |
+| 검수 | CHECKED |
+| 출고완료 | SHIPPED |
+
+UI는 계속 한국어 Label을 보여준다. 변경되는 것은 API/상태 비교 계약이다.
+
+## 6. 보안·정합성 판단
+
+FE 상태 Filter 또는 Disabled Button을 최종 방어선으로 사용하지 않는다. 특히 Ship Endpoint는 ID 직접선택에서도 서버가 Aggregate와 Projection 상태를 함께 검증한다. 이는 hidden/disabled UI만 믿는 취약한 상태전이 방식을 피하기 위한 조치다.
+
+## 7. 현재 한계
+
+### Browser Runtime Evidence는 아직 BLOCKED
+
+현재 artifact 환경에는 다음이 없다.
+
+- `pnpm-lock.yaml`
+- `node_modules`
+- 설치된 `@playwright/test`
+- 설치된 `vitest`
+
+`corepack pnpm --version` 실행도 `registry.npmjs.org` DNS `EAI_AGAIN`으로 실패했다. 따라서 Vite/Vitest/Playwright Runtime PASS를 주장하지 않는다.
+
+또한 이 환경에는 `dotnet` CLI가 없어 Backend compile/test를 직접 실행하지 못했다. Backend 변경은 repository governance/static contract 수준에서 검증되었다.
+
+## 8. 다음 P0
+
+v60 이후 가장 먼저 볼 상태 부채는 `allocationStatus`다.
+
+현재 Order Search Projection의 `allocation_status` 작성자/DB projection schema가 repository 안에서 완전하게 정의되어 있지 않고, Demo/FE Catalog에는 `정상 / 할당완료 / 부족 / 미확인` display 문자열이 raw value로 남아 있다.
+
+다음 단계는 이를 섣불리 FE에서 임의 code로 바꾸는 것이 아니라:
+
+1. Projection writer/source 계약 확인
+2. canonical allocation status vocabulary 확정
+3. Backend projection → Status Catalog → Search/Excel/E2E 일원화
+4. 기존 saved preference migration
+
+순으로 진행해야 한다. Source가 없는 상태에서 FE만 임의 canonicalization하면 또 다른 hallucinated contract가 된다.
+
+## 9. 최종 판단
+
+v60의 가치는 새로운 컴포넌트를 추가한 데 있지 않다. 같은 주문 상태를 List/Detail/Transaction/API/Demo가 서로 다른 언어로 해석하던 기술부채를 줄이고, **machine truth와 user presentation의 경계를 명시적으로 만든 것**이 핵심이다.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Work-Surface-Triage-Hardening-v54.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Work-Surface-Triage-Hardening-v54.md
new file mode 100644
index 00000000..c87a65f1
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Work-Surface-Triage-Hardening-v54.md
@@ -0,0 +1,169 @@
+# KBX FE Work Surface Triage & Wayfinding Hardening v54
+
+## 1. 판단
+
+v53까지 KBX는 Home module rail, 표준 Section Header, Golden Screen interaction, fail-closed workflow를 상당히 확보했다. 그러나 실제 업무 FE 관점에서는 여전히 세 가지 간극이 남았다.
+
+첫째, Home의 `확인 필요`가 시간순 flat queue 성격을 유지하면 실패·미저장·장시간 Job·일반 알림이 같은 시각 우선순위로 경쟁한다. 사용자는 “무엇부터 처리해야 하는가”를 다시 판단해야 한다.
+
+둘째, T02 목록-상세는 목록과 Form을 동시에 보여주지만 현재 레코드가 조회 결과의 몇 번째인지, 이전/다음으로 연속 검토할 수 있는지가 표준 계약이 아니었다. 마우스로 목록을 다시 찾는 왕복은 Master CRUD 현장에서 매우 자주 발생하는 낭비다.
+
+셋째, T04/T05는 Template 골격은 있었으나 `이 Grid가 무엇을 입력하는가`, `현재 몇 건인가`, `이 Pane이 어떤 Context인가`, `Pane-level Action은 어디에 있는가`가 화면별 구현에 의존했다. Template이 배치만 표준화하고 work surface 자체를 충분히 설명하지 못한 상태였다.
+
+따라서 v54는 새 Metadata Engine이나 BE 추상화를 추가하지 않고 Home triage, record wayfinding, workflow next-action, T04/T05 work-surface anatomy를 실제 Vue/HTML/JavaScript에 보강한다.
+
+## 2. Home — flat attention queue를 operational triage로 변경
+
+Home의 Attention truth는 기존 `allAttentionQueue`를 그대로 source of truth로 사용한다. 새로운 별도 집계 저장소를 만들지 않는다.
+
+표현만 다음 네 lane으로 분류한다.
+
+- `긴급·예외`: 실패 작업 + 긴급 알림
+- `미저장`: 중단한 편집
+- `진행 작업`: Batch/Integration 작업
+- `알림`: 일반 Notification
+
+Collapsed 상태에서는 lane당 상위 2건, expanded 상태에서는 lane당 상위 6건을 보여준다. 이렇게 하면 한 종류의 알림이 많아도 다른 종류의 중요한 업무가 첫 화면에서 밀려나지 않는다.
+
+중요한 routing 보정도 했다. `긴급·예외`는 실패 작업과 긴급 알림이 혼합될 수 있으므로 overflow를 알림센터로 단정하지 않는다. 먼저 lane을 확장해 원래 source와 intent를 유지한다. `진행 작업`은 작업센터, `알림`은 알림센터로 연결한다.
+
+Card dashboard, 차트, KPI 장식을 늘리지 않았다. Home은 업무 시작점이며 목적은 판단량을 줄이는 것이다.
+
+## 3. T02 — KbxRecordNavigator
+
+`KbxRecordNavigator`를 신규 Business Component로 추가했다.
+
+표준 기능:
+
+- 현재 레코드 위치 `current / total`
+- 이전 / 다음
+- 첫/마지막 경계 disabled
+- dirty 상태에서 이동 disabled
+- focus-visible
+- forced-colors
+- 모바일 폭에서는 button text를 줄이고 기능은 유지
+
+실제 `ERP-MST-ITEM-001`에 적용했다. 핵심은 Navigator가 직접 selection state를 바꾸지 않는 것이다. 기존 `requestChoose()` 경로를 재사용하므로 미저장 변경 확인/보호 로직을 우회하지 않는다.
+
+이 구조는 UX Component가 Domain/dirty safety를 침범하지 않으면서 반복 탐색 조작을 줄인다.
+
+## 4. Workflow — 현재 상태만이 아니라 다음 작업까지 명시
+
+`KbxWorkflowBar 1.2.0`은 다음을 동시에 보여준다.
+
+- 현재 상태
+- 상태 흐름
+- 현재 위치 `n / total`
+- 다음 가능한 Action label
+- 실제 실행 Action
+
+가능한 Action이 없을 때 빈 공간을 보여주지 않고 `현재 상태에서 실행 가능한 다음 작업이 없습니다.`를 표시한다.
+
+상태 흐름의 현재 항목에는 `aria-current="step"`을 적용했다. Theme accent는 현재 단계 식별용이며 success/warning/error semantic color를 대체하지 않는다.
+
+## 5. T04 — Fast Entry를 “Grid 슬롯”이 아니라 작업면으로 승격
+
+`KbxFastEntryPage 1.10.0`에 다음 계약을 추가했다.
+
+- `gridTitle`
+- `gridDescription`
+- `rowCount`
+- `rowCountUnit`
+- `grid-heading`
+- `grid-actions`
+
+화면 구조는 Keyboard Guide → Context → Bulk/Contextual → Named Fast Entry Surface → Validation → Sticky Summary로 고정한다.
+
+실제 품목단가 화면은 `품목 단가 입력`, 입력 건수, 오류 건수를 Grid 상단에서 즉시 확인할 수 있다. 오류 수는 별도 dashboard card가 아니라 작업 Grid 바로 옆에 둔다.
+
+## 6. T05 — Master / Detail / History의 목적과 규모를 표시
+
+`KbxMasterDetailPage 1.9.0`에 Master/Detail/Bottom 각각의 title/description/count/countUnit과 action slot을 추가했다.
+
+- `master-actions`
+- `detail-actions`
+- `bottom-actions`
+
+실제 ERP 재고현황은 다음처럼 읽힌다.
+
+- Master: 품목 — 조회된 품목 수
+- Detail: 창고/로케이션 — 선택 품목의 위치 수
+- Bottom: 재고이력 — 선택 품목의 이력 수
+
+기존 Grid를 바꾸지 않고 Context 이해를 높였다. 데이터는 기존 Query projection을 그대로 사용하므로 별도 client-side truth를 만들지 않는다.
+
+## 7. Static HTML / JavaScript parity
+
+`apps/web/fe-reference`도 v54로 함께 변경했다.
+
+- Home 4-lane triage
+- lane overflow routing
+- T02 record navigator
+- dirty 상태의 이전/다음 차단
+- T04 named fast-entry surface
+- keyboard module rail 유지
+- focus/high-contrast cue
+
+Vue에만 좋아진 UX를 넣고 Reference HTML/JavaScript가 낡는 구조를 허용하지 않았다.
+
+정적 Reference CSP는 기존 보안 경계를 유지한다.
+
+- `connect-src 'self'`
+- `object-src 'none'`
+- `frame-src 'none'`
+- `worker-src 'none'`
+- `frame-ancestors 'none'`
+- `base-uri 'none'`
+
+새 Home/Navigation 기능을 위해 외부 script, inline script, 임의 network origin을 열지 않았다.
+
+## 8. 회귀에서 발견하고 바로잡은 문제
+
+### 8.1 긴급 overflow 오라우팅
+
+초기 구현에서는 `긴급·예외`의 나머지 항목을 알림센터로 보냈다. 그러나 lane에는 operation failure도 들어갈 수 있으므로 잘못된 라우팅이었다. v54에서는 긴급 lane을 먼저 확장하도록 수정했다.
+
+### 8.2 Theme v43 gate 회귀
+
+신규 triage가 border-top과 background로 구분되면서 과거 v43 gate의 `색 이외의 priority cue` 계약을 만족하지 못했다. 기준을 완화하지 않고 각 triage item에 accent left border를 복원했고, critical item은 danger border로 식별하도록 수정했다.
+
+### 8.3 정적 theme 변수
+
+신규 Reference CSS가 기존 forced-colors 구간에서만 존재하는 `--surface-hover`와 정의되지 않은 `--focus`에 의존할 수 있는 문제를 제거했다. 실제 기본 theme에 존재하는 `--muted`, `--primary`를 사용한다.
+
+## 9. 검증 결과
+
+최종 `node scripts/validate-kbx.mjs` 결과:
+
+- Design tokens: 161
+- Screens: 20
+- Components: 86
+- Core APIs: 34
+- Navigation entries: 16
+- T01~T09 recipe verification: 9/9
+- TypeScript/Vue syntax units: 309
+- Design Debt: 116 <= 131
+- Design-Code Parity: PASS
+- Release Governance: major PASS
+- v41~v54 FE regression: PASS
+
+v54 전용 gate는 Home triage, T02 record navigation, Workflow next action, T04/T05 work-surface anatomy, static FE parity, CSP/high-contrast를 검사한다.
+
+## 10. 아직 완료라고 부르면 안 되는 부분
+
+현재 root에는 `pnpm`과 `node_modules`가 없다. 따라서 Vite production build, Vitest, Playwright browser E2E까지 PASS했다고 주장하지 않는다.
+
+Chromium 자체는 설치돼 있어 static reference screenshot을 시도했지만 container DBus/zygote 환경에서 headless process가 종료되지 않아 timeout되었다. 이 결과는 시각 QA 증거로 채택하지 않았다.
+
+즉 현재 증거는 source contract / JavaScript syntax / TypeScript·Vue transpile / KBX governance regression 수준이다. 실제 browser runtime 검증은 별도로 필요하다.
+
+## 11. 다음 우선순위
+
+다음 FE 단계는 Framework 증설보다 다음 순서가 맞다.
+
+1. T08 Excel Import의 실제 6단계 입력·매핑·검증·Preview·Job 결과 work-surface 밀도 고도화
+2. T06 Queue와 T07 Reconcile의 row-level recovery/action pattern을 실제 Golden interaction으로 승격
+3. T09 WMS Picking의 390×844 runtime visual/keyboard-wedge/network state 검증
+4. 의존성이 준비된 환경에서 1440×900 / 1280×720 / Dark / forced-colors / 390×844 Playwright 시각·조작 회귀 실행
+
+중요한 원칙은 그대로다. FE 완성도는 컴포넌트 수가 아니라 사용자가 `현재 상태 → 다음 행동 → 오류 복구`를 빠르게 판단하고 실제 업무를 끝낼 수 있는지로 판단해야 한다.
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Workflow-Queue-Runtime-Hardening-v58.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Workflow-Queue-Runtime-Hardening-v58.md
new file mode 100644
index 00000000..a74ca01f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/frontend/KBX-FE-Workflow-Queue-Runtime-Hardening-v58.md
@@ -0,0 +1,180 @@
+# KBX FE Workflow Truth · Queue Signal · Runtime Hardening v58
+
+## 1. 냉정한 진단
+
+v57까지 KBX는 T01~T09 Template, Home Workbench, Import Recovery, Reconcile/Operations authoritative outcome, WMS retry/idempotency, Playwright 실행계약까지 상당히 정리되었다. 그러나 실제 FE 코드를 다시 보면 여전히 “문서/정적 Gate는 강한데 Browser Interaction은 틀릴 수 있는” 결함이 남아 있었다.
+
+이번에 발견한 핵심은 네 가지다.
+
+1. **Selection Contract 불일치** — OMS 클레임은 `KbxDataGrid`가 `update:selection`을 제공하지 않는데 `v-model:selection`을 사용하고 있었다. 동시에 `KbxListPage`에 `selectionCount`를 전달하지 않아 Command의 `requiresSelection` 계약도 실제 선택과 연결되지 않았다.
+2. **Workflow UI와 실제 Command 불일치** — WorkflowBar는 `start/complete`를 노출하지만 Page command handler는 `approve/hold`만 API로 전송했다. 보이는 Action과 실행 가능한 Action이 달랐다.
+3. **Queue Signal 왜곡** — WMS 작업 Queue의 기본 검색이 READY였고 예외 카운터를 현재 rows에서 계산해, 실제 BLOCKED 작업이 존재해도 첫 화면에서 `확인 필요 0`으로 보일 수 있었다.
+4. **Vue writable model 위험** — `KbxSearchPanel`은 새 객체를 `update:modelValue`로 반환하는데 일부 Page는 `const search = reactive(...)` 전체 객체를 `v-model`로 넘겼다. 정적 TypeScript Syntax Gate는 통과하지만 Browser에서 const reactive binding 재할당 위험이 있는 패턴이다.
+
+이 네 가지는 모두 “코드량/컴포넌트 수”가 아니라 **실제 업무 실행 Truth** 문제다.
+
+## 2. OMS-CLM-001 — Selection/Workflow Closure
+
+### 기존 문제
+
+- `v-model:selection` + `selection="multiple"`가 동시에 존재
+- 실제 `KbxDataGrid`는 `selectionChanged`만 emit
+- `KbxListPage`의 selection count는 0으로 남을 수 있음
+- WorkflowBar `start/complete`가 보이지만 command handler는 실행하지 않음
+- `HOLD`는 Command에는 있으나 Workflow state에는 없음
+- 여러 건 승인/보류 중 일부 실패하면 첫 실패에서 전체 흐름이 끊길 수 있음
+
+### v58 변경
+
+- `@selection-changed="selected=$event"`로 실제 Grid 계약 사용
+- `:selection-count="selected.length"`를 T01 CommandBar까지 전달
+- `approve / hold / start / complete` 전체 Transition을 동일 실행경로로 연결
+- `HOLD`를 semantic `hold` 상태로 명시
+- Transition별 server result를 기다린 뒤 재조회
+- 행별 실패를 수집하고 나머지 행은 계속 처리
+- `요청 / 성공 / 실패`를 persistent receipt로 표시
+- 처리 후 receipt로 Keyboard Focus 이동
+
+중요한 원칙은 성공 Toast를 늘린 것이 아니라, **선택 → Command → Server → 결과 → 재조회 → Focus**가 한 업무 흐름으로 닫히게 한 것이다.
+
+## 3. Demo Claims — Runtime Fixture를 실제 계약으로 복원
+
+기존 Demo Claims는 실제 Backend DTO와 달랐다.
+
+- `status: '접수'`처럼 한글 표시값을 API value로 사용
+- `channelName`, `requestedQty`, `ownerName` 누락
+- 모든 transition이 현재 상태와 무관하게 성공
+
+v58은 Demo를 다음 실제 업무 상태로 정렬했다.
+
+`REQUESTED → APPROVED → IN_PROGRESS → COMPLETED`
+
+그리고 `REQUESTED → HOLD`를 별도로 둔다.
+
+허용되지 않은 Transition은 실제 Axios rejection + `business-rule` Problem으로 처리한다. Demo는 보기 좋은 샘플 데이터가 아니라 **Browser Runtime에서 실제 FE 계약을 검증하는 실행 Fixture**여야 한다.
+
+## 4. WMS-WORK-001 — Queue Signal Truth
+
+### 기존 문제
+
+기본 검색조건이 `status='READY'`였다. 따라서 화면 진입 후 사용자가 조회하면 BLOCKED/IN_PROGRESS가 기본적으로 제외된다.
+
+더 큰 문제는 예외 카운터를 `rows.filter(status==='BLOCKED')`로 계산한 것이다. 현재 rows가 READY만 포함하면 실제 예외가 있어도 `0`으로 보인다.
+
+T06 Work Queue가 사용자의 “지금 처리해야 할 업무”를 보여줘야 한다는 목적과 충돌한다.
+
+### v58 변경
+
+- 기본 상태를 전체로 변경
+- 화면 진입 시 자동으로 내 작업 조회
+- `WmsWorkSearchSummary` 도입
+- 상태 필터 적용 전 summary rows에서 `ready / inProgress / blocked` 계산
+- Grid count는 현재 필터 결과, Summary/Exception은 동일 기본조건의 전체 업무 압력을 표시
+- BLOCKED 선택 시 `작업 시작`을 disabled
+- “예외 작업은 행을 열어 원인을 먼저 확인”이라는 다음 행동 표시
+- Double Click은 작업 상세 Context 진입을 유지
+
+즉 상태 필터를 좁혀도 “예외가 존재한다”는 운영 신호는 사라지지 않는다.
+
+## 5. SearchPanel Whole-object v-model Runtime Contract
+
+이번에 추가한 Gate는 다음 패턴을 전체 `apps/web/src`에서 금지한다.
+
+```text
+const search = reactive(...)
+
+```
+
+`KbxSearchPanel`이 `update:modelValue`로 **새 객체**를 반환하는 구조에서는 writable `ref`가 맞다.
+
+v58에서 수정한 화면:
+
+- OMS Claims
+- WMS Work Queue
+- COMMON UX Metrics
+- ERP Item Master
+
+Component Catalog는 이미 `ref>`를 사용하고 있어 그대로 유지한다.
+
+이 Gate의 의미는 특정 화면 1건을 고치는 데 있지 않다. **같은 Runtime-class 결함이 다시 추가되는 것을 자동 차단**한다는 데 있다.
+
+## 6. Home — 화면 수의 사실성
+
+Home의 `사용 가능 화면`과 `전체 N개 화면`이 `props.entries.length`를 사용하면 `menuVisible=false`인 Utility/Hidden entry까지 사용자에게 실행 가능한 화면처럼 계산될 수 있다.
+
+v58은 `menuVisible !== false`인 launchable entry만 센다.
+
+작은 숫자 차이처럼 보이지만 Home은 업무 탐색의 Source of Truth다. 숫자가 실제 Explorer와 다르면 사용자는 Navigation 자체를 신뢰하지 않게 된다.
+
+## 7. QA/E2E 보강
+
+추가 E2E:
+
+### OMS Claims
+
+- F3 조회
+- 실제 Grid row selection
+- WorkflowBar 승인
+- authoritative receipt Focus
+- APPROVED → 처리 시작
+- HOLD 상태 명시 / 다음 Action 없음 확인
+
+### WMS Work Queue
+
+- 화면 진입만으로 전체 내 작업 조회
+- BLOCKED 작업이 초기 결과에서 보임
+- 예외 요약이 1건을 표시
+- 예외 필터 적용
+- BLOCKED 작업에서 시작 Action disabled
+
+Runtime package 설치가 가능한 환경에서는 이 시나리오가 기존 Playwright Desktop/WMS project에 그대로 포함된다.
+
+## 8. 검증 결과
+
+`node scripts/validate-kbx.mjs` 전체 PASS.
+
+- Design Tokens: 161
+- Screens: 20
+- Components: 86
+- Core APIs: 34
+- TypeScript/Vue script units: 311
+- T01~T09: 9/9
+- Design Debt: 116 <= 131
+- Design-Code Parity: PASS
+- Release Governance: major PASS
+- v41~v58 FE regression: PASS
+
+v58 전용 Gate도 PASS.
+
+## 9. Runtime 제한 — 여전히 BLOCKED
+
+현재 container에서 Corepack `pnpm@10.33.4` 실행을 다시 시도했으나 npm registry DNS가 `EAI_AGAIN`으로 실패한다.
+
+따라서 다음은 PASS라고 주장하지 않는다.
+
+- `pnpm install --frozen-lockfile`
+- Vue production typecheck/build
+- Vitest runtime
+- Playwright Desktop/WMS runtime
+
+System Chromium을 사용한 Static Reference `--dump-dom`도 다시 시도했으나 DBus/zygote 환경에서 timeout되었다.
+
+정적/계약 검증 PASS와 Browser Runtime PASS는 계속 분리한다.
+
+## 10. 다음 P0 — Status Grid Rendering
+
+v58 이후 가장 우선순위가 높은 FE Component 부채는 `KbxDataGrid`의 `type:'status'`다.
+
+현재 Grid는 status type을 가운데 정렬하는 수준이며 `KbxStatusDefinition(value/label/semantic)`을 Cell Renderer까지 일관되게 연결하지 않는다. 이 상태에서는 Backend value인 `REQUESTED`, `IN_PROGRESS`, `BLOCKED`가 사용자 화면에 그대로 노출될 가능성이 있다.
+
+다음 단계에서는 새 UI Framework가 아니라:
+
+1. Domain status value → KBX Status Definition mapping
+2. Grid status cell에서 Familiar Korean label + semantic cue
+3. Filter/Excel export는 canonical value와 표시 label의 역할 분리
+4. 미정의 상태는 조용히 오표시하지 않고 Unknown/Fallback 정책 적용
+5. OMS/WMS/ERP 상태 Dictionary 중복 제거
+
+를 우선하는 것이 맞다.
+
+이 작업은 미관 개선이 아니라 **Familiar First + Explicit State + Hallucination/오표시 방지**를 Grid 핵심 계약에 내리는 작업이다.
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-02-order-register.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-02-order-register.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-02-order-register.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-02-order-register.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-03-wms-picking.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-03-wms-picking.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-03-wms-picking.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-03-wms-picking.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-t02-t03-v27.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-t02-t03-v27.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-t02-t03-v27.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-t02-t03-v27.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-t04-t05-v26.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-t04-t05-v26.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/golden-screen-t04-t05-v26.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/golden-screen-t04-t05-v26.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/grid-productivity-contract-v25.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/grid-productivity-contract-v25.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/grid-productivity-contract-v25.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/grid-productivity-contract-v25.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/home-navigation-v23.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/home-navigation-v23.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/home-navigation-v23.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/home-navigation-v23.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/integration-failure-injection-v19.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/integration-failure-injection-v19.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/integration-failure-injection-v19.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/integration-failure-injection-v19.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v11-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v11-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v11-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v11-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v14-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v14-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v14-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v14-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v15-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v15-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v15-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v15-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v16-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v16-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v16-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v16-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v17-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v17-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v17-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v17-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v18-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v18-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v18-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v18-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v19-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v19-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v19-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v19-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v20-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v20-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v20-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v20-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v23-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v23-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v23-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v23-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v24-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v24-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v24-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v24-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v25-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v25-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v25-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v25-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v26-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v26-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v26-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v26-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v27-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v27-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v27-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v27-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v28-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v28-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v28-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v28-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v29-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v29-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v29-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v29-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v30-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v30-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v30-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v30-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v31-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v31-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v31-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v31-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v32-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v32-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v32-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v32-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v33-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v33-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v33-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v33-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v34-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v34-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v34-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v34-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v35-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v35-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v35-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v35-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v36-standard-traceability.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v36-standard-traceability.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/kbx-v36-standard-traceability.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v36-standard-traceability.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/migration-strategy-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/migration-strategy-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/migration-strategy-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/migration-strategy-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/navigation-acceptance-v10.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/navigation-acceptance-v10.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/navigation-acceptance-v10.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/navigation-acceptance-v10.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/observability-runtime-v9.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/observability-runtime-v9.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/observability-runtime-v9.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/observability-runtime-v9.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/official-provider-adapters-v20.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/official-provider-adapters-v20.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/official-provider-adapters-v20.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/official-provider-adapters-v20.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-exception-center-v6.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-exception-center-v6.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-exception-center-v6.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-exception-center-v6.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-field-acceptance-v6.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-field-acceptance-v6.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-field-acceptance-v6.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-field-acceptance-v6.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-projection-example-v6.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-projection-example-v6.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/operations-projection-example-v6.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/operations-projection-example-v6.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/performance-budget-v9.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/performance-budget-v9.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/performance-budget-v9.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/performance-budget-v9.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/problem-contract-v14.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/problem-contract-v14.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/problem-contract-v14.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/problem-contract-v14.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/process-coverage-v8.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/process-coverage-v8.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/process-coverage-v8.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/process-coverage-v8.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/production-readiness-v9.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/production-readiness-v9.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/production-readiness-v9.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/production-readiness-v9.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/provider-onboarding-checklist-v20.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/provider-onboarding-checklist-v20.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/provider-onboarding-checklist-v20.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/provider-onboarding-checklist-v20.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/quality-gates-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/quality-gates-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/quality-gates-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/quality-gates-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/reconcile-v6.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/reconcile-v6.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/reconcile-v6.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/reconcile-v6.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release-governance-v12.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release-governance-v12.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release-governance-v12.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release-governance-v12.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release/migration-guide.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release/migration-guide.md
similarity index 71%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release/migration-guide.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release/migration-guide.md
index e726f3ec..124fc588 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release/migration-guide.md
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release/migration-guide.md
@@ -109,3 +109,25 @@ v36 자체는 PostgreSQL schema나 backend API route 변경을 요구하지 않
Templates that bind a known permanent `KbxProblem` should now pass `errorRetryable=false` rather than render a meaningless retry action. Existing callers remain backward compatible because the default is `true`.
`WMS-WORK-001` specifically treats `WMS_WORK_QUERY_NOT_CONNECTED` as non-retryable. When the real production endpoint is connected, classify transient network/service failures separately and set retryability according to the returned Problem contract.
+
+
+## Foundation v60 — OMS 주문 상태 Canonical API 전환
+
+OMS 주문 상세/등록/확정 응답의 `status`는 더 이상 한국어 display label을 반환하지 않는다.
+
+| 이전 표시 기반 값 | v60 canonical value | 사용자 표시 |
+|---|---|---|
+| `작성` | `DRAFT` | 작성 |
+| `확정` | `CONFIRMED` | 확정 |
+| `할당` | `ALLOCATED` | 할당 |
+| `피킹` | `PICKING` | 피킹 |
+| `검수` | `CHECKED` | 검수 |
+| `출고완료` | `SHIPPED` | 출고완료 |
+
+Frontend/외부 소비자는 `status === "작성"` 같은 비교를 제거하고 canonical code를 사용해야 한다. 사용자 Label, 색상, Filter 표시명은 `kbxStatusCatalog`에서 해석한다.
+
+신규 주문의 저장 전 `NEW`는 FE-local 상태이며 DB에 저장하지 않는다. 첫 저장 성공 응답은 `DRAFT`다.
+
+주문 조회의 `shipmentStatus`는 별도 Projection 상태 계약이며 `NEW / READY / CONFIRMED / HOLD / SHIPPED / ERROR`를 사용한다. Aggregate lifecycle `status`와 의미를 혼합하지 않는다.
+
+이 변경은 API 응답의 의미계약을 바로잡는 breaking change이므로 v60은 major change로 선언한다.
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release/migration-guide.template.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release/migration-guide.template.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/release/migration-guide.template.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/release/migration-guide.template.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/scenario-evidence-v18.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/scenario-evidence-v18.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/scenario-evidence-v18.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/scenario-evidence-v18.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-recipe-secure-home-navigation-v35.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-recipe-secure-home-navigation-v35.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-recipe-secure-home-navigation-v35.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-recipe-secure-home-navigation-v35.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-recipe-verification-home-attention-v36.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-recipe-verification-home-attention-v36.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-recipe-verification-home-attention-v36.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-recipe-verification-home-attention-v36.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-template-completeness-v23.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-template-completeness-v23.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/screen-template-completeness-v23.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-template-completeness-v23.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/secret-management-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/secret-management-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/secret-management-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/secret-management-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Business UX-AX Standard v1.0.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Business UX-AX Standard v1.0.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Business UX-AX Standard v1.0.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Business UX-AX Standard v1.0.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Design System v1.0.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Design System v1.0.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Design System v1.0.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Design System v1.0.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Implementation Contract v1.0.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Implementation Contract v1.0.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Implementation Contract v1.0.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Implementation Contract v1.0.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Reference Screens v1.0.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Reference Screens v1.0.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/source-standards/KBX Reference Screens v1.0.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/source-standards/KBX Reference Screens v1.0.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-actionability-v32.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-actionability-v32.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-actionability-v32.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-actionability-v32.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-completion-v31.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-completion-v31.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-completion-v31.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-completion-v31.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-hardening-v30.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-hardening-v30.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-component-home-navigation-hardening-v30.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-component-home-navigation-hardening-v30.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-home-navigation-completion-v29.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-home-navigation-completion-v29.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-home-navigation-completion-v29.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-home-navigation-completion-v29.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-navigation-hardening-v28.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-navigation-hardening-v28.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-navigation-hardening-v28.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-navigation-hardening-v28.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-state-permission-home-workbench-v33.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-state-permission-home-workbench-v33.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/template-state-permission-home-workbench-v33.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/template-state-permission-home-workbench-v33.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/test-data-governance-v18.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/test-data-governance-v18.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/test-data-governance-v18.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/test-data-governance-v18.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-experiment-governance-v17.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-experiment-governance-v17.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-experiment-governance-v17.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-experiment-governance-v17.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-metric-definition-v16.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-metric-definition-v16.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-metric-definition-v16.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-metric-definition-v16.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-quality-scorecard-v7.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-quality-scorecard-v7.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-quality-scorecard-v7.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-quality-scorecard-v7.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-telemetry-governance-v16.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-telemetry-governance-v16.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/ux-telemetry-governance-v16.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/ux-telemetry-governance-v16.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v10.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v10.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v10.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v10.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v11.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v11.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v11.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v11.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v12.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v12.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v12.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v12.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v13.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v13.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v13.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v13.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v14.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v14.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v14.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v14.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v15.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v15.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v15.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v15.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v16.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v16.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v16.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v16.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v17.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v17.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v17.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v17.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v18.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v18.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v18.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v18.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v19.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v19.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v19.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v19.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v20.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v20.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v20.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v20.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v21.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v21.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v21.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v21.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v22.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v22.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v22.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v22.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v23.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v23.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v23.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v23.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v24.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v24.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v24.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v24.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v25.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v25.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v25.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v25.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v26.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v26.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v26.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v26.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v27.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v27.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v27.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v27.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v28.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v28.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v28.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v28.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v29.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v29.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v29.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v29.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v3.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v3.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v3.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v3.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v30.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v30.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v30.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v30.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v31.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v31.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v31.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v31.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v32.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v32.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v32.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v32.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v33.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v33.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v33.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v33.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v34.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v34.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v34.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v34.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v35.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v35.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v35.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v35.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v36.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v36.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v36.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v36.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v38.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v38.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v38.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v38.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v39.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v39.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v39.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v39.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v4.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v4.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v4.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v4.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v40.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v40.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v40.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v40.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v41.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v41.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v41.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v41.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v42.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v42.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v42.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v42.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v43.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v43.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v43.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v43.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v44.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v44.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v44.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v44.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v45.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v45.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v45.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v45.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v46.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v46.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v46.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v46.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v47.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v47.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v47.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v47.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v48.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v48.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v48.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v48.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v49.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v49.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v49.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v49.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v5.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v5.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v5.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v5.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v50.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v50.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v50.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v50.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v6.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v6.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v6.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v6.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v7.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v7.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v7.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v7.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v8.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v8.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v8.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v8.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v9.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v9.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/validation-report-v9.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/validation-report-v9.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/wms-field-acceptance-checklist.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/wms-field-acceptance-checklist.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/docs/wms-field-acceptance-checklist.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/wms-field-acceptance-checklist.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/eslint.config.mjs b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/eslint.config.mjs
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/eslint.config.mjs
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/eslint.config.mjs
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/api-debt-report.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/api-debt-report.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/api-debt-report.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/api-debt-report.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/catalog-manifest.json
similarity index 98%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/catalog-manifest.json
index 9c3317b7..cce7ad3c 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/catalog-manifest.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/catalog-manifest.json
@@ -593,6 +593,14 @@
"error"
]
},
+ {
+ "component": "KbxRecordNavigator",
+ "group": "navigation",
+ "states": [
+ "default",
+ "disabled"
+ ]
+ },
{
"component": "KbxBarcodeCapture",
"group": "wms",
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/component-manifest.json
similarity index 92%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/component-manifest.json
index 96e73698..9ae9cfbb 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/component-manifest.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/component-manifest.json
@@ -45,7 +45,7 @@
"name": "KbxDataGrid",
"category": "business",
"purpose": "조회·편집·대량처리용 업무 Grid",
- "version": "1.5.0"
+ "version": "1.6.0"
},
{
"name": "KbxFormSection",
@@ -75,7 +75,7 @@
"name": "KbxStatus",
"category": "business",
"purpose": "Domain 상태를 일관된 semantic 상태로 표시",
- "version": "1.0.0"
+ "version": "1.1.0"
},
{
"name": "KbxHelpPanel",
@@ -104,8 +104,8 @@
{
"name": "KbxMasterDetailPage",
"category": "template",
- "purpose": "조회 전·재조회 Context와 Actionable Problem·오류별 Retry 가능 여부를 보존하며 Master·Detail·이력·Drawer를 함께 탐색하는 표준 화면",
- "version": "1.8.0"
+ "purpose": "조회 전·재조회 Context와 Actionable Problem을 보존하며 Master·Detail·이력의 제목·건수·영역 Action까지 표준화한 탐색 화면",
+ "version": "1.9.0"
},
{
"name": "KbxWmsMobilePage",
@@ -140,8 +140,8 @@
{
"name": "KbxExcelImport",
"category": "business",
- "purpose": "파일 preflight·1:1 매핑·검증·반영 확인·부분실패 복구를 포함한 Excel Import 흐름",
- "version": "1.1.0"
+ "purpose": "파일 preflight·1:1 매핑·검증·미리보기·반영·결과 6단계, 단계 Focus 이동, 오류 탐색·부분실패 복구를 포함한 Excel Import 흐름",
+ "version": "1.3.0"
},
{
"name": "KbxJobProgress",
@@ -176,8 +176,8 @@
{
"name": "KbxWorkQueuePage",
"category": "template",
- "purpose": "예외 업무 처리와 실패 복구·오류별 Retry 가능 여부를 우선하는 Queue 호환 화면",
- "version": "1.6.0"
+ "purpose": "Queue 제목·설명·전체 건수·표준 Action을 손실 없이 전달하고 예외 업무 처리·실패 복구를 우선하는 Queue 호환 화면",
+ "version": "1.7.0"
},
{
"name": "KbxReconcilePage",
@@ -245,11 +245,17 @@
"purpose": "Version·Workflow·Conflict·Audit를 하나의 재사용 가능한 레코드 생명주기 영역으로 통합",
"version": "1.0.0"
},
+ {
+ "name": "KbxRecordNavigator",
+ "category": "business",
+ "purpose": "T02 목록-상세 화면에서 현재 위치와 이전·다음 레코드 이동을 표준화",
+ "version": "1.0.0"
+ },
{
"name": "KbxWorkflowBar",
"category": "business",
- "purpose": "Permission Host를 반영해 현재 업무상태·표준 상태흐름·허용 전이를 한 위치에서 표현",
- "version": "1.1.0"
+ "purpose": "Permission Host를 반영해 현재 업무상태·표준 상태흐름·다음 가능 작업·허용 전이를 한 위치에서 표현",
+ "version": "1.2.0"
},
{
"name": "KbxGlobalHeader",
@@ -338,14 +344,14 @@
{
"name": "KbxDialog",
"category": "primitive",
- "purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal",
- "version": "1.0.0"
+ "purpose": "위험확정·짧은 Lookup·사유입력용 제한적 Modal · 닫힘 후 호출 지점 Focus 복원",
+ "version": "1.1.0"
},
{
"name": "KbxDrawer",
"category": "primitive",
- "purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역",
- "version": "1.0.0"
+ "purpose": "조회맥락을 유지하는 상세·Audit·Help 보조영역 · 닫힘 후 호출 지점 Focus 복원",
+ "version": "1.1.0"
},
{
"name": "KbxToast",
@@ -380,8 +386,8 @@
{
"name": "KbxFastEntryPage",
"category": "template",
- "purpose": "Enter·Paste·Fill Down·Validation·Actionable Problem·오류별 Retry 가능 여부 중심 대량 행 입력 화면",
- "version": "1.9.0"
+ "purpose": "Keyboard Guide·Grid 제목/건수/영역 Action·Editable Grid·Validation·Sticky Summary를 고정한 대량 행 입력 화면",
+ "version": "1.10.0"
},
{
"name": "KbxQueuePage",
@@ -482,8 +488,8 @@
{
"name": "KbxHomePage",
"category": "shell",
- "purpose": "미저장·실패·중요 알림과 복원 업무를 우선 제공하고 Attention 상한 이후 항목을 작업/알림 센터로 정확히 연결하는 Home Workbench",
- "version": "1.10.0"
+ "purpose": "긴급·미저장·진행·알림 Triage와 복원·즐겨찾기·모듈 업무탐색을 결합한 운영 Home Workbench",
+ "version": "1.12.0"
},
{
"name": "KbxAccessDenied",
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/configuration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/configuration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/configuration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/configuration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/design-debt-report.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/design-debt-report.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/design-debt-report.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/design-debt-report.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/external-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/external-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/external-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/external-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/fe-runtime-v42-evidence.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/fe-runtime-v42-evidence.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/fe-runtime-v42-evidence.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/fe-runtime-v42-evidence.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/field-adoption-report.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/field-adoption-report.json
similarity index 89%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/field-adoption-report.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/field-adoption-report.json
index cb2df7b3..4d8ed664 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/field-adoption-report.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/field-adoption-report.json
@@ -1,9 +1,9 @@
{
"dictionaryVersion": "1.1.0",
"canonicalFieldCount": 51,
- "scannedFiles": 109,
- "fieldOccurrences": 147,
- "uniqueFieldKeysObserved": 90,
+ "scannedFiles": 110,
+ "fieldOccurrences": 160,
+ "uniqueFieldKeysObserved": 93,
"canonicalKeysUsed": [
"address1",
"address2",
@@ -62,6 +62,7 @@
"dueDate",
"expectedValue",
"experimentId",
+ "fromWarehouseId",
"inboundQty",
"label",
"lastReceivedAt",
@@ -87,10 +88,12 @@
"sourceModule",
"staleEntries",
"state",
+ "supplierId",
"targetLabel",
"taskNo",
"taskType",
"title",
+ "toWarehouseId",
"totalLines",
"type",
"unavailableEntries",
@@ -99,6 +102,10 @@
"waveNo"
],
"promotionCandidates": [
+ {
+ "key": "moveQty",
+ "occurrences": 3
+ },
{
"key": "code",
"occurrences": 2
@@ -115,6 +122,10 @@
"key": "state",
"occurrences": 2
},
+ {
+ "key": "toWarehouseId",
+ "occurrences": 2
+ },
{
"key": "unit",
"occurrences": 2
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/integration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/integration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/integration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/integration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/provider-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/provider-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/provider-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/provider-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-impact.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-impact.json
similarity index 95%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-impact.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-impact.json
index 0d295d5d..68757205 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-impact.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-impact.json
@@ -1,6 +1,6 @@
{
"baseline": "v21",
- "contractVersion": "1.31.0",
+ "contractVersion": "2.0.0",
"declaredChangeLevel": "major",
"requiredChangeLevel": "major",
"compatible": true,
@@ -29,6 +29,12 @@
"change": "added",
"key": "KbxRecordLifecycle"
},
+ {
+ "level": "minor",
+ "kind": "component",
+ "change": "added",
+ "key": "KbxRecordNavigator"
+ },
{
"level": "minor",
"kind": "component",
@@ -185,7 +191,7 @@
"change": "version",
"key": "KbxDataGrid",
"from": "1.0.0",
- "to": "1.5.0"
+ "to": "1.6.0"
},
{
"level": "minor",
@@ -203,6 +209,14 @@
"from": "1.0.0",
"to": "1.0.1"
},
+ {
+ "level": "minor",
+ "kind": "component",
+ "change": "version",
+ "key": "KbxStatus",
+ "from": "1.0.0",
+ "to": "1.1.0"
+ },
{
"level": "minor",
"kind": "component",
@@ -233,7 +247,7 @@
"change": "version",
"key": "KbxMasterDetailPage",
"from": "1.0.0",
- "to": "1.8.0"
+ "to": "1.9.0"
},
{
"level": "minor",
@@ -273,7 +287,7 @@
"change": "version",
"key": "KbxExcelImport",
"from": "1.0.0",
- "to": "1.1.0"
+ "to": "1.3.0"
},
{
"level": "minor",
@@ -305,7 +319,7 @@
"change": "version",
"key": "KbxWorkQueuePage",
"from": "1.0.0",
- "to": "1.6.0"
+ "to": "1.7.0"
},
{
"level": "minor",
@@ -353,7 +367,7 @@
"change": "version",
"key": "KbxWorkflowBar",
"from": "1.0.0",
- "to": "1.1.0"
+ "to": "1.2.0"
},
{
"level": "minor",
@@ -467,6 +481,22 @@
"from": "1.0.0",
"to": "1.1.0"
},
+ {
+ "level": "minor",
+ "kind": "component",
+ "change": "version",
+ "key": "KbxDialog",
+ "from": "1.0.0",
+ "to": "1.1.0"
+ },
+ {
+ "level": "minor",
+ "kind": "component",
+ "change": "version",
+ "key": "KbxDrawer",
+ "from": "1.0.0",
+ "to": "1.1.0"
+ },
{
"level": "minor",
"kind": "component",
@@ -489,7 +519,7 @@
"change": "version",
"key": "KbxFastEntryPage",
"from": "1.0.0",
- "to": "1.9.0"
+ "to": "1.10.0"
},
{
"level": "minor",
@@ -505,6 +535,14 @@
"change": "added",
"key": "ERP-PRICE-001"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "COMMON-DATA-001",
+ "from": "1.0.0",
+ "to": "1.1.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -521,6 +559,14 @@
"from": null,
"to": "T01"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "COMMON-EXP-001",
+ "from": "1.0.0",
+ "to": "1.1.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -529,6 +575,14 @@
"from": null,
"to": "T01"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "COMMON-OPS-001",
+ "from": "1.0.0",
+ "to": "1.3.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -537,6 +591,14 @@
"from": null,
"to": "T06"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "COMMON-REC-001",
+ "from": "1.0.0",
+ "to": "1.3.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -601,6 +663,14 @@
"from": null,
"to": "T03"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "OMS-CLM-001",
+ "from": "1.0.0",
+ "to": "1.2.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -615,7 +685,7 @@
"change": "version",
"key": "OMS-ORD-001",
"from": "1.0.0",
- "to": "1.3.0"
+ "to": "1.5.0"
},
{
"level": "major",
@@ -631,7 +701,7 @@
"change": "version",
"key": "OMS-ORD-002",
"from": "1.1.0",
- "to": "1.3.0"
+ "to": "1.4.0"
},
{
"level": "major",
@@ -641,6 +711,14 @@
"from": null,
"to": "T03"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "OMS-ORD-003",
+ "from": "1.1.0",
+ "to": "1.2.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -665,6 +743,14 @@
"from": null,
"to": "T09"
},
+ {
+ "level": "patch",
+ "kind": "screen",
+ "change": "version",
+ "key": "WMS-PICK-001",
+ "from": "1.0.0",
+ "to": "1.2.0"
+ },
{
"level": "major",
"kind": "screen",
@@ -711,7 +797,7 @@
"change": "version",
"key": "WMS-WORK-001",
"from": "1.0.0",
- "to": "1.2.0"
+ "to": "1.4.0"
},
{
"level": "major",
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-notes.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-notes.md
similarity index 94%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-notes.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-notes.md
index e3321d30..875cf471 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/release-notes.md
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/release-notes.md
@@ -1,7 +1,7 @@
# KBX Release Impact
- Baseline: v21
-- Contract version: 1.31.0
+- Contract version: 2.0.0
- Declared level: major
- Required level: major
- Compatible: YES
@@ -12,6 +12,7 @@
- **minor** component added: `KbxFormSpan`
- **minor** component added: `KbxProblemFeedback`
- **minor** component added: `KbxRecordLifecycle`
+- **minor** component added: `KbxRecordNavigator`
- **minor** component added: `KbxCheckbox`
- **minor** component added: `KbxRadio`
- **minor** component added: `KbxTextarea`
@@ -35,28 +36,29 @@
- **minor** component version: `KbxLookupDialog` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxSearchPanel` ("1.0.0" → "1.4.0")
- **minor** component version: `KbxCommandBar` ("1.0.0" → "1.4.0")
-- **minor** component version: `KbxDataGrid` ("1.0.0" → "1.5.0")
+- **minor** component version: `KbxDataGrid` ("1.0.0" → "1.6.0")
- **minor** component version: `KbxFormSection` ("1.0.0" → "1.1.0")
- **patch** component version: `KbxValidationSummary` ("1.0.0" → "1.0.1")
+- **minor** component version: `KbxStatus` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxListPage` ("1.0.0" → "1.9.0")
- **minor** component version: `KbxTransactionPage` ("1.0.0" → "1.8.0")
- **minor** component version: `KbxMasterPage` ("1.0.0" → "1.8.0")
-- **minor** component version: `KbxMasterDetailPage` ("1.0.0" → "1.8.0")
+- **minor** component version: `KbxMasterDetailPage` ("1.0.0" → "1.9.0")
- **minor** component version: `KbxWmsMobilePage` ("1.0.0" → "1.8.0")
- **minor** component version: `KbxBarcodeCapture` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxWmsActionButton` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxExcelMenu` ("1.0.0" → "1.1.0")
-- **minor** component version: `KbxExcelImport` ("1.0.0" → "1.1.0")
+- **minor** component version: `KbxExcelImport` ("1.0.0" → "1.3.0")
- **minor** component version: `KbxImportPage` ("1.0.0" → "1.6.0")
- **patch** component version: `KbxExceptionSummary` ("1.0.0" → "1.0.1")
- **minor** component version: `KbxExceptionDetailDrawer` ("1.0.0" → "1.1.0")
-- **minor** component version: `KbxWorkQueuePage` ("1.0.0" → "1.6.0")
+- **minor** component version: `KbxWorkQueuePage` ("1.0.0" → "1.7.0")
- **minor** component version: `KbxReconcilePage` ("1.0.0" → "1.7.0")
- **minor** component version: `KbxUtilityRail` ("1.0.0" → "1.2.0")
- **minor** component version: `KbxAiAssistant` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxOperationCenter` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxNotificationCenter` ("1.0.0" → "1.1.0")
-- **minor** component version: `KbxWorkflowBar` ("1.0.0" → "1.1.0")
+- **minor** component version: `KbxWorkflowBar` ("1.0.0" → "1.2.0")
- **minor** component version: `KbxGlobalHeader` ("1.0.0" → "1.4.0")
- **minor** component version: `KbxSideNavigation` ("1.0.0" → "1.3.1")
- **minor** component version: `KbxWorkspaceTabs` ("1.0.0" → "1.3.0")
@@ -71,15 +73,21 @@
- **minor** component version: `KbxSelect` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxPageHeader` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxBulkActionBar` ("1.0.0" → "1.1.0")
+- **minor** component version: `KbxDialog` ("1.0.0" → "1.1.0")
+- **minor** component version: `KbxDrawer` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxProposalPanel` ("1.0.0" → "1.1.0")
- **minor** component version: `KbxAiPanel` ("1.0.0" → "1.1.0")
-- **minor** component version: `KbxFastEntryPage` ("1.0.0" → "1.9.0")
+- **minor** component version: `KbxFastEntryPage` ("1.0.0" → "1.10.0")
- **minor** component version: `KbxQueuePage` ("1.0.0" → "1.9.0")
- **minor** screen added: `ERP-PRICE-001`
+- **patch** screen version: `COMMON-DATA-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `COMMON-DATA-001` (null → "T01")
- **major** screen templateCode: `COMMON-DS-001` (null → "T01")
+- **patch** screen version: `COMMON-EXP-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `COMMON-EXP-001` (null → "T01")
+- **patch** screen version: `COMMON-OPS-001` ("1.0.0" → "1.3.0")
- **major** screen templateCode: `COMMON-OPS-001` (null → "T06")
+- **patch** screen version: `COMMON-REC-001` ("1.0.0" → "1.3.0")
- **major** screen templateCode: `COMMON-REC-001` (null → "T07")
- **major** screen templateCode: `COMMON-UX-001` (null → "T01")
- **patch** screen version: `ERP-INV-001` ("1.0.0" → "1.1.0")
@@ -88,20 +96,23 @@
- **patch** screen version: `ERP-MST-ITEM-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `ERP-MST-ITEM-001` (null → "T02")
- **major** screen templateCode: `ERP-PUR-001` (null → "T03")
+- **patch** screen version: `OMS-CLM-001` ("1.0.0" → "1.2.0")
- **major** screen templateCode: `OMS-CLM-001` (null → "T01")
-- **patch** screen version: `OMS-ORD-001` ("1.0.0" → "1.3.0")
+- **patch** screen version: `OMS-ORD-001` ("1.0.0" → "1.5.0")
- **major** screen templateCode: `OMS-ORD-001` (null → "T01")
-- **patch** screen version: `OMS-ORD-002` ("1.1.0" → "1.3.0")
+- **patch** screen version: `OMS-ORD-002` ("1.1.0" → "1.4.0")
- **major** screen templateCode: `OMS-ORD-002` (null → "T03")
+- **patch** screen version: `OMS-ORD-003` ("1.1.0" → "1.2.0")
- **major** screen templateCode: `OMS-ORD-003` (null → "T08")
- **patch** screen version: `WMS-COUNT-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `WMS-COUNT-001` (null → "T09")
+- **patch** screen version: `WMS-PICK-001` ("1.0.0" → "1.2.0")
- **major** screen templateCode: `WMS-PICK-001` (null → "T09")
- **patch** screen version: `WMS-PUT-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `WMS-PUT-001` (null → "T09")
- **patch** screen version: `WMS-REC-001` ("1.0.0" → "1.1.0")
- **major** screen templateCode: `WMS-REC-001` (null → "T09")
-- **patch** screen version: `WMS-WORK-001` ("1.0.0" → "1.2.0")
+- **patch** screen version: `WMS-WORK-001` ("1.0.0" → "1.4.0")
- **major** screen templateCode: `WMS-WORK-001` (null → "T06")
- **minor** screen-recipe added: `T01`
- **minor** screen-recipe added: `T02`
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-manifest.json
similarity index 97%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-manifest.json
index 35396bb6..8d49b94f 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-manifest.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-manifest.json
@@ -1,7 +1,7 @@
[
{
"id": "COMMON-DATA-001",
- "version": "1.0.0",
+ "version": "1.1.0",
"module": "COMMON",
"type": "list",
"templateCode": "T01",
@@ -27,7 +27,7 @@
},
{
"id": "COMMON-EXP-001",
- "version": "1.0.0",
+ "version": "1.1.0",
"module": "COMMON",
"type": "list",
"templateCode": "T01",
@@ -40,7 +40,7 @@
},
{
"id": "COMMON-OPS-001",
- "version": "1.0.0",
+ "version": "1.3.0",
"module": "COMMON",
"type": "queue",
"templateCode": "T06",
@@ -53,7 +53,7 @@
},
{
"id": "COMMON-REC-001",
- "version": "1.0.0",
+ "version": "1.3.0",
"module": "COMMON",
"type": "reconcile",
"templateCode": "T07",
@@ -145,7 +145,7 @@
},
{
"id": "OMS-CLM-001",
- "version": "1.0.0",
+ "version": "1.2.0",
"module": "OMS",
"type": "list",
"templateCode": "T01",
@@ -158,7 +158,7 @@
},
{
"id": "OMS-ORD-001",
- "version": "1.3.0",
+ "version": "1.5.0",
"module": "OMS",
"type": "list",
"templateCode": "T01",
@@ -171,7 +171,7 @@
},
{
"id": "OMS-ORD-002",
- "version": "1.3.0",
+ "version": "1.4.0",
"module": "OMS",
"type": "transaction",
"templateCode": "T03",
@@ -185,7 +185,7 @@
},
{
"id": "OMS-ORD-003",
- "version": "1.1.0",
+ "version": "1.2.0",
"module": "OMS",
"type": "import",
"templateCode": "T08",
@@ -211,7 +211,7 @@
},
{
"id": "WMS-PICK-001",
- "version": "1.0.0",
+ "version": "1.2.0",
"module": "WMS",
"type": "wms-mobile",
"templateCode": "T09",
@@ -250,7 +250,7 @@
},
{
"id": "WMS-WORK-001",
- "version": "1.2.0",
+ "version": "1.4.0",
"module": "WMS",
"type": "queue",
"templateCode": "T06",
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-recipe-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-recipe-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-recipe-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-recipe-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-recipe-verification-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-recipe-verification-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/screen-recipe-verification-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/screen-recipe-verification-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/theme-evidence-v43.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/theme-evidence-v43.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/theme-evidence-v43.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/theme-evidence-v43.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/generated/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/generated/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/api-debt-baseline.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/api-debt-baseline.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/api-debt-baseline.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/api-debt-baseline.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v11/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v11/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v12/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v12/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v13/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v13/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v14/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v14/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v15/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v15/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v16/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v16/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v17/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v17/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/integration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/integration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/integration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/integration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v18/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v18/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/integration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/integration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/integration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/integration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v19/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v19/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/integration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/integration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/integration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/integration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/provider-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/provider-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/provider-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/provider-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v20/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v20/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/README.md b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/README.md
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/README.md
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/README.md
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/api-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/api-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/api-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/api-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/catalog-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/catalog-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/catalog-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/catalog-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/component-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/component-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/component-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/component-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/experiment-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/experiment-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/experiment-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/experiment-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/external-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/external-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/external-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/external-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/field-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/field-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/field-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/field-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/integration-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/integration-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/integration-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/integration-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/navigation-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/navigation-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/navigation-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/navigation-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/permission-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/permission-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/permission-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/permission-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/problem-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/problem-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/problem-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/problem-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/provider-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/provider-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/provider-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/provider-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/screen-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/screen-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/screen-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/screen-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/sensitive-data-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/sensitive-data-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/sensitive-data-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/sensitive-data-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/telemetry-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/telemetry-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/telemetry-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/telemetry-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/test-fixture-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/test-fixture-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/test-fixture-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/test-fixture-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/test-scenario-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/test-scenario-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/test-scenario-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/test-scenario-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/token-manifest.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/token-manifest.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/baselines/v21/token-manifest.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/baselines/v21/token-manifest.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/design-debt-baseline.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/design-debt-baseline.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/governance/design-debt-baseline.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/design-debt-baseline.json
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/release.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/release.json
new file mode 100644
index 00000000..d1c36c7f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/governance/release.json
@@ -0,0 +1,8 @@
+{
+ "foundationIteration": 60,
+ "contractVersion": "2.0.0",
+ "baseline": "v21",
+ "declaredChangeLevel": "major",
+ "releaseMode": "status-canonical-contract-hardening",
+ "notes": "v60 removes display-label status values from the OMS order API boundary. Order GET/Register/Confirm now expose canonical lifecycle codes; Korean labels are resolved by the FE status catalog. Search options and persisted filters derive from the same canonical shipment catalog, Demo removes duplicate order status truth, and the static HTML/JavaScript reference mirrors canonical raw values with familiar labels. Existing clients that compare API status strings such as 작성/확정 must migrate to DRAFT/CONFIRMED."
+}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/package.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/package.json
similarity index 81%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/package.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/package.json
index 12656f76..b3b3d63d 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/package.json
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/package.json
@@ -1,7 +1,7 @@
{
- "name": "kbx-foundation-v52-fe-operational-navigation-screen-anatomy",
+ "name": "kbx-foundation-v60-status-canonical-contract-hardening",
"private": true,
- "packageManager": "pnpm@10",
+ "packageManager": "pnpm@10.33.4",
"workspaces": [
"packages/*",
"apps/*"
@@ -78,7 +78,25 @@
"validate:fe-template-completion": "node scripts/validate-fe-template-completion-v48.mjs",
"validate:fe-workbench-wms": "node scripts/validate-fe-workbench-wms-v49.mjs",
"validate:fe-operational-truth": "node scripts/validate-fe-operational-truth-v50.mjs",
+ "validate:fe-recovery-workbench": "node scripts/validate-fe-recovery-workbench-v55.mjs",
"validate:fe-presentation": "node scripts/validate-fe-presentation-v51.mjs",
- "validate:fe-anatomy": "node scripts/validate-fe-anatomy-v52.mjs"
+ "validate:fe-anatomy": "node scripts/validate-fe-anatomy-v52.mjs",
+ "validate:fe-golden-interaction": "node scripts/validate-fe-golden-interaction-v53.mjs",
+ "validate:fe-work-surface": "node scripts/validate-fe-work-surface-v54.mjs",
+ "validate:fe-interaction-closure": "node scripts/validate-fe-interaction-closure-v56.mjs",
+ "test:unit": "vitest run tests/unit tests/component",
+ "test:e2e": "playwright test",
+ "test:e2e:desktop": "playwright test --project=desktop-chromium",
+ "test:e2e:wms": "playwright test --project=wms-mobile-chromium",
+ "test:fe": "pnpm test:unit && pnpm test:e2e",
+ "validate:fe-authoritative-outcome": "node scripts/validate-fe-authoritative-outcome-v57.mjs",
+ "report:fe-runtime": "node scripts/report-fe-runtime-readiness.mjs",
+ "validate:fe-workflow-queue-runtime": "node scripts/validate-fe-workflow-queue-runtime-v58.mjs",
+ "validate:fe-grid-status": "node scripts/validate-fe-grid-status-v59.mjs",
+ "validate:status-canonical": "node scripts/validate-status-canonical-v60.mjs"
+ },
+ "devDependencies": {
+ "@playwright/test": "^1.62.1",
+ "vitest": "^4.1.10"
}
}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/package.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/package.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/package.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/package.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/ai.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/ai.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/ai.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/ai.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/api.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/api.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/api.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/api.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/audit.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/audit.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/audit.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/audit.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/authorization.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/authorization.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/authorization.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/authorization.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/catalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/catalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/catalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/catalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/command.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/command.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/command.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/command.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/configuration.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/configuration.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/configuration.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/configuration.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/excel.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/excel.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/excel.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/excel.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/experiment.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/experiment.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/experiment.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/experiment.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/externalData.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/externalData.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/externalData.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/externalData.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/field.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/field.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/field.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/field.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/apiCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/apiCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/apiCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/apiCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/configurationCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/configurationCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/configurationCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/configurationCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/experimentCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/experimentCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/experimentCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/experimentCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/externalDataCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/externalDataCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/externalDataCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/externalDataCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/fieldCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/fieldCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/fieldCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/fieldCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/integrationCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/integrationCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/integrationCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/integrationCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/permissionCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/permissionCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/permissionCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/permissionCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/providerCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/providerCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/providerCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/providerCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/screenRecipeCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/screenRecipeCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/screenRecipeCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/screenRecipeCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/telemetryCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/telemetryCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/telemetryCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/telemetryCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/testScenarioCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/testScenarioCatalog.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/generated/testScenarioCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/generated/testScenarioCatalog.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/grid.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/grid.ts
similarity index 86%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/grid.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/grid.ts
index 1a3adf19..2ffe9421 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/grid.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/grid.ts
@@ -1,4 +1,5 @@
import type { KbxLookupDefinition } from './lookup'
+import type { KbxStatusDefinition } from './status'
export type KbxGridType =
| 'text' | 'code' | 'integer' | 'decimal' | 'quantity' | 'money'
@@ -6,6 +7,11 @@ export type KbxGridType =
export type KbxGridDensity = 'compact' | 'comfortable'
+export interface KbxGridStatusMap {
+ definitions: readonly KbxStatusDefinition[]
+ unknownLabel?: string
+}
+
export interface KbxGridColumn {
field: keyof T & string
header: string
@@ -19,6 +25,8 @@ export interface KbxGridColumn {
filterable?: boolean
permission?: string
lookup?: KbxLookupDefinition
+ /** type='status'일 때 Domain raw value를 사용자 Label/Semantic으로 변환한다. Row 원본은 변경하지 않는다. */
+ statusMap?: KbxGridStatusMap
drilldown?: boolean
}
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/help.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/help.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/help.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/help.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/index.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/index.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/index.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/index.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/integration.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/integration.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/integration.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/integration.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/lookup.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/lookup.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/lookup.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/lookup.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/navigation.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/navigation.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/navigation.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/navigation.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/operations.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/operations.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/operations.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/operations.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/performance.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/performance.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/performance.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/performance.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/permission.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/permission.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/permission.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/permission.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/preference.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/preference.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/preference.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/preference.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/problem.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/problem.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/problem.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/problem.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/provider.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/provider.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/provider.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/provider.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/registry.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/registry.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/registry.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/registry.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/runtime.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/runtime.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/runtime.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/runtime.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/screen.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/screen.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/screen.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/screen.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/search.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/search.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/search.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/search.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/status.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/status.ts
similarity index 91%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/status.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/status.ts
index 4fd74baf..6cf4c05e 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/status.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/status.ts
@@ -1,5 +1,7 @@
export type KbxStatusSemantic =
| 'draft'
+ | 'ready'
+ | 'info'
| 'pending'
| 'processing'
| 'completed'
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/suggestion.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/suggestion.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/suggestion.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/suggestion.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/telemetry.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/telemetry.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/telemetry.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/telemetry.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/testing.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/testing.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/testing.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/testing.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/transaction.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/transaction.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/transaction.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/transaction.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/ui.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/ui.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/ui.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/ui.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/wms.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/wms.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/wms.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/wms.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/workflow.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/workflow.ts
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-contracts/src/workflow.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-contracts/src/workflow.ts
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/package.json b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/package.json
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/package.json
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/package.json
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/catalog/componentCatalog.ts b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/catalog/componentCatalog.ts
similarity index 98%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/catalog/componentCatalog.ts
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/catalog/componentCatalog.ts
index 79446fce..3af6b079 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/catalog/componentCatalog.ts
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/catalog/componentCatalog.ts
@@ -78,6 +78,7 @@ export const kbxComponentCatalog: KbxComponentCatalogEntry[] = [
{ component:'KbxExceptionSummary', group:'feedback', scenarios:[{id:'default',label:'예외 카운터',state:'default'},{id:'error',label:'중요 예외',state:'error'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
{ component:'KbxExceptionDetailDrawer', group:'overlay', scenarios:[{id:'default',label:'원인/대상/후속작업',state:'default'},{id:'error',label:'Critical 예외',state:'error'},{id:'disabled',label:'권한 없는 Action',state:'disabled'},{id:'keyboard',label:'Drawer Focus/Esc',state:'keyboard'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
{ component:'KbxRecordLifecycle', group:'feedback', scenarios:[{id:'default',label:'Workflow/Version/Audit',state:'default'},{id:'changed',label:'Dirty',state:'changed'},{id:'error',label:'Conflict',state:'error'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
+ { component:'KbxRecordNavigator', group:'navigation', scenarios:[{id:'default',label:'목록 3 / 24 이전·다음',state:'default'},{id:'boundary',label:'첫/마지막 레코드',state:'disabled'},{id:'dirty',label:'미저장 이동 차단',state:'disabled'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
{ component:'KbxBarcodeCapture', group:'wms', scenarios:[{id:'default',label:'Keyboard Wedge',state:'default',density:'touch'},{id:'disabled',label:'Scan Paused',state:'disabled',density:'touch'},{id:'keyboard',label:'Enter 종결/중복 Debounce',state:'keyboard',density:'touch'},{id:'error',label:'Oversized/Invalid 입력 무시',state:'error',density:'touch'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
{ component:'KbxNetworkIndicator', group:'wms', scenarios:[{id:'default',label:'온라인',state:'default',density:'touch'},{id:'loading',label:'동기화/전송 대기',state:'loading',density:'touch'},{id:'error',label:'오프라인',state:'error',density:'touch'}], accessibility:{keyboard:false,focusVisible:false,colorIndependentStatus:true} },
{ component:'KbxWmsActionButton', group:'wms', scenarios:[{id:'default',label:'Touch CTA',state:'default',density:'touch'},{id:'disabled',label:'사용불가',state:'disabled',density:'touch'},{id:'loading',label:'처리중',state:'loading',density:'touch'}], accessibility:{keyboard:true,focusVisible:true,colorIndependentStatus:true} },
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAiAssistant.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAiAssistant.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAiAssistant.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAiAssistant.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAiPanel.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAiPanel.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAiPanel.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAiPanel.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAuditTrail.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAuditTrail.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxAuditTrail.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxAuditTrail.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBadge.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBadge.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBadge.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBadge.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBarcodeField.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBarcodeField.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBarcodeField.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBarcodeField.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBulkActionBar.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBulkActionBar.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxBulkActionBar.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxBulkActionBar.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxButton.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxButton.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxButton.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxButton.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxCheckbox.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxCheckbox.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxCheckbox.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxCheckbox.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxCommandBar.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxCommandBar.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxCommandBar.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxCommandBar.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxConfirm.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxConfirm.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxConfirm.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxConfirm.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxConflictResolver.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxConflictResolver.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxConflictResolver.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxConflictResolver.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataGrid.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataGrid.vue
similarity index 95%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataGrid.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataGrid.vue
index a6bdb448..b1d8a96b 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataGrid.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataGrid.vue
@@ -9,8 +9,10 @@ import type {
KbxSelectionState, KbxValidationError,
} from '@kbx/contracts'
import { normalizeKbxGridClipboardData } from '../grid/editing'
+import { resolveKbxGridStatus } from '../grid/status'
import KbxButton from './KbxButton.vue'
import KbxDataState from './KbxDataState.vue'
+import KbxStatus from './KbxStatus.vue'
import KbxSummaryBar from './KbxSummaryBar.vue'
const props = withDefaults(defineProps<{
@@ -109,12 +111,20 @@ function errorFor(row:T,field:string){const id=String(row[props.rowKey]);return
function changedFor(row:T,field:string){const id=String(row[props.rowKey]);return props.changedCells.some(x=>String(x.rowKey)===id&&x.field===field)}
function columnFor(field:string){return props.columns.find(c=>c.field===field)}
function isEditable(column:KbxGridColumn|undefined,row:T){if(!column||!props.editable)return false;return typeof column.editable==='function'?column.editable(row):(column.editable??false)}
+function statusDisplay(column:KbxGridColumn,value:unknown){return resolveKbxGridStatus(column.statusMap,value).label}
+function statusRendererParams(column:KbxGridColumn,value:unknown){
+ const status=resolveKbxGridStatus(column.statusMap,value)
+ return {label:status.label,semantic:status.semantic,unknown:status.unknown,rawValue:status.rawValue}
+}
const columnDefs=computed[]>(()=>props.columns.map(c=>({
field:c.field,headerName:c.header,width:c.width,minWidth:c.minWidth,maxWidth:c.maxWidth,pinned:c.pinned,
editable:params=>Boolean(params.data&&isEditable(c,params.data)),
sortable:c.sortable??true,filter:c.filterable??true,resizable:true,
- valueFormatter:c.type==='money'||c.type==='quantity'?p=>formatNumber(p.value):undefined,
+ valueFormatter:c.type==='money'||c.type==='quantity'?p=>formatNumber(p.value):c.type==='status'?p=>statusDisplay(c,p.value):undefined,
+ filterValueGetter:c.type==='status'?p=>statusDisplay(c,p.data?.[c.field]):undefined,
+ cellRenderer:c.type==='status'?KbxStatus:undefined,
+ cellRendererParams:c.type==='status'?p=>statusRendererParams(c,p.value):undefined,
valueParser:c.type==='money'||c.type==='quantity'||c.type==='integer'||c.type==='decimal'||c.type==='percent'?p=>Number(String(p.newValue??'').replace(/,/g,'')):undefined,
cellClass:params=>{
const classes:string[]=[]
@@ -148,7 +158,7 @@ function restorePreference(){
gridApi.value.applyColumnState({state:ordered.map(x=>({colId:x.field,width:x.width,pinned:x.pinned,hide:x.hidden,sort:x.sort,sortIndex:x.sortIndex})),applyOrder:true})
}
function resetColumns(){gridApi.value?.resetColumnState();emit('preferenceReset')}
-function exportCsv(){gridApi.value?.exportDataAsCsv({fileName:props.exportFileName})}
+function exportCsv(){gridApi.value?.exportDataAsCsv({fileName:props.exportFileName,processCellCallback:(params:any)=>{const column=columnFor(String(params.column?.getColId?.()??''));return column?.type==='status'?statusDisplay(column,params.value):params.value}})}
function syncActiveRow(){
if(!gridApi.value||props.activeRowKey==null)return
const node=gridApi.value.getRowNode?.(String(props.activeRowKey));if(!node)return
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataProvenance.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataProvenance.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataProvenance.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataProvenance.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataState.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataState.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDataState.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDataState.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDateField.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDateField.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDateField.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDateField.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDateRange.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDateRange.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxDateRange.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDateRange.vue
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDialog.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDialog.vue
new file mode 100644
index 00000000..12d7cb2f
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDialog.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDrawer.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDrawer.vue
new file mode 100644
index 00000000..d0949ad1
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxDrawer.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExcelImport.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExcelImport.vue
new file mode 100644
index 00000000..a2e6b582
--- /dev/null
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExcelImport.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
{{ definition.title }}
+
파일 → 매핑 → 검증 → 미리보기 → 반영 → 결과 순서로 처리합니다. 원본 행 번호와 오류 이력은 유지됩니다.
+
+
+
+
+
+
+
+ 현재 파일{{ sessionContext }}
+ 정상 {{ session.validRows.toLocaleString('ko-KR') }} · 오류 {{ session.invalidRows.toLocaleString('ko-KR') }}
+
+
+
+
+
Excel 파일을 선택하세요.
+ .xlsx · 최대 {{ Math.round((definition.maxFileSizeBytes ?? 10485760) / 1048576) }}MB
+
+ Drag & Drop은 보조 기능이며 파일 선택 버튼은 항상 제공됩니다.
+
+ 예상 신규 {{ session?.createdRows.toLocaleString('ko-KR') }}
+ 예상 수정 {{ session?.updatedRows.toLocaleString('ko-KR') }}
+ 제외 오류 {{ session?.invalidRows.toLocaleString('ko-KR') }}
+
+
반영 대상 {{ session?.validRows.toLocaleString('ko-KR') }}건 · 제외 오류 {{ session?.invalidRows.toLocaleString('ko-KR') }}건입니다. 신규/수정 구분은 서버 Preview가 제공하는 경우에만 표시합니다.
정상 데이터는 반영되었고 오류 데이터는 제외되었습니다. 오류파일로 실패 건만 다시 처리할 수 있습니다.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExcelMenu.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExcelMenu.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExcelMenu.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExcelMenu.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionCenter.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionCenter.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionCenter.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionCenter.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionDetailDrawer.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionDetailDrawer.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionDetailDrawer.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionDetailDrawer.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionSummary.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionSummary.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxExceptionSummary.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxExceptionSummary.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFastEntryPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFastEntryPage.vue
similarity index 69%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFastEntryPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFastEntryPage.vue
index 02efdb74..aef8ab24 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFastEntryPage.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFastEntryPage.vue
@@ -6,6 +6,7 @@ import KbxTemplateContextBar from './KbxTemplateContextBar.vue'
import KbxTemplateStateBoundary from './KbxTemplateStateBoundary.vue'
import KbxValidationSummary from './KbxValidationSummary.vue'
import KbxProblemFeedback from './KbxProblemFeedback.vue'
+import KbxSectionHeader from './KbxSectionHeader.vue'
const props=withDefaults(defineProps<{
screen:KbxScreenDefinition
@@ -22,7 +23,11 @@ const props=withDefaults(defineProps<{
summaryItems?:KbxSummaryItem[]
problem?:KbxProblem|null
problemActionAllowlist?:readonly string[]
-}>(), { showKeyboardGuide:true, context:null, contentState:'ready', refreshing:false, errorRetryable:true, errors:()=>[], summaryItems:()=>[], problem:null, problemActionAllowlist:()=>[] })
+ gridTitle?:string
+ gridDescription?:string
+ rowCount?:number
+ rowCountUnit?:string
+}>(), { showKeyboardGuide:true, context:null, contentState:'ready', refreshing:false, errorRetryable:true, errors:()=>[], summaryItems:()=>[], problem:null, problemActionAllowlist:()=>[], gridTitle:'빠른 입력', gridDescription:'', rowCountUnit:'건' })
const emit=defineEmits<{ command:[string]; problemAction:[string]; retryProblem:[]; dismissProblem:[] }>()
@@ -32,12 +37,15 @@ const emit=defineEmits<{ command:[string]; problemAction:[string]; retryProblem:
Enter 입력 확정/다음F2 코드 조회Ctrl+V Excel 붙여넣기Ctrl+D Fill Down오류는 Grid에서 바로 이동
-
+
+
+
+
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormGrid.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormGrid.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormGrid.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormGrid.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormSection.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormSection.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormSection.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormSection.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormSpan.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormSpan.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFormSpan.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFormSpan.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFreshnessIndicator.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFreshnessIndicator.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxFreshnessIndicator.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxFreshnessIndicator.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxHelpPanel.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxHelpPanel.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxHelpPanel.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxHelpPanel.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxImportPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxImportPage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxImportPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxImportPage.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxInput.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxInput.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxInput.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxInput.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxIntegrationState.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxIntegrationState.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxIntegrationState.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxIntegrationState.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxJobProgress.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxJobProgress.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxJobProgress.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxJobProgress.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxListPage.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxListPage.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxListPage.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxListPage.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxLookup.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxLookup.vue
similarity index 100%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxLookup.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxLookup.vue
diff --git a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxLookupDialog.vue b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxLookupDialog.vue
similarity index 99%
rename from docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxLookupDialog.vue
rename to docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxLookupDialog.vue
index 0d86b1b7..18e721d1 100644
--- a/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/packages/kbx-ui/src/components/KbxLookupDialog.vue
+++ b/docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/components/KbxLookupDialog.vue
@@ -125,7 +125,7 @@ function select(item: KbxLookupItem) {
-
+