609 lines
14 KiB
JSON
609 lines
14 KiB
JSON
{
|
|
"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"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|