{
  "schemaVersion": 1,
  "contractVersion": "1.1.0",
  "sourceSha256": "97ab56bc54149f32ea16577369c4ec29579b516ea464cb42010b31e4dc413e60",
  "recipes": [
    {
      "code": "T01",
      "type": "list",
      "templateComponent": "KbxListPage",
      "defaultCommands": [
        {
          "id": "search",
          "label": "조회",
          "group": "query",
          "shortcut": "F3",
          "permissionKind": "none"
        },
        {
          "id": "excel",
          "label": "엑셀",
          "group": "output",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "server-read-model",
        "tanstack-query",
        "search-condition-preservation",
        "server-side-bulk-selection"
      ],
      "recoveryPolicies": [
        "idle-before-first-search",
        "retain-grid-during-refresh",
        "retry-with-search-context",
        "partial-bulk-result"
      ],
      "securityPolicies": [
        "screen-permission",
        "command-permission",
        "safe-drilldown-route",
        "masked-sensitive-cells"
      ],
      "canonicalScenarioIds": [
        "scenario.oms.order-list.bulk-ship",
        "scenario.oms.order-list.all-filtered-ship"
      ],
      "scaffoldSurfaces": [
        "search",
        "content",
        "summary"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e"
        ],
        "requiredTags": [
          "bulk",
          "idempotency"
        ],
        "requiredEvidence": [
          "playwright-trace"
        ],
        "requiredChecks": [
          "idle-search",
          "refresh-retains-context",
          "bulk-partial-result",
          "safe-drilldown"
        ]
      }
    },
    {
      "code": "T02",
      "type": "master",
      "templateComponent": "KbxMasterPage",
      "defaultCommands": [
        {
          "id": "search",
          "label": "조회",
          "group": "query",
          "shortcut": "F3",
          "permissionKind": "none"
        },
        {
          "id": "new",
          "label": "신규",
          "group": "edit",
          "permissionKind": "write"
        },
        {
          "id": "save",
          "label": "저장",
          "group": "edit",
          "shortcut": "F8",
          "variant": "primary",
          "permissionKind": "write"
        },
        {
          "id": "excel",
          "label": "엑셀",
          "group": "output",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "normalized-write-model",
        "lookup-provider",
        "server-validation",
        "optimistic-concurrency",
        "audit"
      ],
      "recoveryPolicies": [
        "dirty-navigation-guard",
        "conflict-reload",
        "field-validation-focus",
        "readonly-after-terminal-state"
      ],
      "securityPolicies": [
        "screen-permission",
        "write-command-permission",
        "server-enforcement",
        "sensitive-value-masking"
      ],
      "canonicalScenarioIds": [
        "scenario.erp.item-master.lifecycle",
        "scenario.erp.item-master.keyboard-recovery"
      ],
      "scaffoldSurfaces": [
        "list",
        "detail"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e",
          "integration"
        ],
        "requiredTags": [
          "master-crud",
          "concurrency",
          "audit"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "db-assertions"
        ],
        "requiredChecks": [
          "permission-aware-save",
          "dirty-guard",
          "conflict-reload",
          "audit-visible"
        ]
      }
    },
    {
      "code": "T03",
      "type": "transaction",
      "templateComponent": "KbxTransactionPage",
      "defaultCommands": [
        {
          "id": "new",
          "label": "신규",
          "group": "edit",
          "permissionKind": "write"
        },
        {
          "id": "save",
          "label": "저장",
          "group": "edit",
          "shortcut": "F8",
          "variant": "primary",
          "permissionKind": "write"
        },
        {
          "id": "excel",
          "label": "엑셀",
          "group": "output",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "normalized-write-model",
        "header-detail-transaction",
        "server-validation",
        "optimistic-concurrency",
        "audit",
        "outbox"
      ],
      "recoveryPolicies": [
        "dirty-navigation-guard",
        "conflict-reload",
        "row-key-validation",
        "double-submit-guard"
      ],
      "securityPolicies": [
        "screen-permission",
        "write-command-permission",
        "workflow-permission",
        "server-enforcement"
      ],
      "canonicalScenarioIds": [
        "scenario.oms.order-register.keyboard",
        "scenario.oms.order-register.conflict",
        "scenario.oms.order-register.lifecycle"
      ],
      "scaffoldSurfaces": [
        "header",
        "detail",
        "summary"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e",
          "integration"
        ],
        "requiredTags": [
          "keyboard",
          "lookup",
          "conflict",
          "workflow"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "problem-json"
        ],
        "requiredChecks": [
          "f2-lookup",
          "f8-save",
          "row-key-validation",
          "conflict-recovery"
        ]
      }
    },
    {
      "code": "T04",
      "type": "fast-entry",
      "templateComponent": "KbxFastEntryPage",
      "defaultCommands": [
        {
          "id": "new",
          "label": "신규",
          "group": "edit",
          "permissionKind": "write"
        },
        {
          "id": "save",
          "label": "저장",
          "group": "edit",
          "shortcut": "F8",
          "variant": "primary",
          "permissionKind": "write"
        },
        {
          "id": "excel",
          "label": "엑셀",
          "group": "output",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "typed-clipboard-normalization",
        "stable-client-row-key",
        "bulk-server-validation",
        "idempotent-bulk-save"
      ],
      "recoveryPolicies": [
        "error-cell-navigation",
        "paste-error-summary",
        "dirty-navigation-guard",
        "partial-save-result"
      ],
      "securityPolicies": [
        "screen-permission",
        "write-command-permission",
        "lookup-entity-resolution",
        "server-enforcement"
      ],
      "canonicalScenarioIds": [
        "scenario.erp.item-price.fast-entry",
        "scenario.oms.order-register.fast-entry"
      ],
      "scaffoldSurfaces": [
        "guide",
        "content",
        "validation",
        "summary"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e"
        ],
        "requiredTags": [
          "fast-entry",
          "paste",
          "fill-down",
          "idempotency"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "problem-json"
        ],
        "requiredChecks": [
          "multi-cell-paste",
          "fill-down",
          "error-navigation",
          "partial-save-result"
        ]
      }
    },
    {
      "code": "T05",
      "type": "master-detail",
      "templateComponent": "KbxMasterDetailPage",
      "defaultCommands": [
        {
          "id": "search",
          "label": "조회",
          "group": "query",
          "shortcut": "F3",
          "permissionKind": "none"
        },
        {
          "id": "excel",
          "label": "엑셀",
          "group": "output",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "server-read-model",
        "master-selection-context",
        "detail-projection",
        "n-plus-one-prohibition"
      ],
      "recoveryPolicies": [
        "selection-restore-after-refresh",
        "retain-master-on-detail-error",
        "safe-drilldown",
        "empty-master-detail-reset"
      ],
      "securityPolicies": [
        "screen-permission",
        "safe-drilldown-route",
        "masked-sensitive-detail"
      ],
      "canonicalScenarioIds": [
        "scenario.erp.inventory.master-detail-context"
      ],
      "scaffoldSurfaces": [
        "search",
        "master",
        "detail"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e"
        ],
        "requiredTags": [
          "master-detail",
          "context-retention",
          "drill-down"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "api-transcript"
        ],
        "requiredChecks": [
          "master-selection-context",
          "detail-error-retains-master",
          "history-context",
          "safe-drilldown"
        ]
      }
    },
    {
      "code": "T06",
      "type": "queue",
      "templateComponent": "KbxQueuePage",
      "defaultCommands": [
        {
          "id": "search",
          "label": "조회",
          "group": "query",
          "shortcut": "F3",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "exception-first-projection",
        "sla-state",
        "server-side-bulk-selection",
        "audit"
      ],
      "recoveryPolicies": [
        "partial-action-result",
        "retryable-vs-terminal-error",
        "stale-event-suppression",
        "detail-context-retention"
      ],
      "securityPolicies": [
        "screen-permission",
        "exception-action-permission",
        "server-enforcement"
      ],
      "canonicalScenarioIds": [
        "scenario.common.operations.stale-event",
        "scenario.integration.manual-retry.idempotent",
        "scenario.common.operations.queue-recovery"
      ],
      "scaffoldSurfaces": [
        "summary",
        "exceptions",
        "content"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e",
          "integration"
        ],
        "requiredTags": [
          "exception",
          "recovery",
          "context-retention"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "db-assertions"
        ],
        "requiredChecks": [
          "exception-first",
          "detail-context-retention",
          "retryable-vs-terminal",
          "partial-action-result"
        ]
      }
    },
    {
      "code": "T07",
      "type": "reconcile",
      "templateComponent": "KbxReconcilePage",
      "defaultCommands": [
        {
          "id": "search",
          "label": "조회",
          "group": "query",
          "shortcut": "F3",
          "permissionKind": "none"
        }
      ],
      "requiredPolicies": [
        "expected-actual-difference-projection",
        "reason-code",
        "resolution-state",
        "audit"
      ],
      "recoveryPolicies": [
        "grace-period-before-mismatch",
        "mismatch-only-filter",
        "resolution-retry",
        "retain-comparison-context"
      ],
      "securityPolicies": [
        "screen-permission",
        "resolution-permission",
        "server-enforcement"
      ],
      "canonicalScenarioIds": [
        "scenario.common.reconcile.grace-period",
        "scenario.common.reconcile.mismatch-recovery"
      ],
      "scaffoldSurfaces": [
        "search",
        "content",
        "resolution"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e",
          "integration"
        ],
        "requiredTags": [
          "reconcile",
          "mismatch-filter",
          "eventual-consistency"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "db-assertions"
        ],
        "requiredChecks": [
          "mismatch-only-filter",
          "grace-period",
          "resolution-retry",
          "comparison-context"
        ]
      }
    },
    {
      "code": "T08",
      "type": "import",
      "templateComponent": "KbxImportPage",
      "defaultCommands": [],
      "requiredPolicies": [
        "staging-before-domain-write",
        "mapping-source-traceability",
        "background-job-threshold",
        "idempotent-commit",
        "audit"
      ],
      "recoveryPolicies": [
        "session-mapping-isolation",
        "validation-error-download",
        "partial-commit-result",
        "job-refresh-recovery"
      ],
      "securityPolicies": [
        "screen-permission",
        "file-preflight",
        "commit-permission",
        "server-validation",
        "sensitive-column-policy"
      ],
      "canonicalScenarioIds": [
        "scenario.oms.order-import.partial"
      ],
      "scaffoldSurfaces": [
        "steps",
        "content",
        "result"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e"
        ],
        "requiredTags": [
          "excel",
          "mapping",
          "staging",
          "partial-success",
          "job"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "problem-json"
        ],
        "requiredChecks": [
          "mapping-isolation",
          "validation-download",
          "commit-confirm",
          "job-refresh-recovery"
        ]
      }
    },
    {
      "code": "T09",
      "type": "wms-mobile",
      "templateComponent": "KbxWmsMobilePage",
      "defaultCommands": [],
      "requiredPolicies": [
        "barcode-normalization",
        "server-validation-before-success",
        "idempotent-scan-command",
        "network-state",
        "offline-command-policy"
      ],
      "recoveryPolicies": [
        "duplicate-scan-debounce",
        "response-loss-replay",
        "wrong-item-no-retry",
        "pending-command-visibility"
      ],
      "securityPolicies": [
        "screen-permission",
        "execute-permission",
        "server-enforcement",
        "offline-command-allowlist"
      ],
      "canonicalScenarioIds": [
        "scenario.wms.picking.idempotent-replay",
        "scenario.wms.picking.wrong-item"
      ],
      "scaffoldSurfaces": [
        "context",
        "content",
        "actions"
      ],
      "testProfile": {
        "requiredScenarioKinds": [
          "e2e"
        ],
        "requiredTags": [
          "scanner",
          "idempotency",
          "network",
          "retry-policy"
        ],
        "requiredEvidence": [
          "playwright-trace",
          "api-transcript"
        ],
        "requiredChecks": [
          "scan-normalization",
          "server-before-success",
          "response-loss-replay",
          "wrong-item-no-retry"
        ]
      }
    }
  ]
}
