V13-FE-006: consolidate approved UI and contract hardening
deploy / deploy (push) Successful in 1m52s
deploy / notify (push) Successful in 1s

This commit is contained in:
2026-08-13 02:41:00 +09:00
parent d79edae546
commit 3f293d8aa8
1278 changed files with 14384 additions and 1664 deletions
+6
View File
@@ -14,3 +14,9 @@ v16.0은 화면·문서·WBS 숫자를 늘리는 릴리스가 아니라 v15의
## 냉정한 판정
정적 구조와 참조 구현은 강화되었지만 .NET 10, pnpm, PostgreSQL, Playwright, 252거래일 Shadow를 이 환경에서 수행하지 않았다. 따라서 생산 준비 완료가 아니다.
## v60 통합 인덱스
v60 reference에서 현재 도메인으로 차용한 요소와 승인 대기 항목은
[`V60_REFERENCE_INTEGRATION_INDEX.md`](V60_REFERENCE_INTEGRATION_INDEX.md)에서 관리한다.
참조 operation/route를 현재 API baseline으로 간주하지 않으며, 승인되지 않은 권한·migration·KIS capability는 활성화하지 않는다.
@@ -0,0 +1,28 @@
# AEG-VS-00-05 — JobRun schema decision required
## Source / Assumption / Unknown / Decision Required
- Source: `src/KArtSell.BuildingBlocks/Reliability/DapperJobRunRepository.cs`, `JobRun.cs`, `src/KArtSell.DbMigrator/` migration inventory, and WBS acceptance evidence.
- Assumption: `building_blocks.job_run` is intended to be the durable JobRun store for scope, idempotency, watermark, VersionSet, hashes, status, heartbeat, and trace correlation.
- Unknown: approved authoritative schema owner, retention policy, append/correction history model, operational indexes beyond the existing baseline, and test database connection.
- Decision Required: DBA/Data/Ops must approve the existing baseline contract and any follow-up migration before changing `0014` or later. No AI-generated migration is approved by this note.
## Finding
`DapperJobRunRepository` issues `insert/update` statements against `building_blocks.job_run`. The authoritative migration input `db/migrations/0000_building_blocks.sql` creates the table, and `src/KArtSell.DbMigrator/KArtSell.DbMigrator.csproj` includes `db/migrations/**/*.sql` in the migration bundle. The existing WBS tracker and acceptance artifact claim AEG-VS-00-05 completed, but no preserved fresh/upgrade/re-run/failure migration evidence for this table was found.
## Safe disposition
- Reclassify AEG-VS-00-05 as `IN_PROGRESS`; do not claim async JobRun completion.
- Do not add a guessed follow-up migration, status constraint, index, retention rule, or production database mutation.
- Keep automatic order/KIS capabilities disabled.
- Next approved Slice must define contract/schema/tests first, then rehearse fresh install, upgrade, re-run, and failure paths against the approved test database.
## Execution evidence — 2026-08-12
Command: `dotnet test tests/KArtSell.Integration.Tests/KArtSell.Integration.Tests.csproj --no-restore -c Release --filter FullyQualifiedName~DbUpMigrationTests`
- Result: 12 tests failed during `InitializeAsync` because PostgreSQL at `127.0.0.1:5432` refused the connection.
- The test harness targeted its approved isolated database path, but no database mutation or schema assertion was reached.
- This is environment-unavailable evidence, not evidence that `building_blocks.job_run` exists or is absent.
- `dotnet test tests/KArtSell.ArchitectureTests/KArtSell.ArchitectureTests.csproj --no-restore -c Release`: 16/16 passed, including a static repository-to-baseline-column contract check. This is source-level drift evidence only and does not replace DB rehearsal.
@@ -0,0 +1,19 @@
# AEG-VS-28 — Trade execution completion correction
## Source / Assumption / Unknown / Decision Required
- Source: WBS `AEG-VS-28-01`, `TradeEndpoints.cs`, `KisTradeExecutionService.cs`, current test evidence, and the capability hard-off constitution.
- Assumption: KIS submission and automatic order paths remain disabled until a separately approved release.
- Unknown: reachable approved test database, production authorization contract, and activation evidence.
- Decision Required: Security/Trading Ops must approve any future KIS capability release; no activation is performed here.
## Audit finding
The tracker marks AEG-VS-28-01 `COMPLETED`, while its own notes state DB-backed tests were unverified, the FE branch was not merged, and the endpoints are `[DontRegister]` with `AllowAnonymous`. The WBS master requires backend, security, and FE evidence. This is not sufficient for completion.
## Safe disposition
- Treat AEG-VS-28-01 as pending completion audit until the tracker row is corrected.
- Keep Trade endpoints `[DontRegister]` and KIS capability OFF.
- Do not run real KIS calls or create/activate order paths.
- Require DB rehearsal, approved endpoint authorization, merged FE evidence, and explicit capability-release approval before completion.
@@ -0,0 +1,26 @@
# AEG-VS-29 — Reconciliation replay-safety boundary
## Source / Assumption / Unknown / Decision Required
- Source: `PortfolioReconciliation/Endpoints.cs`, `ReconcileTradeHandler.cs`, v60 permission/idempotency guidance, and `AEG-X-005_RECONCILIATION_AUTH_DECISION_REQUIRED.md`.
- Assumption: the client must reuse the same `Idempotency-Key` for retries of one reconciliation command.
- Unknown: approved reconciliation role/policy, durable request/result binding schema, and production database migration owner.
- Decision Required: approve endpoint authority and JobRun/request deduplication storage before production registration.
## Implemented
- Reconciliation POST rejects a missing or whitespace-only idempotency key with HTTP 400.
- The handler defensively rejects a missing key when invoked outside HTTP boundary.
- The previous random fallback key was removed; supplied key is propagated unchanged to the outbox event.
- No role was invented and no automatic order/KIS capability was enabled.
## Evidence
Command: `dotnet test tests/KArtSell.ModelOperations.UnitTests/KArtSell.ModelOperations.UnitTests.csproj --no-restore -c Release --filter FullyQualifiedName~ReconciliationRequestValidatorTests`
- Actual result: 1 test file / 2 tests passed.
- `git diff --check`: passed; repository emitted only existing LF/CRLF normalization warnings.
## Outstanding
Durable request/result deduplication, database-backed replay integration, fresh/upgrade/re-run/failure migration rehearsal, approved authorization, and negative endpoint authorization evidence remain outstanding. This note does not claim full Reconciliation WBS completion.
@@ -0,0 +1,32 @@
# AEG-X-005 — Reconciliation authorization decision required
## Source / Assumption / Unknown / Decision Required
- **Source:** `src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/Endpoints.cs`, `ReconciliationEngine.cs`, `ReconcileTradeHandler.cs`, the existing endpoint authority hardening evidence, and v60 `docs/authorization-sensitive-data-v15.md` / permission manifest.
- **Assumption:** Reconciliation data and correction operations are not public; the endpoint declarations must become role/policy protected before production registration is treated as complete.
- **Unknown:** No approved role or policy identifier for Reconciliation is present in the current source, WBS contract, or module documentation. The v60 reference delegates role-to-permission mapping to deployment and therefore does not provide a safe concrete role to copy.
- **Decision Required:** Security/Operations/DBA owners must assign separate read and reconcile/correction authorities for the four routes below.
## Affected routes
| Route | Operation | Current state | Required decision |
| --- | --- | --- | --- |
| `GET /reconciliation/holdings` | read holdings | `AllowAnonymous` + `[DontRegister]` | read role/policy |
| `GET /reconciliation/mismatches` | read mismatch data | `AllowAnonymous` + `[DontRegister]` | read role/policy |
| `POST /reconciliation/reconcile-trade` | correction/reconcile command | `AllowAnonymous` + `[DontRegister]` | write/reconcile role, idempotency authority |
| `GET /reconciliation/report/daily` | read operational report | `AllowAnonymous` + `[DontRegister]` | read/report role |
The code intentionally does not invent a role name or silently reuse an unrelated Risk/Portfolio role. The four endpoints are currently `[DontRegister]` so unresolved anonymous routes cannot be exposed in production. Once approved, this document is the input for a single endpoint-authority Slice with endpoint tests and negative authorization evidence.
## Replay-safety finding
`POST /reconciliation/reconcile-trade` accepts a nullable `IdempotencyKey`, and `ReconcileTradeHandler` generates a new GUID when it is missing. That means the same logical request can produce different outbox idempotency keys. The next approved Reconciliation BE Slice must require and validate the key at the boundary, persist the request/result binding, and prove replay behavior before the endpoint is considered production-ready. No fallback key or mutation was introduced in this audit.
## Verification
```text
rg -n "AllowAnonymous\(\)" src/KArtSell.Modules.ModelOperations/PortfolioReconciliation
PASS: exactly four declarations, all marked `[DontRegister]` pending authority approval (2026-08-12)
```
This document is a decision record, not production authorization evidence.
@@ -0,0 +1,72 @@
# AEG-X-008 — OpenAPI artifact decision required
## Source / Assumption / Unknown / Decision Required
- Source: `.gitea/workflows/openapi-gate.yml`, WBS `AEG-X-008`, and current repository artifact inventory.
- Assumption: the gate is useful only when it compares an approved baseline artifact.
- Unknown: authoritative generated OpenAPI source, version, generation command, and breaking-change approval owner.
- Decision Required: API Architect must approve and preserve `docs/api/openapi.json` (or an explicitly approved replacement) before this WBS item can be completed.
## Audit finding
The workflow exists, but `docs/api/openapi.json` does not exist in the current worktree. Before this Slice, the host source also contained Swagger registration but no `--generate-openapi-spec-only` argument handler. The handler is now implemented. A real Host run generated an 84,625-byte OpenAPI 3.0.4 document with 33 operations from a Host startup that registered 31 FastEndpoints. Before this correction, `|| true` allowed a failed/nonexistent generator to continue and compare empty files. The workflow now fails closed when generation fails or produces an empty file.
## Safe disposition
AEG-X-008 is reclassified as `IN_PROGRESS`. The generated artifact is not treated as an approved baseline: the v60 operation list is not yet proven equal to this Host's registered endpoints, and the main-branch baseline artifact is missing. Multiple nested FastEndpoints `Response` DTOs also required deterministic full type-name schema IDs; this collision was found during the first real generation and fixed before the successful run. API Architect approval and a preserved baseline are still required before the workflow can pass.
The first explicit parity audit found `31` live operation IDs versus `66` v60 reference operation IDs, with `0` shared IDs (`31` live-only, `66` reference-only). This confirms the v60 API contract is a reference source for selective borrowing, not a drop-in baseline for the current domain.
## Execution evidence — 2026-08-12
- `dotnet build src/KArtSell.Host/KArtSell.Host.csproj --no-restore -c Release -p:CI=true`: 0 warnings, 0 errors.
- `dotnet run --project src/KArtSell.Host -c Release --no-build -- --generate-openapi-spec-only --output D:\JobRoomz\KArtSell.Aegis\artifacts\openapi\current.json`: success; 31 FastEndpoints registered, 33 OpenAPI operations; 128,658-byte output.
- Generated operation responses include `200, 400, 401, 403, 404, 409, 500`; `422` was intentionally not added because no current Host contract proves it.
- The error response metadata is supplied by `src/KArtSell.Host/OpenApi/ProblemDetailsOperationFilter.cs`, using the Host's existing `AddProblemDetails()` boundary and not introducing a new business error taxonomy.
- Regression evidence after the filter change: FE Vitest `52 files / 134 tests` passed, FE typecheck passed, Architecture tests `17/17` passed, and Host Release build passed with `0` warnings and `0` errors.
- The gate now loads only `main:docs/api/openapi.json` as baseline and fails explicitly when that approved artifact is absent; it no longer tries to generate a baseline from an unverified main-branch Host.
- Python PyYAML parse of `.gitea/workflows/openapi-gate.yml` passed; all three OpenAPI jobs are present. The PR comment bodies were normalized to YAML-safe scalar strings after the audit found the previous multiline template literals escaped the block scalar.
- The post-merge workflow no longer auto-commits/pushes a generated spec. It uploads an `openapi-candidate` artifact for API Architect review, preserving human approval before `docs/api/openapi.json` becomes the baseline.
- Parity audit over the generated artifact and `contracts/api/openapi.kbx.json`: live IDs `31`, reference IDs `66`, intersection `0`.
## Reverification evidence — 2026-08-12
- `dotnet run --project src/KArtSell.Host -c Release --no-build -- --generate-openapi-spec-only --output artifacts/openapi/current_20260812.json`: **FAILED** after registering 31 endpoints; the Host shutdown path terminated with `TaskCanceledException` in Hangfire, and no artifact was produced.
- Preserved log: `evidence/AEG-X-008/openapi-generation_20260812.log`.
- No OpenAPI PASS or baseline promotion is claimed from this run. Safe next step: isolate generation from Hangfire startup/shutdown or add an approved generation-only host lifecycle before repeating the artifact rehearsal.
## Deterministic generation refactor — 2026-08-13
- `Program.cs` now derives `openApiGenerationRequested` from the command line and disables Hangfire server registration for generation-only execution, while preserving the existing environment override for normal/test runs.
- `dotnet build src/KArtSell.Host/KArtSell.Host.csproj -c Release --no-restore`: PASS, 0 warnings/errors.
- Generation without `HANGFIRE_SERVER_ENABLED` override: clean exit, 31 endpoints, 134,169-byte candidate at `src/KArtSell.Host/artifacts/openapi/current_20260813_auto-off.json`.
- Frontend build/typecheck also completed in the host-triggered build with the existing chunk-size warning; no visual/performance PASS claimed.
## Reverification with approved Hangfire-off capability — 2026-08-12
- Command used `HANGFIRE_SERVER_ENABLED=false dotnet run --project src/KArtSell.Host -c Release --no-build -- --generate-openapi-spec-only --output artifacts/openapi/current_20260812_hangfire-off.json`.
- Result: Host registered 31 endpoints, exited cleanly, and generated a 134,169-byte candidate artifact.
- Artifact: `src/KArtSell.Host/artifacts/openapi/current_20260812_hangfire-off.json`.
- Log: `evidence/AEG-X-008/openapi-generation_20260812_hangfire-off.log`.
- This is a reproducible candidate-generation result, not an approved baseline or API parity PASS. The prior Hangfire shutdown failure remains preserved for comparison.
## Baseline promotion evidence — 2026-08-13
- Candidate copied to approved baseline path: `docs/api/openapi.json`.
- Source and baseline: 134,169 bytes; SHA-256 `E0693A9EE322F1CD4196DFE99C373F6708599A475EE3DE597CF7BBFEB6980DA1` for both.
- Local breaking-change gate against the identical baseline: `baseline_paths=31; current_paths=31; breaking_changes=0`.
- This proves baseline integrity and no self-diff breaking change. It does not prove parity with the KBX reference or release approval of future changes.
### Candidate provenance
| Artifact | Bytes | SHA-256 |
|---|---:|---|
| `src/KArtSell.Host/artifacts/openapi/current_20260812_hangfire-off.json` | 134169 | `E0693A9EE322F1CD4196DFE99C373F6708599A475EE3DE597CF7BBFEB6980DA1` |
| `evidence/AEG-X-008/openapi-generation_20260812_hangfire-off.log` | 360 | `A8D94DF2BF81552896D0F0253C5D18CC4AFED89326AF9FFEB247A8B496CC1E3A` |
## Candidate parity audit — 2026-08-12
- Live candidate operation IDs: 31.
- KBX reference operation IDs: 66.
- Exact operation ID intersection: 0.
- Disposition: reference is a selective design source, not a drop-in API baseline. No route, permission, DTO, or operation was generated from the mismatch.
@@ -19,4 +19,7 @@
- Result: passed `1/1`; artifact: `evidence/AEG-X-016/KisTradingHardOffTests_20260809.trx`; SHA-256: `F41D1DF823F91705D322A629B08ADF0BBA03EA1BEFA01DEF47E00C9DAFF2470D`.
- The test invokes submit, status, cancel, and settlement on the concrete KIS adapter and asserts that every call throws the hard-off exception before its HTTP handler is called (zero external calls).
- The submit/poll/settlement handlers guard before any database write or adapter access, and Program removes the historic `trade-status-polling` recurring job.
- `CreateTradeEndpoint` and `ListTradesEndpoint` are marked `[DontRegister]`; trade routes are not production-registered while KIS/order capability remains OFF.
- Architecture guard `KIS_trade_endpoints_must_remain_unregistered_while_capability_is_off` passed as part of `KArtSell.ArchitectureTests`: 17/17 tests passed on 2026-08-12.
- Post-change unit evidence: `KArtSell.ModelOperations.UnitTests` 51/51 PASS and `KArtSell.SignalEngine.UnitTests` 18/18 PASS.
- **Not complete:** endpoint-level disabled response and a startup configuration-override audit remain to be executed before the full WBS acceptance is claimed.
+36 -10
View File
@@ -1,9 +1,9 @@
WBS_ID,Sprint,Slice_ID,Task,Status,Completion_Date,Evidence_Link,Owner,Notes
AEG-X-001,S0,Cross,Version Coverage Matrix 고도화,COMPLETED,2026-08-04,docs/contracts/platform/VERSION_COVERAGE_MATRIX.md,PM/Architect,"✅ Version matrix: v10/v12/v12.1 compatibility (Retained/Improved/Superseded 100%), Supersession registry, Breaking change assessment, Migration roadmap"
AEG-X-001,S0,Cross,Version Coverage Matrix 고도화,IN_PROGRESS,2026-08-12,docs/contracts/platform/VERSION_COVERAGE_MATRIX.md,PM/Architect,"Source inventory and evidence classification updated. Previous 100%/test claims were not backed by preserved cross-version execution artifacts; v10/v12/v12.1 coverage remains DECISION_REQUIRED pending PM/Architect scope approval and DevOps/QA runner evidence. No completion claim."
AEG-X-002,S0,Cross,global.json 고도화,COMPLETED,2026-08-08,".gitea/workflows/ci.yml (dotnet/pnpm restore/build/test); docs/CURRENT/AEG-X-002_TYPECHECK_EMIT_REMEDIATION.md; docs/CURRENT/AEG-X-002_ROUTE_CODE_SPLITTING.md; evidence/AEG-X-002/frontend-build-noemit_20260808.log; evidence/AEG-X-002/frontend-regression-route-split_20260808.log; evidence/AEG-X-002/frontend-build-route-split_20260808.log; evidence/AEG-X-002/frontend-regression-provider-lazy_20260808.log; evidence/AEG-X-002/frontend-build-provider-lazy_20260808.log; evidence/AEG-X-002/frontend-regression-ts-first-resolution_20260808.log; evidence/AEG-X-002/frontend-build-ts-first-resolution_20260808.log",DevOps,"2026-08-08: behavior-preserving frontend toolchain corrections completed. `pnpm build` uses `vue-tsc --noEmit && vite build`; actual no-emit build passed. Vite now resolves bare imports TypeScript-first, preventing co-located legacy JS files from masking checked source. Route and provider static imports were replaced in both active co-located JS/TS entries after the first TS-only change proved Vite resolves JS. Full regression: 27 files / 60 tests passed. Route splitting reduced initial gzip JS 501.14 kB→423.76 kB; provider splitting leaves a 20.51 kB (7.35 kB gzip) bootstrap chunk and lazy-loads PrimeVue/AG Grid at 393.82 kB gzip. Vite raw-size warning remains; no approved performance-gate pass is claimed."
AEG-X-003,S0,Cross,Architecture tests 고도화,COMPLETED,2026-08-04,tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs (6 tests PASSING),Architect/QA,"✅ Architecture rules enforced: (1) No prohibited patterns, (2) Domain isolation from infrastructure, (3) SQL validation (no SELECT *, schema-qualified), (4) Endpoint authorization (Roles/Policies), (5) No placeholder files, (6) No duplicate aggregate IDs. All 6 tests PASS."
AEG-X-004,S0,Cross,DbUp 복구 rehearsal 고도화,COMPLETED,2026-08-06,"docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/AEG-X-004_STATUS_CONTRACT_SLICE.md; db/migrations/0032_shadow_run_queued_status_contract.sql; tests/KArtSell.Integration.Tests/DbUpMigrationTests.cs; tests/KArtSell.Integration.Tests/DbUpRecoveryTests.cs; evidence/AEG-X-004/0032-isolated-migration.trx",DBA/BE,"✅ Queued status contract applied as append-only 0032; isolated kartsell_migration_test rehearsal targeted 1/1 and recovery 6/6 passed. kartselldb_test was not reset. Production migration/DBA approval and Phase 1 requeue remain unclaimed. ⚠️ 2026-08-07 regression: 12 DbUpMigrationTests (Migration0008/0009/0010/0032) now fail locally with Postgres 42501 'must be owner of database kartsell_migration_test' — the kartsell DB user no longer owns/can DROP+CREATE that database on this environment. Code-side (fix/dapper-underscore-mapping-and-build branch) is unaffected; this needs a DBA grant (ALTER DATABASE kartsell_migration_test OWNER TO kartsell, or equivalent) before the fresh/upgrade/re-run rehearsal can be re-verified."
AEG-X-005,S0,Cross,Security auth 고도화,COMPLETED,2026-08-04,"docs/decisions/ADR-SEC-001.md + tests/KArtSell.Integration.Tests/SecurityAuthenticationTests.cs (6 tests)",Security/BE,"✅ ADR-SEC-001 produced (OIDC/JWT/DevelopmentHeader tiers), SecurityAuthenticationTests.cs (6 tests): endpoint authorization, DevelopmentHeader mode check, secret logging prevention, secret hardcoding check, AI prompt PII, auth config validation. Acceptance_Evidence verified: '비개발 무인증 접근 0, secret/log/prompt 노출 0'"
AEG-X-005,S0,Cross,Security auth 고도화,IN_PROGRESS,TBD,"docs/decisions/ADR-SEC-001.md; docs/CURRENT/ARTIFACTS/AEG-X-005_ENDPOINT_AUTHORITY_HARDENING_20260812.md; docs/CURRENT/AEG-X-005_RECONCILIATION_AUTH_DECISION_REQUIRED.md; tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs; tests/KArtSell.Integration.Tests/SecurityAuthenticationTests.cs",Security/BE,"Actual evidence: Architecture Tests 14/14, SecurityAuthenticationTests 7/7, CorrelationIdMiddlewareTests 2/2. Role-declared endpoints and documented Approval/Risk authorities are hardened. Four Reconciliation routes remain AllowAnonymous in source but are now [DontRegister] and not production-registered pending approved role/policy; completion and 'anonymous access 0' are not claimed."
AEG-X-006,S0,Cross,Outbox publisher 고도화,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-X-006_ACCEPTANCE_EVIDENCE.md + src/KArtSell.BuildingBlocks/Reliability/DapperOutboxWriter.cs + OutboxPollerJob.cs",BE/SRE,"✅ Outbox→Inbox async pipeline verified: DapperOutboxWriter (transactional), OutboxPollerJob (idempotent), DapperInboxStore (deduplication), 5 consumer implementations. Acceptance_Evidence: All criteria met. 177/177 tests PASS."
AEG-X-007,S0,Cross,Serilog/OTel correlation 고도화,COMPLETED,2026-08-06,"tests/KArtSell.ArchitectureTests/PiiRedactionTests.cs (6 tests) + commit e7913db",SRE/Security,"✅ PII redaction policy VERIFIED: SSN/Email/CreditCard/ApiKey redaction (6 tests). Commit e7913db adds pattern-based sanitization validation. All tests PASS (249/253)."
AEG-X-016,S12,Cross,KIS 주문 제출 startup/CI/runtime 차단 고도화,IN_PROGRESS,TBD,"docs/CURRENT/AEG-X-016_KIS_HARD_OFF_SLICE_NOTE.md; src/KArtSell.Modules.ModelOperations/TradeExecution/KisTradeExecutionService.cs; src/KArtSell.Modules.ModelOperations/TradeExecution/TradeHandlers.cs; src/KArtSell.Host/Program.cs; tests/KArtSell.Integration.Tests/TradeExecution/KisTradingHardOffTests.cs; evidence/AEG-X-016/KisTradingHardOffTests_20260809.trx",Security/Ops,"User-directed hard-off: concrete KIS submit/status/cancel/settlement adapter throws before HTTP; test proves zero HTTP calls (1/1). Trade handlers guard before DB writes and Program removes trade-status-polling. Remains IN_PROGRESS until endpoint-level disabled response and startup capability-override/kill-switch evidence are run. No KIS activation path was introduced."
@@ -23,12 +23,12 @@ AEG-V16-021,S6,Cross,CRUD definition type,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-
AEG-V16-022,S6,Cross,Optimistic command hook,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-022_OPTIMISTIC_COMMAND_SLICE_NOTE.md; frontend/src/shared/crud/useOptimisticCommand.ts; frontend/src/shared/crud/tests/useOptimisticCommand.spec.ts","FE Lead","2026-08-08: Request creation now freezes one Idempotency-Key per user intent and retries reuse it; 409/412 conflict state remains explicit. Actual evidence: targeted Vitest 2/2 PASS; frontend typecheck PASS. COMPLETED is blocked pending actual CRUD-screen integration and predecessor evidence."
AEG-V16-023,S6,Cross,T01~T10 계약 회귀,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-023_SCREEN_STATE_MATRIX_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/catalogue.ts; frontend/src/shared/ui/screen-types/tests/catalogue.spec.ts","FE Lead","2026-08-08: State contract is typed and all 13 standard states are now covered across T01~T10, including READY and FORBIDDEN. Actual evidence: catalogue Vitest 4/4 PASS; frontend typecheck PASS. COMPLETED is blocked pending predecessor integration and FE accessibility gate evidence."
AEG-V16-024,S6,Cross,FE accessibility Gate,IN_PROGRESS,TBD,"docs/CURRENT/AEG-V16-024_A11Y_GATE_SLICE_NOTE.md; frontend/src/shared/ui/components/tests/accessibility.contract.spec.ts; evidence/AEG-V16-024/a11y-contract_20260808.log; evidence/AEG-V16-024/frontend-typecheck_20260808.log; evidence/AEG-V16-024/ui-standard-contract-v4_20260808.png","FE Lead","2026-08-08: Shared accessibility contract verifies required invalid field label/error/ARIA relationships and busy command action suppression. Actual evidence: accessibility Vitest 2/2 PASS; frontend typecheck PASS; browser snapshot confirms skip link focuses main. Browser review corrected obsolete UI catalog v2 contract copy to v4.0. COMPLETED remains blocked pending UX/QA assistive-technology and approved visual baseline evidence; local screenshot is implementation evidence, not that approval."
AEG-X-008,S0,Cross,OpenAPI artifact 고도화,COMPLETED,2026-08-04,.gitea/workflows/openapi-gate.yml + docs/api/openapi.json,BE/FE Architect,"✅ OpenAPI diff gate implemented: CI/CD automation detects breaking changes (3 checks: parameter removal, status code removal, field removal), blocks merge without approval, auto-comments on PR"
AEG-X-008,S0,Cross,OpenAPI artifact 고도화,IN_PROGRESS,TBD,"docs/CURRENT/AEG-X-008_OPENAPI_ARTIFACT_DECISION_REQUIRED.md; docs/DECISIONS/ADR-API-BASELINE-001.md; docs/api/openapi.json; src/KArtSell.Host/artifacts/openapi/current_20260813_auto-off.json; evidence/AEG-X-008/openapi-generation_20260813_auto-off.log; evidence/AEG-X-008/backend-regression_20260813.log; evidence/AEG-X-008/openapi-gate-local_20260813.log; .gitea/workflows/openapi-gate.yml",BE/FE Architect,"Approved current Host baseline is preserved. Actual evidence: Architecture tests 17/17 PASS; Host Release build PASS with 0 warnings/errors; FE full regression 57 files/150 tests, typecheck and build PASS; local gate rehearsal YAML/baseline/candidate validation PASS with 0 breaking changes. Existing >500 kB Vite chunk warning remains. Gitea Actions execution/API Architect release sign-off remain outstanding; no completion claim."
AEG-VS-00-01,S0,VS-00,정책·범위·실패상태 계약 확정,COMPLETED,2026-08-06,"docs/CURRENT/SLICE_SPECS/VS-00-SLICE_SPEC.md + commit e7913db",PM/Architect,"✅ SLICE_SPEC produced: VS-00-SLICE_SPEC.md (state transitions, RBAC, governance gates, DQ rules, compliance). Commit e7913db. 249/253 tests PASS."
AEG-VS-00-02,S0,VS-00,데이터 시점·스키마·정합성 계약,COMPLETED,2026-08-06,"contracts/data/platform-data-contract.v1.json + commit e7913db",Data Architect/DBA,"✅ DATA_CONTRACT v1.0 produced: PIT envelope (published_at/correlation_id/revision), 5 table schemas, DQ rules/lineage, GDPR/PCI-DSS compliance. JSON schema + validation. 249/253 tests PASS."
AEG-VS-00-03,S0,VS-00,도메인 불변조건·상태전이 구현,COMPLETED,2026-08-06,"tests/KArtSell.ModelOperations.UnitTests/PolicyTests.cs (13 tests) + commit e7913db",BE/Quant Lead,"✅ Pure policy tests VERIFIED: SellPriority sort (3), Bounds validation (3), ModelStateTransition (3), Monotonicity (4). All 13 tests PASS. No infrastructure dependency. 249/253 total."
AEG-VS-00-04,S0,VS-00,Vertical Slice API/Application/SQL 구현,COMPLETED,2026-08-04,src/KArtSell.Host/Features/ShadowRuns + commit f573a1e + Job 976,BE Lead,"WBS Acceptance_Evidence verified: '인증·권한·멱등·트랜잭션·ProblemDetails·낙관적 동시성·correlation이 수용기준과 일치' ✅ (Auth: X-KArtSell-User header; Idempotency: Job 976 replay-safe; Correlation: Job ID tracked; Transaction: OutboxPollerJob; Tests: 176/176 PASS)"
AEG-VS-00-05,S0,VS-00,Event/Job/Inbox·재처리 구현,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-VS-00-05_ACCEPTANCE_EVIDENCE.md + src/KArtSell.Host/Jobs/OutboxPollerJob.cs + DownstreamConsumerJob.cs",BE/SRE,"✅ Async event pipeline complete: OutboxPollerJob (poll unprocessed), DownstreamConsumerJob (dispatch), 5 consumers (SignalR/Approval/Audit), Hangfire 8 workers, correlation tracking. Acceptance_Evidence: Idempotency verified, Job 976 replay-safe, 177/177 tests PASS."
AEG-VS-00-05,S0,VS-00,Event/Job/Inbox·재처리 구현,IN_PROGRESS,TBD,"docs/CURRENT/AEG-VS-00-05_JOBRUN_SCHEMA_DECISION_REQUIRED.md; docs/CURRENT/ARTIFACTS/AEG-VS-00-05_ACCEPTANCE_EVIDENCE.md; db/migrations/0000_building_blocks.sql; src/KArtSell.BuildingBlocks/Reliability/DapperJobRunRepository.cs; tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs; src/KArtSell.Host/Jobs/OutboxPollerJob.cs; src/KArtSell.Host/Jobs/DownstreamConsumerJob.cs",BE/SRE,"Source correction: db/migrations/0000_building_blocks.sql creates building_blocks.job_run and DbMigrator includes db/migrations/**/*.sql. Static repository-to-baseline column check 16/16 passed; fresh/upgrade/re-run/failure rehearsal evidence plus approved retention/index/operational contract remain missing. No completion claim."
AEG-VS-00-06,S0,VS-00,Vue feature·Zod·Query·컴포넌트 구현,COMPLETED,2026-08-04,"docs/CURRENT/ARTIFACTS/AEG-VS-00-06_ACCEPTANCE_EVIDENCE.md + frontend/src/features/shadow-run/",FE Lead,"✅ Vue 3 feature module complete: ShadowRunPage + ShadowRunForm + Results + Chart, Pinia store, TanStack Query, Zod validation, vee-validate, 40/40 component tests PASS. Acceptance_Evidence: All criteria verified (accessibility, responsive, state ownership, error handling)."
AEG-VS-00-07,S0,VS-00,회귀·관제·Runbook·Rollback 증거,COMPLETED,2026-08-04,docs/operational-runbook.md + PRODUCTION_READINESS.md + scripts/*.ps1 + commit ca2aeae,QA/SRE,"Golden/integration/failure/replay/E2E + metric/alert/Owner/Secondary/rollback rehearsal complete (Acceptance_Evidence: '회귀·관제·Runbook·Rollback 증거') - 7 scenarios, 4 scripts, 18 queries verified"
AEG-X-009,S1,Cross,Source catalog 고도화,COMPLETED,2026-08-07,"docs/CURRENT/CATALOGS/source-catalog.md; docs/CURRENT/AEG-X-009_AUTOMATION_PROPOSAL.md; contracts/data/source-approval.v1.proposed.json; docs/DECISIONS/ADR-DATA-001.md; db/migrations/0033_source_approval_contract.sql; db/migrations/0034_dataset_manifest_freeze_contract.sql; db/migrations/0033_market_data_import_logs.sql; src/KArtSell.Modules.ModelOperations/Infrastructure/DapperApprovedModelContextReader.cs",Data Governance,"✅ Workstream D/E/F COMPLETED: source-catalog.md v2.0 (KRX/OpenDart/KIS consolidated), VS-02_DATA_GOVERNANCE_POLICY.md, VS-03/04 SLICE_SPECs. All 4 unknowns resolved. ✅ Workstream G (commit 136665c, 2026-08-07) also now COMPLETE: live KRX OpenAPI / OpenDart / KIS service integrations (P1-P3), daily scheduling + error classification + SLA tracking + LKG fallback (P4-P6), market_data schema with append-only import logs, correlation_id-based idempotent replay. ⚠️ Note: 0033 is used by two different, unrelated migrations across branches (source_approval_contract.sql vs market_data_import_logs.sql) — confirm actual applied migration number in the target DB's kartsell_schema_versions journal before assuming both landed as authored."
@@ -43,12 +43,38 @@ AEG-X-011,S4,Cross,Golden vector 고도화,BLOCKED,TBD,"AGENTS.md: Algorithm cha
AEG-VS-09-01,S4,VS-09,BuildEvidenceSnapshot,BLOCKED,TBD,"CLAUDE.md: Evidence requires Phase 1 results",PM/Architect,"Gate 2 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice."
AEG-VS-10-01,S4,VS-10,매도 결정 엔진 구현 (GenerateSellDecision),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-10-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/SellDecision/ (SellDecisionEndpoints.cs, SellDecisionHandler.cs, SellDecisionSql.cs, SellPriorityRanker.cs); frontend/src/features/sell-decision/; tests/KArtSell.Integration.Tests/SellDecision/SellDecisionTests.cs; commit b1e38ac (Phase 3 J, PR #28, merged to main)",BE Lead/Quant Lead,"✅ Implementation complete (code + BE + FE + tests), matches WBS_MASTER's VS-10='GenerateSellDecision' definition (no ID collision here). Sell priority ranking (HARD_IMPAIRMENT→...→REENTRY_OPTION) with age/liquidity score boosts per VS-10-SLICE_SPEC.md. 32/32 tests PASS run in isolation (2026-08-07); one test (CalculateScore_HardImpairment_ReturnsLowestScore) had a wrong input value that happened to not exercise the >365-day age-boost branch the spec defines — fixed as a test bug, not a product bug (see fix/dapper-underscore-mapping-and-build branch). ⚠️ NOT validated: this row was previously (incorrectly) marked BLOCKED with reasoning 'Model must pass PBO/DSR validation' — that Gate-3/production-readiness validation genuinely still requires real Phase 1 shadow-run data and has not happened. Distinguish 'code implemented and unit/integration-tested' (done) from 'PBO/DSR-validated against real market data' (not done, blocked on Phase 1)."
AEG-VS-19-01,S5,VS-19,RunFrozenBacktest,BLOCKED,TBD,"CLAUDE.md: Requires evidence from Phase 1-4",PM/Architect,"Gate 3 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice."
AEG-VS-28-01,S2,VS-28,"거래 실행 시스템 구현 (Trade Execution, KIS Integration)",COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-28-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/TradeExecution/ (TradeEndpoints.cs, TradeHandlers.cs, TradeSql.cs, Trade.cs, KisTradeExecutionService.cs); db/migrations/0039_trades.sql; tests/KArtSell.Integration.Tests/TradeExecution/TradeExecutionTests.cs; commit b1e38ac (Phase 3 K, PR #28, merged to main)",BE Lead/Trading Ops,"New row — no prior tracker entry existed for this slice. ✅ Backend implementation + tests complete: Trade state machine (Pending→Submitted→Accepted→PartiallyFilled/FullyFilled→Confirmed→Reconciled), KIS order submission/poll/settlement. 13/13 tests PASS run in isolation (2026-08-07), but only after two real bugs were fixed on fix/dapper-underscore-mapping-and-build: (1) UpdateTradeStatusAsync only ever persisted status/kis_response/error_message and silently dropped kis_order_id, executed_quantity, unit_price, commission, net_proceeds and both timestamps on every single call since the slice merged — trade fills and settlements were not actually being recorded; (2) the same Dapper snake_case-mapping race condition described in AEG-VS-27-01's notes. ⚠️ Frontend UI built 2026-08-09 (frontend/src/features/trade-execution/, route /ops/trade-execution, pnpm typecheck/build clean, 13 new tests passing) after an earlier attempt failed on the session spend limit and was resumed — on isolated worktree branch worktree-agent-aae90f132a2daf359 (HEAD predates the VS-12→VS-28 renumbering, so that worktree's own tracker row is still AEG-VS-12-01), not yet merged into this branch. Found DEBT-025 there too: TradeEndpoints.cs is AllowAnonymous() with no Roles()/Policies() at all (unlike SellDecisionEndpoints.cs); collides with two other independently-numbered DEBT-025 entries on other unmerged branches — renumber on merge. Renumbered from VS-12 to VS-28 on 2026-08-08 per docs/DECISIONS/ADR-WBS-001-slice-renumbering.md — VS-12 in WBS_MASTER.csv ('RankBuyCandidates') was an unrelated, still-unimplemented slice and keeps its original number unchanged. 2026-08-08 (BE priority pass): DEBT-018 (outbox write not co-transactional with the trade status update) fixed — see TECH_DEBT_REGISTER.md; `dotnet build -c Release` clean, DB-backed tests still unverified (no reachable Postgres this session). 2026-08-09: DEBT-027 fixed — PollTradeStatusHandler/ConfirmSettlementHandler were registered in DI but never invoked by anything (no endpoint, no job); added src/KArtSell.Host/Jobs/TradeStatusPollingJob.cs as a Hangfire recurring job so submitted trades actually progress to Confirmed. `dotnet build -c Release` clean; no dedicated test added (see TECH_DEBT_REGISTER.md for why) and not run against a live database/KIS."
AEG-VS-29-01,S2,VS-29,포트폴리오 대사 구현 (Portfolio Reconciliation),COMPLETED,2026-08-07,"docs/CURRENT/SLICE_SPECS/VS-29-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/ (Endpoints.cs, ReconcileTradeHandler.cs, ReconciliationEngine.cs, ReconciliationSql.cs, MismatchDetector.cs, CostBasisCalculator.cs); tests/KArtSell.Integration.Tests/PortfolioReconciliation/ReconciliationEngineTests.cs; tests/KArtSell.ModelOperations.UnitTests/EvaluationReconciliationPlannerTests.cs; commit b1e38ac (Phase 3 L, PR #28, merged to main); commit 4059828 (fix: missing model_operations.models table breaking every fresh DB, PR #29, merged to main same day)",BE Lead,"New row — no prior tracker entry existed for this slice. ✅ Backend implementation + tests complete: Sell Decision → Trade → Holdings reconciliation, cost-basis calculation, mismatch detection. 18/18 tests PASS run in isolation (2026-08-07). Note this slice's own merge (PR #28) shipped with a missing model_operations.models table that broke every fresh-database migration; that was caught and fixed same day in PR #29 — a reminder that this branch's fresh-install DbUp path had not actually been rehearsed before merge. ⚠️ No frontend UI yet — an attempt was started 2026-08-08 but the background agent building it failed (hit the session's monthly spend limit) before producing any committed code; not resumed this session. Renumbered from VS-14 to VS-29 on 2026-08-08 per docs/DECISIONS/ADR-WBS-001-slice-renumbering.md — VS-14 in WBS_MASTER.csv ('GenerateDailyRecommendations') was an unrelated, still-unimplemented slice and keeps its original number unchanged. 2026-08-08 (BE priority pass): DEBT-018 (outbox writes for TradeReconciled/ReconciliationMismatchAlert not co-transactional with the holding/log write) fixed — see TECH_DEBT_REGISTER.md; `dotnet build -c Release` clean, DB-backed tests still unverified (no reachable Postgres this session)."
AEG-VS-28-01,S2,VS-28,"거래 실행 시스템 구현 (Trade Execution, KIS Integration)",IN_PROGRESS,TBD,"docs/CURRENT/SLICE_SPECS/VS-28-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/TradeExecution/ (TradeEndpoints.cs, TradeHandlers.cs, TradeSql.cs, Trade.cs, KisTradeExecutionService.cs); db/migrations/0039_trades.sql; tests/KArtSell.Integration.Tests/TradeExecution/TradeExecutionTests.cs; commit b1e38ac (Phase 3 K, PR #28, merged to main)",BE Lead/Trading Ops,"New row — no prior tracker entry existed for this slice. ✅ Backend implementation + tests complete: Trade state machine (Pending→Submitted→Accepted→PartiallyFilled/FullyFilled→Confirmed→Reconciled), KIS order submission/poll/settlement. 13/13 tests PASS run in isolation (2026-08-07), but only after two real bugs were fixed on fix/dapper-underscore-mapping-and-build: (1) UpdateTradeStatusAsync only ever persisted status/kis_response/error_message and silently dropped kis_order_id, executed_quantity, unit_price, commission, net_proceeds and both timestamps on every single call since the slice merged — trade fills and settlements were not actually being recorded; (2) the same Dapper snake_case-mapping race condition described in AEG-VS-27-01's notes. ⚠️ Frontend UI built 2026-08-09 (frontend/src/features/trade-execution/, route /ops/trade-execution, pnpm typecheck/build clean, 13 new tests passing) after an earlier attempt failed on the session spend limit and was resumed — on isolated worktree branch worktree-agent-aae90f132a2daf359 (HEAD predates the VS-12→VS-28 renumbering, so that worktree's own tracker row is still AEG-VS-12-01), not yet merged into this branch. Found DEBT-025 there too: TradeEndpoints.cs is AllowAnonymous() with no Roles()/Policies() at all (unlike SellDecisionEndpoints.cs); collides with two other independently-numbered DEBT-025 entries on other unmerged branches — renumber on merge. Renumbered from VS-12 to VS-28 on 2026-08-08 per docs/DECISIONS/ADR-WBS-001-slice-renumbering.md — VS-12 in WBS_MASTER.csv ('RankBuyCandidates') was an unrelated, still-unimplemented slice and keeps its original number unchanged. 2026-08-08 (BE priority pass): DEBT-018 (outbox write not co-transactional with the trade status update) fixed — see TECH_DEBT_REGISTER.md; `dotnet build -c Release` clean, DB-backed tests still unverified (no reachable Postgres this session). 2026-08-09: DEBT-027 fixed — PollTradeStatusHandler/ConfirmSettlementHandler were registered in DI but never invoked by anything (no endpoint, no job); added src/KArtSell.Host/Jobs/TradeStatusPollingJob.cs as a Hangfire recurring job so submitted trades actually progress to Confirmed. `dotnet build -c Release` clean; no dedicated test added (see TECH_DEBT_REGISTER.md for why) and not run against a live database/KIS."
AEG-VS-29-01,S2,VS-29,포트폴리오 대사 구현 (Portfolio Reconciliation),IN_PROGRESS,TBD,"docs/CURRENT/AEG-VS-29_RECONCILIATION_REPLAY_SAFETY_SLICE_NOTE.md; docs/CURRENT/SLICE_SPECS/VS-29-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/ (Endpoints.cs, ReconcileTradeHandler.cs, ReconciliationEngine.cs, ReconciliationSql.cs, MismatchDetector.cs, CostBasisCalculator.cs); tests/KArtSell.Integration.Tests/PortfolioReconciliation/ReconciliationEngineTests.cs; tests/KArtSell.ModelOperations.UnitTests/ReconciliationRequestValidatorTests.cs",BE Lead,"Reclassified from COMPLETED: replay boundary now rejects missing idempotency keys and preserves supplied keys (2 unit tests pass). Full WBS acceptance remains unproven because approved authorization, durable request/result deduplication, DB-backed replay, fresh/upgrade/re-run/failure migration rehearsal, and frontend UI evidence are missing. Historical 18/18 isolated tests and prior build claims remain historical only."
PHASE-1-SHADOW-RUN,S0-S5,Cross,252+ Trading Day Shadow Run,BLOCKED,TBD,"docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md; docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/PHASE-1_REQUEUE_READINESS.md; docs/CURRENT/PHASE-1_EXECUTION_EVIDENCE_PLAN.md; docs/CURRENT/PHASE-1_PREFLIGHT_20260806.md; docs/CURRENT/PHASE-1_PRODUCTION_PREFLIGHT_20260806.md; evidence/AEG-X-004/production-readonly-preflight-20260806.md; db/migrations/0032_shadow_run_queued_status_contract.sql; logs/phase-1-execution.log; logs/host-startup-20260804-173000.log",김재현/BE/SRE,"Read-only preflight: active DbUp journal public.kartsell_schema_versions contains 0032 and check_status includes Queued. Capabilities remain order/KIS/client publication OFF. Server-side dataset_manifest, model_version_registry, evidence_snapshot, and release_evidence_bundle contain no approved/frozen rows; no RunId/JobId/enqueue created. Blocked pending approved server-side VersionSet. Re-confirmed 2026-08-07: still no RunId/JobId exists anywhere in this workspace or its evidence trail; nothing changed on this row this session. Any future document that claims this row is RUNNING must cite a real RunId/JobId — do not restate the earlier (already-corrected) false claim."
V13-FE-001,S0,Cross,UI Vendor import boundary,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-001_KBX_V36_DESIGN_HARNESS_PROPOSAL.md; tools/validate_v16.py",FE Architect/QA,"Dependency AEG-X-003 is COMPLETED. KBX v36 was translated as a non-vendor design-evidence harness: preserve the shared UI adapter boundary, keep feature direct PrimeVue/AG Grid imports at zero, and defer token/recipe implementation to separately approved slices. Actual evidence: python tools/validate_v16.py exited 0 with PASS=1 WARN=2 FAIL=0 on 2026-08-09. Warnings are retained (no full source archive; approved runtime evidence absent); no runtime test/build/migration claim is made."
V13-FE-001,S0,Cross,UI Vendor import boundary,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-001_KBX_V36_DESIGN_HARNESS_PROPOSAL.md; tools/validate_v16.py; frontend/src/shared/ui/adapter/tests/vendorBoundary.spec.ts",FE Architect/QA,"Dependency AEG-X-003 is COMPLETED. KBX v36 was translated as a non-vendor design-evidence harness: preserve the shared UI adapter boundary, keep feature direct PrimeVue/AG Grid imports at zero, and defer token/recipe implementation to separately approved slices. Actual evidence: python tools/validate_v16.py exited 0 with PASS=1 WARN=2 FAIL=0 on 2026-08-09; vendor boundary Vitest 1/1 and frontend typecheck passed on 2026-08-12; full FE regression after the guard: 53 files / 135 tests passed. Warnings are retained (no full source archive; approved runtime evidence absent); no runtime test/build/migration claim is made."
V13-FE-003,S0,Cross,UiAdapter Port 정의,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-003_UI_ADAPTER_PORT_RECONCILIATION.md; frontend/src/shared/ui/adapter/contracts.ts; frontend/src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts",FE Architect/QA,"Dependency V13-FE-001 is COMPLETED. Existing adapter v4 contract explicitly verifies 14 capabilities (stronger than the WBS minimum wording of 8) without feature vendor imports. Actual targeted Vitest evidence: 2 files / 4 tests passed, exit 0, 2026-08-09. KBX-derived components remain provider-neutral reimplementations only; no KBX package, contract, router, store, or permission host was imported."
V13-FE-004,S0,Cross,PrimeVue/AG Grid Adapter 구현,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-004_ADAPTER_IMPLEMENTATION_RECONCILIATION.md; frontend/src/shared/ui/adapter/primevue; frontend/src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts",FE Architect/QA,"Dependency V13-FE-003 is COMPLETED. PrimeVue/AG Grid remain confined behind adapter v4. Actual targeted Vitest evidence: 2 files / 4 tests passed, exit 0, 2026-08-09. This is contract/accessibility-attribute evidence only; no visual/AT/runtime claim is made."
V13-FE-005,S0,Cross,Ks* vendor-neutral components,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-005_KBX_FORM_COMPONENT_ADOPTION.md; frontend/src/shared/ui/components/KsFormGrid.vue; frontend/src/shared/ui/components/KsFormSection.vue; frontend/src/shared/ui/components/KsFormSpan.vue; frontend/src/shared/ui/components/KsValidationSummary.vue; frontend/src/shared/ui/components/tests/KsFormLayouts.spec.ts",FE Architect/QA,"Dependency V13-FE-004 is COMPLETED. Reimplemented only KBX presentation-only form components against existing K-ArtSell tokens; no KBX package, contracts, provider dependency, routing, permissions, or business policy imported. Actual evidence: targeted Vitest 2 files / 6 tests passed and pnpm typecheck exit 0 on 2026-08-09. Visual/AT/performance baseline remains outside this Slice."
V13-FE-006,S0,Cross,AppShell/Page layouts,COMPLETED,2026-08-09,"docs/CURRENT/V13-FE-006_LAYOUT_CONTRACT_RECONCILIATION.md; frontend/src/shared/ui/layouts/tests/layout.contract.spec.ts; frontend/src/shared/ui/layouts/AppShellLayout.vue; frontend/src/shared/ui/layouts/PageLayout.vue",UX/FE/QA/Security,"Dependency V13-FE-005 is COMPLETED. Preserved the existing slot-based layout rather than importing KBX's coupled workspace shell. Actual DOM contract evidence: 1 file / 2 tests passed, exit 0, 2026-08-09; verifies skip navigation, structural landmarks, default automation OFF boundary, and evidence/aside/footer separation. No visual/AT/E2E claim is made."
V13-FE-011,S6,Cross,T01 검색목록 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-011_T01_SEARCH_LIST_LAYOUT_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/SearchListCrudPage.vue; frontend/src/shared/ui/screen-types/tests/SearchListCrudPage.spec.ts; frontend/src/shared/shell/tests/navigationCatalog.spec.ts; evidence/V13-FE-011/t01-search-list-layout_20260809.log",UX/FE,"2026-08-09: Scope limited to adapter-neutral T01 composition: list body plus optional detail region through CrudWorkspaceLayout and read-only component catalogue visibility in the Design System menu; WBS workspace remains hidden. Actual execution evidence: targeted Vitest 2 files / 3 tests passed; pnpm typecheck passed. Dependency V13-FE-006 is completed. MVP-A Gate passage, visual/assistive-technology approval, and Playwright evidence are not claimed."
V13-FE-005,S0,Cross,Ks* vendor-neutral components,IN_PROGRESS, TBD,"docs/CURRENT/V13-FE-005_KBX_FORM_COMPONENT_ADOPTION.md; docs/CURRENT/V13-FE-005_MODELS_LIST_VENDOR_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-005_SHADOW_RUN_VENDOR_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-005_COMPONENT_TEMPLATE_TEST_HARDENING_SLICE_NOTE.md; frontend/src/shared/ui/components/KsFormGrid.vue; frontend/src/shared/ui/components/KsFormSection.vue; frontend/src/shared/ui/components/KsFormSpan.vue; frontend/src/shared/ui/components/KsValidationSummary.vue; frontend/src/shared/ui/components/tests/KsCoreControls.contract.spec.ts; frontend/src/features/models/pages/ModelsList.vue; frontend/src/features/shadow-run/pages/ShadowRunList.vue; evidence/V13-FE-005/component-template-tests_20260813.log",FE Architect/QA,"Added contract tests for KsButton/KsTextField adapter-neutral behavior, accessibility wiring, loading/disabled semantics, and model events. Actual evidence: targeted 1 file/3 tests PASS, full frontend regression 59 files/156 tests PASS, typecheck PASS, build PASS. Known >500 kB build warning remains; visual/AT/browser/performance evidence remain outstanding. No completion claim."
V13-FE-006,S0,Cross,AppShell/Page layouts,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-006_LAYOUT_CONTRACT_RECONCILIATION.md; docs/CURRENT/V13-FE-006_NAVIGATION_CONTRACT_HARDENING_SLICE_NOTE.md; docs/CURRENT/V13-FE-006_NAVIGATION_PREFERENCE_SLICE_NOTE.md; frontend/src/shared/shell/KsSideNavigation.vue; frontend/src/shared/shell/KsAppShell.vue; frontend/src/shared/shell/navigationCatalog.ts; frontend/src/shared/shell/screenPreferenceStore.ts; frontend/src/shared/shell/tests/KsSideNavigation.contract.spec.ts; frontend/src/shared/shell/tests/navigationCatalog.spec.ts; frontend/src/shared/ui/layouts/tests/layout.contract.spec.ts; evidence/V13-FE-006/navigation-contract_20260813.log; evidence/V13-FE-006/navigation-preference_20260813.log; evidence/V13-FE-006/navigation-browser-contract_20260813.log",UX/FE/QA/Security,"Navigation supports nested-route active semantics, browser-scoped module collapse preference, accessible breadcrumb, and list-only top-level catalog entries. Parameterized detail routes are excluded from navigation while remaining routable. Actual evidence: navigation catalog 1 file/4 tests PASS, typecheck PASS, build PASS, Playwright browser snapshot captured. Known >500 kB warning and an initial console error remain; auth integration, mobile, visual/AT and production evidence remain outstanding. No completion claim."
V13-FE-011,S6,Cross,T01 검색목록 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-011_T01_SEARCH_LIST_LAYOUT_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/SearchListCrudPage.vue; frontend/src/shared/ui/screen-types/tests/SearchListCrudPage.spec.ts; frontend/src/shared/shell/tests/navigationCatalog.spec.ts; evidence/V13-FE-011/t01-search-list-layout_20260809.log",UX/FE,"Scope remains adapter-neutral T01 composition: list body plus optional detail region, evidence metadata, forbidden content suppression, and retry forwarding. Actual targeted evidence: 1 file / 4 tests passed; pnpm typecheck passed. Dependency V13-FE-006 is completed. MVP-A Gate passage, visual/assistive-technology approval, and Playwright evidence are not claimed."
V13-FE-012,S8,Cross,T02 상세조회 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-012_T02_DETAIL_READ_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/DetailReadPage.vue; frontend/src/shared/ui/screen-types/tests/DetailReadPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. As-of/version metadata, evidence slot, forbidden suppression, and retry forwarding are characterized. Actual evidence: 1 file / 2 tests and typecheck passed. Production API wiring, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-013,S6,Cross,T03 등록편집 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-013_T03_EDIT_FORM_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/EditFormPage.vue; frontend/src/shared/ui/screen-types/tests/EditFormPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added dirty/readonly state priority and characterized submit/retry boundaries. Actual evidence: 1 file / 2 tests and typecheck passed. Mutation contract, If-Match/idempotency, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-014,S7,Cross,T04 MasterDetail 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-014_T04_MASTER_DETAIL_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/MasterDetailCrudPage.vue; frontend/src/shared/ui/screen-types/tests/MasterDetailCrudPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added version metadata propagation and unauthorized/forbidden detail suppression; actual evidence: 1 file / 2 tests and typecheck passed. Route selection, conflict policy, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-015,S7,Cross,T05 검토승인 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-015_T05_APPROVAL_WORKBENCH_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ApprovalWorkbenchPage.vue; frontend/src/shared/ui/screen-types/tests/ApprovalWorkbenchPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized queue/detail/decision slots plus conflict suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. Maker-checker runtime, evidence hash, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-016,S6,Cross,T06 Wizard 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-016_T06_WIZARD_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/StepWizardPage.vue; frontend/src/shared/ui/screen-types/tests/StepWizardPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added version metadata and blocked default actions for unsafe states; actual evidence: 1 file / 2 tests and typecheck passed. Resume/branch/validation, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-017,S11,Cross,T07 Dashboard 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-017_T07_SCORECARD_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ScorecardDashboardPage.vue; frontend/src/shared/ui/screen-types/tests/ScorecardDashboardPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized partial dashboard slots plus forbidden suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. Metric approval, visual/AT, browser E2E, and G4-A evidence remain outstanding."
V13-FE-018,S8,Cross,T08 Batch운영 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-018_T08_BATCH_OPERATIONS_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/BatchOperationsPageV2.vue; frontend/src/shared/ui/screen-types/tests/BatchOperationsPageV2.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized run summary/timeline/records/reprocess/runbook slots plus blocked-state suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. JobRun/Watermark/idempotency API contract, visual/AT, browser E2E, and approval evidence remain outstanding."
V13-FE-019,S8,Cross,T09 대사예외 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-019_T09_RECONCILIATION_EXCEPTION_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ReconciliationExceptionPage.vue; frontend/src/shared/ui/screen-types/tests/ReconciliationExceptionPage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added evidence version metadata and characterized break/before-after/correction/audit slots plus forbidden suppression/retry. Actual evidence: 1 file / 2 tests. Permission mapping, correction maker-checker/API contract, visual/AT, browser E2E, and G3 approval remain outstanding."
V13-FE-028,S8,Cross,대사·정정 화면 적용,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-028_RECONCILIATION_API_CONTRACT_SLICE_NOTE.md; frontend/src/features/reconciliation/schema.ts; frontend/src/features/reconciliation/api.ts; frontend/src/features/reconciliation/queries.ts; frontend/src/features/reconciliation/tests/schema.spec.ts; frontend/src/features/reconciliation/tests/queries.spec.ts",FE/Ops,"Dependency V13-FE-019 is IN_PROGRESS. Added runtime-validated read adapters and TanStack Query keys/hooks for the two existing reconciliation GET endpoints (2 files / 5 tests). Route/mutation wiring is intentionally withheld pending approved permissions, pagination/version contract, maker-checker correction API, and G3 evidence."
V13-FE-020,S11,Cross,T10 버전거버넌스 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-020_T10_VERSION_GOVERNANCE_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/VersionGovernancePage.vue; frontend/src/shared/ui/screen-types/tests/VersionGovernancePage.spec.ts",UX/FE/QA/Domain Owner,"Dependency V13-FE-006 is COMPLETED. Added blocked-state suppression and characterized version comparison/evidence/approval/rollback slots (1 file / 2 tests). Automatic promotion/rollback remains disabled; model API, gate-pack, permission, visual/AT/Playwright, and G4-A evidence remain outstanding."
V13-FE-034,S7,Cross,Idempotency retry contract,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-034_IDEMPOTENCY_RETRY_CONTRACT_SLICE_NOTE.md; frontend/src/shared/commands/idempotency.ts; frontend/src/shared/crud/useOptimisticCommand.ts; frontend/src/shared/crud/tests/useOptimisticCommand.spec.ts",FE/BE/QA,"Existing client command boundary is now WBS-tracked: one immutable key per intent, same key on retry, If-Match forwarding, 409/412 conflict handling, and pending guard. Actual evidence is 1 file / 2 tests plus full FE regression. Server deduplication, replay equivalence, retention, and endpoint integration remain outstanding."
V13-FE-036,S8,Cross,T12 작업 큐 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-036_T12_WORK_QUEUE_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/WorkQueuePage.vue; frontend/src/shared/ui/screen-types/screenRecipe.ts; frontend/src/shared/ui/screen-types/tests/workQueueRecipe.spec.ts; frontend/src/shared/ui/screen-types/tests/WorkQueuePage.spec.ts",UX/FE/QA/Domain Owner,"Added version metadata and adopted KBX T12 queue recovery/security policy metadata without inventing queue APIs or commands. Actual evidence: 2 test files / 3 tests PASS and pnpm typecheck PASS. Queue-depth source, exception definition, JobRun API, visual/AT/Playwright, and operational approval remain outstanding."
V13-FE-037,S7,Cross,T11 대량 입력 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-037_T11_FAST_ENTRY_GRID_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/FastEntryGridPage.vue; frontend/src/shared/ui/screen-types/tests/FastEntryGridPage.spec.ts",UX/FE/QA/Domain Owner,"Added blocked-state suppression and characterized grid/validation summary slots with version metadata (1 file / 2 tests). Cell validation, paste audit, idempotency API, partial-result semantics, visual/AT/Playwright, and approval remain outstanding."
V13-FE-021,S6,Cross,Vee-validate/Zod standard form,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-021_FORM_CONTRACT_AUDIT_NOTE.md; frontend/src/shared/crud/StandardCrudFormPage.vue; frontend/src/shared/ui/screen-types/v2/EditFormPage.vue; frontend/src/shared/crud/formValidation.ts; frontend/src/shared/crud/tests/formValidation.spec.ts; frontend/src/shared/ui/screen-types/tests/EditFormPage.spec.ts; frontend/src/shared/crud/useOptimisticCommand.ts",FE Lead,"Added feature submit-boundary Zod validation and ProblemDetails field-error mapping with stable summary/field/form errors (1 file / 4 tests), while keeping generic shell presentation-only. Duplicate command server contract and form-specific integration evidence remain outstanding."
V13-FE-022,S6,Cross,Filter/page/tab URL state,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-022_URL_QUERY_CODEC_SLICE_NOTE.md; frontend/src/shared/crud/queryCodec.ts; frontend/src/shared/crud/tests/queryCodec.spec.ts",FE Lead/QA,"Dependency V13-FE-011 remains IN_PROGRESS. Optional sort/filter/operator allowlists now fail closed when supplied; existing callers retain behavior until a resource contract supplies an approved allowlist. Actual evidence: 1 file / 3 tests and typecheck passed. Router wiring and browser deep-link evidence remain outstanding."
V13-FE-023,S6,Cross,AG Grid server-side contract,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-023_SERVER_GRID_CONTRACT_SLICE_NOTE.md; frontend/src/shared/ui/DataGridShell.vue; frontend/src/shared/ui/tests/DataGridShell.spec.ts",FE Lead/BE/QA,"Dependency V13-FE-004 is COMPLETED. Optional server page metadata and shared paginator event boundary added without client-side data ownership. Actual evidence: 1 file / 2 tests and typecheck passed. Sort/filter mapping, column-state persistence, API integration, visual/AT, and browser evidence remain outstanding."
V13-FE-035,S8,Cross,Data freshness/version standard,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-035_FRESHNESS_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-035_KBX_FRESHNESS_INDICATOR_ADOPTION_SLICE_NOTE.md; frontend/src/shared/status/DataFreshnessBadge.vue; frontend/src/shared/status/tests/DataFreshnessBadge.spec.ts",FE/Data/QA,"KBX freshness indicator principles adopted: explicit clock, optional source/revision, stale label, and opt-in refresh command. Actual evidence: targeted Vitest 1 file/3 tests PASS and pnpm typecheck PASS. Production published_at/revision wiring, approved freshness windows, visual, browser, and PIT evidence remain outstanding."
V13-FE-009,S0,Cross,OpenAPI-Zod 생성 전략 ADR,COMPLETED,2026-08-12,"docs/DECISIONS/ADR-FE-CONTRACT-001.md; frontend/src/shared/api/client.ts; frontend/src/shared/api/problem.ts; frontend/src/shared/api/tests/problem.spec.ts; docs/CURRENT/ARTIFACTS/AEG-X-005_ENDPOINT_AUTHORITY_HARDENING_20260812.md",BE/FE Architect,"Dependency AEG-X-002 is COMPLETED. ADR fixes the current axios→feature API→Zod→TanStack Query boundary and fail-closed generated-client gate. Actual evidence: FE tests 34 files/75 tests, typecheck and host-triggered production build PASS on 2026-08-12. No generated client, OMS contract, or production OpenAPI claim is made."
V13-FE-010,S0,Cross,PrimeVue unstyled/bootstrap 연결,COMPLETED,2026-08-12,"docs/CURRENT/V13-FE-010_UI_BOOTSTRAP_SLICE_NOTE.md; frontend/src/main.ts; frontend/src/shared/ui/provider/resolveUiProvider.ts; frontend/src/shared/ui/provider/tests/resolveUiProvider.spec.ts",FE Lead/QA,"Dependency V13-FE-004 is COMPLETED. Existing provider port is preserved; unsupported adapter values fail before mount and the validated native adapter is installed before mount. Actual evidence: targeted 1 file/3 tests and full FE regression 34 files/76 tests plus typecheck passed. Browser E2E, visual, AT, and deployment evidence are not claimed."
V13-FE-007,S0,Cross,11-state Matrix component,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-007_CANONICAL_STATE_PANEL_SLICE_NOTE.md; docs/CURRENT/V13-FE-007_KBX_STATUS_TAG_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/feedback/StandardStatePanel.vue; frontend/src/shared/ui/components/KsStatusTag.vue; frontend/src/shared/ui/components/tests/KsStatusTag.spec.ts",UX/FE/QA,"StandardStatePanel contract remains implemented; KBX status-tag adoption adds semantic/unknown metadata and non-colour cues. Actual evidence: prior 15 tests plus targeted KsStatusTag 1/1 and typecheck PASS. Visual, AT, forced-colors, browser E2E, and production evidence remain outstanding; no completion claim."
V13-FE-008,S0,Cross,금융 formatter 중앙화,COMPLETED,2026-08-12,"docs/CURRENT/V13-FE-008_FINANCIAL_FORMATTER_SLICE_NOTE.md; frontend/src/shared/formatters/financial.ts; frontend/src/shared/formatters/tests/financial.spec.ts",FE Lead/Quant/QA,"Dependency V13-FE-002 is COMPLETED. Existing centralized formatter preserved and its explicit currency, decimal ratio, bounded quantity, KST as-of, missing/invalid input contracts are characterized. Actual evidence: 1 file / 5 tests and typecheck passed. Locale matrix, visual, and production evidence are not claimed."
V13-FE-024,S6,Cross,Permission/Capability Guard integration,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-024_PERMISSION_ROUTE_META_SLICE_NOTE.md; frontend/src/app/router.ts; frontend/src/shared/auth/routeAccess.ts; frontend/src/shared/auth/tests/routeAccess.spec.ts",FE/Security,"Dependency V13-FE-006 is COMPLETED. Evidence-backed model.read metadata and pure fail-closed policy added for ModelOps routes. Auth permission hydration, global navigation guard, complete route catalog, and unauthorized information exposure acceptance remain Decision Required."
V13-FE-033,S7,Cross,ProblemDetails mapping,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-033_KBX_PROBLEM_DETAILS_ADOPTION_SLICE_NOTE.md; docs/CURRENT/V13-FE-033_KBX_PROBLEM_DETAILS_BE_ADOPTION_SLICE_NOTE.md; frontend/src/shared/api/problem.ts; frontend/src/shared/api/tests/problem.spec.ts; src/KArtSell.Host/OpenApi/ProblemDetailsOperationFilter.cs",FE/BE/QA,"KBX v60 discriminator/recovery metadata adopted at FE Zod and BE OpenAPI documentation boundaries. Actual evidence: FE targeted Vitest 1 file/9 tests PASS, FE typecheck PASS, and dotnet build src/KArtSell.Host/KArtSell.Host.csproj -c Release --no-restore PASS (0 warnings/0 errors). BE payload parity, naming/redaction/retry approval, and browser state evidence remain Decision Required."
V13-FE-011,S6,Cross,T01 검색목록 화면 템플릿,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-011_KBX_T01_RECIPE_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/screenRecipe.ts; frontend/src/shared/ui/screen-types/v2/SearchListCrudPage.vue; frontend/src/shared/ui/screen-types/tests/screenRecipe.spec.ts",UX/FE/QA,"KBX v60 T01 recipe policies adopted as immutable metadata without copying OMS/API/vendor code. Actual evidence: targeted Vitest 2 files/5 tests PASS and pnpm typecheck PASS. Real API/bulk-selection/permission contract, visual/AT, and Playwright evidence remain Decision Required."
V13-FE-023,S6,Cross,AG Grid server-side contract,IN_PROGRESS,TBD,"docs/CURRENT/V13-FE-023_KBX_GRID_STATUS_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/gridColumnAdapter.ts; frontend/src/shared/ui/gridStatus.ts; frontend/src/shared/ui/adapter/contracts.ts; frontend/src/shared/ui/tests/gridColumnAdapter.spec.ts; frontend/src/shared/ui/tests/gridStatus.spec.ts; frontend/src/features/models/pages/ModelsList.vue; frontend/src/features/shadow-run/pages/ShadowRunList.vue; evidence/V13-FE-023/frontend-regression_20260813.log; evidence/V13-FE-023/models-grid-port_20260813.log; evidence/V13-FE-023/shadow-run-grid-port_20260813.log; evidence/V13-FE-038/bundle-baseline_20260813.log",FE Lead/BE/QA,"KBX registry columns are mapped through the provider-neutral UiGridColumn contract; ModelsList and ShadowRunList use KsDataGrid with explicit Model.modelId and ShadowRun.runId navigation. Actual evidence: targeted adapter tests PASS, full frontend regression 58 files/153 tests PASS, typecheck PASS, build PASS. Known >500 kB build warning remains; server query mapping, status-map approval, visual/AT/browser evidence remain Decision Required."
V13-FE-038,S11,Cross,대량 화면 성능 budget,IN_PROGRESS,TBD,"evidence/V13-FE-038/bundle-baseline_20260813.log; evidence/V13-FE-038/chunk-split-attempt_20260813.log; evidence/V13-FE-038/lazy-adapter_20260813.log; evidence/V13-FE-038/aggrid-module-scope_20260813.log; frontend/src/shared/ui/adapter/primevue/index.ts; frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue",FE/SRE/QA,"AG Grid adapter now registers only ClientSideRowModelModule instead of AllCommunityModule. Actual evidence: 63 files/168 tests PASS, typecheck PASS, build PASS; AgGridAdapter reduced 1,027,848 -> 588,718 bytes (gzip 285.75 -> 163.66 kB), but Vite >500 kB warning persists. Two manualChunks attempts produced no additional reduction and were reverted. No performance gate PASS or browser/network budget claim."
1 WBS_ID Sprint Slice_ID Task Status Completion_Date Evidence_Link Owner Notes
2 AEG-X-001 S0 Cross Version Coverage Matrix 고도화 COMPLETED IN_PROGRESS 2026-08-04 2026-08-12 docs/contracts/platform/VERSION_COVERAGE_MATRIX.md PM/Architect ✅ Version matrix: v10/v12/v12.1 compatibility (Retained/Improved/Superseded 100%), Supersession registry, Breaking change assessment, Migration roadmap Source inventory and evidence classification updated. Previous 100%/test claims were not backed by preserved cross-version execution artifacts; v10/v12/v12.1 coverage remains DECISION_REQUIRED pending PM/Architect scope approval and DevOps/QA runner evidence. No completion claim.
3 AEG-X-002 S0 Cross global.json 고도화 COMPLETED 2026-08-08 .gitea/workflows/ci.yml (dotnet/pnpm restore/build/test); docs/CURRENT/AEG-X-002_TYPECHECK_EMIT_REMEDIATION.md; docs/CURRENT/AEG-X-002_ROUTE_CODE_SPLITTING.md; evidence/AEG-X-002/frontend-build-noemit_20260808.log; evidence/AEG-X-002/frontend-regression-route-split_20260808.log; evidence/AEG-X-002/frontend-build-route-split_20260808.log; evidence/AEG-X-002/frontend-regression-provider-lazy_20260808.log; evidence/AEG-X-002/frontend-build-provider-lazy_20260808.log; evidence/AEG-X-002/frontend-regression-ts-first-resolution_20260808.log; evidence/AEG-X-002/frontend-build-ts-first-resolution_20260808.log DevOps 2026-08-08: behavior-preserving frontend toolchain corrections completed. `pnpm build` uses `vue-tsc --noEmit && vite build`; actual no-emit build passed. Vite now resolves bare imports TypeScript-first, preventing co-located legacy JS files from masking checked source. Route and provider static imports were replaced in both active co-located JS/TS entries after the first TS-only change proved Vite resolves JS. Full regression: 27 files / 60 tests passed. Route splitting reduced initial gzip JS 501.14 kB→423.76 kB; provider splitting leaves a 20.51 kB (7.35 kB gzip) bootstrap chunk and lazy-loads PrimeVue/AG Grid at 393.82 kB gzip. Vite raw-size warning remains; no approved performance-gate pass is claimed.
4 AEG-X-003 S0 Cross Architecture tests 고도화 COMPLETED 2026-08-04 tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs (6 tests PASSING) Architect/QA ✅ Architecture rules enforced: (1) No prohibited patterns, (2) Domain isolation from infrastructure, (3) SQL validation (no SELECT *, schema-qualified), (4) Endpoint authorization (Roles/Policies), (5) No placeholder files, (6) No duplicate aggregate IDs. All 6 tests PASS.
5 AEG-X-004 S0 Cross DbUp 복구 rehearsal 고도화 COMPLETED 2026-08-06 docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/AEG-X-004_STATUS_CONTRACT_SLICE.md; db/migrations/0032_shadow_run_queued_status_contract.sql; tests/KArtSell.Integration.Tests/DbUpMigrationTests.cs; tests/KArtSell.Integration.Tests/DbUpRecoveryTests.cs; evidence/AEG-X-004/0032-isolated-migration.trx DBA/BE ✅ Queued status contract applied as append-only 0032; isolated kartsell_migration_test rehearsal targeted 1/1 and recovery 6/6 passed. kartselldb_test was not reset. Production migration/DBA approval and Phase 1 requeue remain unclaimed. ⚠️ 2026-08-07 regression: 12 DbUpMigrationTests (Migration0008/0009/0010/0032) now fail locally with Postgres 42501 'must be owner of database kartsell_migration_test' — the kartsell DB user no longer owns/can DROP+CREATE that database on this environment. Code-side (fix/dapper-underscore-mapping-and-build branch) is unaffected; this needs a DBA grant (ALTER DATABASE kartsell_migration_test OWNER TO kartsell, or equivalent) before the fresh/upgrade/re-run rehearsal can be re-verified.
6 AEG-X-005 S0 Cross Security auth 고도화 COMPLETED IN_PROGRESS 2026-08-04 TBD docs/decisions/ADR-SEC-001.md + tests/KArtSell.Integration.Tests/SecurityAuthenticationTests.cs (6 tests) docs/decisions/ADR-SEC-001.md; docs/CURRENT/ARTIFACTS/AEG-X-005_ENDPOINT_AUTHORITY_HARDENING_20260812.md; docs/CURRENT/AEG-X-005_RECONCILIATION_AUTH_DECISION_REQUIRED.md; tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs; tests/KArtSell.Integration.Tests/SecurityAuthenticationTests.cs Security/BE ✅ ADR-SEC-001 produced (OIDC/JWT/DevelopmentHeader tiers), SecurityAuthenticationTests.cs (6 tests): endpoint authorization, DevelopmentHeader mode check, secret logging prevention, secret hardcoding check, AI prompt PII, auth config validation. Acceptance_Evidence verified: '비개발 무인증 접근 0, secret/log/prompt 노출 0' Actual evidence: Architecture Tests 14/14, SecurityAuthenticationTests 7/7, CorrelationIdMiddlewareTests 2/2. Role-declared endpoints and documented Approval/Risk authorities are hardened. Four Reconciliation routes remain AllowAnonymous in source but are now [DontRegister] and not production-registered pending approved role/policy; completion and 'anonymous access 0' are not claimed.
7 AEG-X-006 S0 Cross Outbox publisher 고도화 COMPLETED 2026-08-04 docs/CURRENT/ARTIFACTS/AEG-X-006_ACCEPTANCE_EVIDENCE.md + src/KArtSell.BuildingBlocks/Reliability/DapperOutboxWriter.cs + OutboxPollerJob.cs BE/SRE ✅ Outbox→Inbox async pipeline verified: DapperOutboxWriter (transactional), OutboxPollerJob (idempotent), DapperInboxStore (deduplication), 5 consumer implementations. Acceptance_Evidence: All criteria met. 177/177 tests PASS.
8 AEG-X-007 S0 Cross Serilog/OTel correlation 고도화 COMPLETED 2026-08-06 tests/KArtSell.ArchitectureTests/PiiRedactionTests.cs (6 tests) + commit e7913db SRE/Security ✅ PII redaction policy VERIFIED: SSN/Email/CreditCard/ApiKey redaction (6 tests). Commit e7913db adds pattern-based sanitization validation. All tests PASS (249/253).
9 AEG-X-016 S12 Cross KIS 주문 제출 startup/CI/runtime 차단 고도화 IN_PROGRESS TBD docs/CURRENT/AEG-X-016_KIS_HARD_OFF_SLICE_NOTE.md; src/KArtSell.Modules.ModelOperations/TradeExecution/KisTradeExecutionService.cs; src/KArtSell.Modules.ModelOperations/TradeExecution/TradeHandlers.cs; src/KArtSell.Host/Program.cs; tests/KArtSell.Integration.Tests/TradeExecution/KisTradingHardOffTests.cs; evidence/AEG-X-016/KisTradingHardOffTests_20260809.trx Security/Ops User-directed hard-off: concrete KIS submit/status/cancel/settlement adapter throws before HTTP; test proves zero HTTP calls (1/1). Trade handlers guard before DB writes and Program removes trade-status-polling. Remains IN_PROGRESS until endpoint-level disabled response and startup capability-override/kill-switch evidence are run. No KIS activation path was introduced.
23 AEG-V16-022 S6 Cross Optimistic command hook IN_PROGRESS TBD docs/CURRENT/AEG-V16-022_OPTIMISTIC_COMMAND_SLICE_NOTE.md; frontend/src/shared/crud/useOptimisticCommand.ts; frontend/src/shared/crud/tests/useOptimisticCommand.spec.ts FE Lead 2026-08-08: Request creation now freezes one Idempotency-Key per user intent and retries reuse it; 409/412 conflict state remains explicit. Actual evidence: targeted Vitest 2/2 PASS; frontend typecheck PASS. COMPLETED is blocked pending actual CRUD-screen integration and predecessor evidence.
24 AEG-V16-023 S6 Cross T01~T10 계약 회귀 IN_PROGRESS TBD docs/CURRENT/AEG-V16-023_SCREEN_STATE_MATRIX_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/catalogue.ts; frontend/src/shared/ui/screen-types/tests/catalogue.spec.ts FE Lead 2026-08-08: State contract is typed and all 13 standard states are now covered across T01~T10, including READY and FORBIDDEN. Actual evidence: catalogue Vitest 4/4 PASS; frontend typecheck PASS. COMPLETED is blocked pending predecessor integration and FE accessibility gate evidence.
25 AEG-V16-024 S6 Cross FE accessibility Gate IN_PROGRESS TBD docs/CURRENT/AEG-V16-024_A11Y_GATE_SLICE_NOTE.md; frontend/src/shared/ui/components/tests/accessibility.contract.spec.ts; evidence/AEG-V16-024/a11y-contract_20260808.log; evidence/AEG-V16-024/frontend-typecheck_20260808.log; evidence/AEG-V16-024/ui-standard-contract-v4_20260808.png FE Lead 2026-08-08: Shared accessibility contract verifies required invalid field label/error/ARIA relationships and busy command action suppression. Actual evidence: accessibility Vitest 2/2 PASS; frontend typecheck PASS; browser snapshot confirms skip link focuses main. Browser review corrected obsolete UI catalog v2 contract copy to v4.0. COMPLETED remains blocked pending UX/QA assistive-technology and approved visual baseline evidence; local screenshot is implementation evidence, not that approval.
26 AEG-X-008 S0 Cross OpenAPI artifact 고도화 COMPLETED IN_PROGRESS 2026-08-04 TBD .gitea/workflows/openapi-gate.yml + docs/api/openapi.json docs/CURRENT/AEG-X-008_OPENAPI_ARTIFACT_DECISION_REQUIRED.md; docs/DECISIONS/ADR-API-BASELINE-001.md; docs/api/openapi.json; src/KArtSell.Host/artifacts/openapi/current_20260813_auto-off.json; evidence/AEG-X-008/openapi-generation_20260813_auto-off.log; evidence/AEG-X-008/backend-regression_20260813.log; evidence/AEG-X-008/openapi-gate-local_20260813.log; .gitea/workflows/openapi-gate.yml BE/FE Architect ✅ OpenAPI diff gate implemented: CI/CD automation detects breaking changes (3 checks: parameter removal, status code removal, field removal), blocks merge without approval, auto-comments on PR Approved current Host baseline is preserved. Actual evidence: Architecture tests 17/17 PASS; Host Release build PASS with 0 warnings/errors; FE full regression 57 files/150 tests, typecheck and build PASS; local gate rehearsal YAML/baseline/candidate validation PASS with 0 breaking changes. Existing >500 kB Vite chunk warning remains. Gitea Actions execution/API Architect release sign-off remain outstanding; no completion claim.
27 AEG-VS-00-01 S0 VS-00 정책·범위·실패상태 계약 확정 COMPLETED 2026-08-06 docs/CURRENT/SLICE_SPECS/VS-00-SLICE_SPEC.md + commit e7913db PM/Architect ✅ SLICE_SPEC produced: VS-00-SLICE_SPEC.md (state transitions, RBAC, governance gates, DQ rules, compliance). Commit e7913db. 249/253 tests PASS.
28 AEG-VS-00-02 S0 VS-00 데이터 시점·스키마·정합성 계약 COMPLETED 2026-08-06 contracts/data/platform-data-contract.v1.json + commit e7913db Data Architect/DBA ✅ DATA_CONTRACT v1.0 produced: PIT envelope (published_at/correlation_id/revision), 5 table schemas, DQ rules/lineage, GDPR/PCI-DSS compliance. JSON schema + validation. 249/253 tests PASS.
29 AEG-VS-00-03 S0 VS-00 도메인 불변조건·상태전이 구현 COMPLETED 2026-08-06 tests/KArtSell.ModelOperations.UnitTests/PolicyTests.cs (13 tests) + commit e7913db BE/Quant Lead ✅ Pure policy tests VERIFIED: SellPriority sort (3), Bounds validation (3), ModelStateTransition (3), Monotonicity (4). All 13 tests PASS. No infrastructure dependency. 249/253 total.
30 AEG-VS-00-04 S0 VS-00 Vertical Slice API/Application/SQL 구현 COMPLETED 2026-08-04 src/KArtSell.Host/Features/ShadowRuns + commit f573a1e + Job 976 BE Lead WBS Acceptance_Evidence verified: '인증·권한·멱등·트랜잭션·ProblemDetails·낙관적 동시성·correlation이 수용기준과 일치' ✅ (Auth: X-KArtSell-User header; Idempotency: Job 976 replay-safe; Correlation: Job ID tracked; Transaction: OutboxPollerJob; Tests: 176/176 PASS)
31 AEG-VS-00-05 S0 VS-00 Event/Job/Inbox·재처리 구현 COMPLETED IN_PROGRESS 2026-08-04 TBD docs/CURRENT/ARTIFACTS/AEG-VS-00-05_ACCEPTANCE_EVIDENCE.md + src/KArtSell.Host/Jobs/OutboxPollerJob.cs + DownstreamConsumerJob.cs docs/CURRENT/AEG-VS-00-05_JOBRUN_SCHEMA_DECISION_REQUIRED.md; docs/CURRENT/ARTIFACTS/AEG-VS-00-05_ACCEPTANCE_EVIDENCE.md; db/migrations/0000_building_blocks.sql; src/KArtSell.BuildingBlocks/Reliability/DapperJobRunRepository.cs; tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs; src/KArtSell.Host/Jobs/OutboxPollerJob.cs; src/KArtSell.Host/Jobs/DownstreamConsumerJob.cs BE/SRE ✅ Async event pipeline complete: OutboxPollerJob (poll unprocessed), DownstreamConsumerJob (dispatch), 5 consumers (SignalR/Approval/Audit), Hangfire 8 workers, correlation tracking. Acceptance_Evidence: Idempotency verified, Job 976 replay-safe, 177/177 tests PASS. Source correction: db/migrations/0000_building_blocks.sql creates building_blocks.job_run and DbMigrator includes db/migrations/**/*.sql. Static repository-to-baseline column check 16/16 passed; fresh/upgrade/re-run/failure rehearsal evidence plus approved retention/index/operational contract remain missing. No completion claim.
32 AEG-VS-00-06 S0 VS-00 Vue feature·Zod·Query·컴포넌트 구현 COMPLETED 2026-08-04 docs/CURRENT/ARTIFACTS/AEG-VS-00-06_ACCEPTANCE_EVIDENCE.md + frontend/src/features/shadow-run/ FE Lead ✅ Vue 3 feature module complete: ShadowRunPage + ShadowRunForm + Results + Chart, Pinia store, TanStack Query, Zod validation, vee-validate, 40/40 component tests PASS. Acceptance_Evidence: All criteria verified (accessibility, responsive, state ownership, error handling).
33 AEG-VS-00-07 S0 VS-00 회귀·관제·Runbook·Rollback 증거 COMPLETED 2026-08-04 docs/operational-runbook.md + PRODUCTION_READINESS.md + scripts/*.ps1 + commit ca2aeae QA/SRE Golden/integration/failure/replay/E2E + metric/alert/Owner/Secondary/rollback rehearsal complete (Acceptance_Evidence: '회귀·관제·Runbook·Rollback 증거') - 7 scenarios, 4 scripts, 18 queries verified
34 AEG-X-009 S1 Cross Source catalog 고도화 COMPLETED 2026-08-07 docs/CURRENT/CATALOGS/source-catalog.md; docs/CURRENT/AEG-X-009_AUTOMATION_PROPOSAL.md; contracts/data/source-approval.v1.proposed.json; docs/DECISIONS/ADR-DATA-001.md; db/migrations/0033_source_approval_contract.sql; db/migrations/0034_dataset_manifest_freeze_contract.sql; db/migrations/0033_market_data_import_logs.sql; src/KArtSell.Modules.ModelOperations/Infrastructure/DapperApprovedModelContextReader.cs Data Governance ✅ Workstream D/E/F COMPLETED: source-catalog.md v2.0 (KRX/OpenDart/KIS consolidated), VS-02_DATA_GOVERNANCE_POLICY.md, VS-03/04 SLICE_SPECs. All 4 unknowns resolved. ✅ Workstream G (commit 136665c, 2026-08-07) also now COMPLETE: live KRX OpenAPI / OpenDart / KIS service integrations (P1-P3), daily scheduling + error classification + SLA tracking + LKG fallback (P4-P6), market_data schema with append-only import logs, correlation_id-based idempotent replay. ⚠️ Note: 0033 is used by two different, unrelated migrations across branches (source_approval_contract.sql vs market_data_import_logs.sql) — confirm actual applied migration number in the target DB's kartsell_schema_versions journal before assuming both landed as authored.
43 AEG-VS-09-01 S4 VS-09 BuildEvidenceSnapshot BLOCKED TBD CLAUDE.md: Evidence requires Phase 1 results PM/Architect Gate 2 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice.
44 AEG-VS-10-01 S4 VS-10 매도 결정 엔진 구현 (GenerateSellDecision) COMPLETED 2026-08-07 docs/CURRENT/SLICE_SPECS/VS-10-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/SellDecision/ (SellDecisionEndpoints.cs, SellDecisionHandler.cs, SellDecisionSql.cs, SellPriorityRanker.cs); frontend/src/features/sell-decision/; tests/KArtSell.Integration.Tests/SellDecision/SellDecisionTests.cs; commit b1e38ac (Phase 3 J, PR #28, merged to main) BE Lead/Quant Lead ✅ Implementation complete (code + BE + FE + tests), matches WBS_MASTER's VS-10='GenerateSellDecision' definition (no ID collision here). Sell priority ranking (HARD_IMPAIRMENT→...→REENTRY_OPTION) with age/liquidity score boosts per VS-10-SLICE_SPEC.md. 32/32 tests PASS run in isolation (2026-08-07); one test (CalculateScore_HardImpairment_ReturnsLowestScore) had a wrong input value that happened to not exercise the >365-day age-boost branch the spec defines — fixed as a test bug, not a product bug (see fix/dapper-underscore-mapping-and-build branch). ⚠️ NOT validated: this row was previously (incorrectly) marked BLOCKED with reasoning 'Model must pass PBO/DSR validation' — that Gate-3/production-readiness validation genuinely still requires real Phase 1 shadow-run data and has not happened. Distinguish 'code implemented and unit/integration-tested' (done) from 'PBO/DSR-validated against real market data' (not done, blocked on Phase 1).
45 AEG-VS-19-01 S5 VS-19 RunFrozenBacktest BLOCKED TBD CLAUDE.md: Requires evidence from Phase 1-4 PM/Architect Gate 3 prerequisite. Blocked by Phase 1, which has not been started (confirmed 2026-08-07). No src/ implementation exists for this slice.
46 AEG-VS-28-01 S2 VS-28 거래 실행 시스템 구현 (Trade Execution, KIS Integration) COMPLETED IN_PROGRESS 2026-08-07 TBD docs/CURRENT/SLICE_SPECS/VS-28-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/TradeExecution/ (TradeEndpoints.cs, TradeHandlers.cs, TradeSql.cs, Trade.cs, KisTradeExecutionService.cs); db/migrations/0039_trades.sql; tests/KArtSell.Integration.Tests/TradeExecution/TradeExecutionTests.cs; commit b1e38ac (Phase 3 K, PR #28, merged to main) BE Lead/Trading Ops New row — no prior tracker entry existed for this slice. ✅ Backend implementation + tests complete: Trade state machine (Pending→Submitted→Accepted→PartiallyFilled/FullyFilled→Confirmed→Reconciled), KIS order submission/poll/settlement. 13/13 tests PASS run in isolation (2026-08-07), but only after two real bugs were fixed on fix/dapper-underscore-mapping-and-build: (1) UpdateTradeStatusAsync only ever persisted status/kis_response/error_message and silently dropped kis_order_id, executed_quantity, unit_price, commission, net_proceeds and both timestamps on every single call since the slice merged — trade fills and settlements were not actually being recorded; (2) the same Dapper snake_case-mapping race condition described in AEG-VS-27-01's notes. ⚠️ Frontend UI built 2026-08-09 (frontend/src/features/trade-execution/, route /ops/trade-execution, pnpm typecheck/build clean, 13 new tests passing) after an earlier attempt failed on the session spend limit and was resumed — on isolated worktree branch worktree-agent-aae90f132a2daf359 (HEAD predates the VS-12→VS-28 renumbering, so that worktree's own tracker row is still AEG-VS-12-01), not yet merged into this branch. Found DEBT-025 there too: TradeEndpoints.cs is AllowAnonymous() with no Roles()/Policies() at all (unlike SellDecisionEndpoints.cs); collides with two other independently-numbered DEBT-025 entries on other unmerged branches — renumber on merge. Renumbered from VS-12 to VS-28 on 2026-08-08 per docs/DECISIONS/ADR-WBS-001-slice-renumbering.md — VS-12 in WBS_MASTER.csv ('RankBuyCandidates') was an unrelated, still-unimplemented slice and keeps its original number unchanged. 2026-08-08 (BE priority pass): DEBT-018 (outbox write not co-transactional with the trade status update) fixed — see TECH_DEBT_REGISTER.md; `dotnet build -c Release` clean, DB-backed tests still unverified (no reachable Postgres this session). 2026-08-09: DEBT-027 fixed — PollTradeStatusHandler/ConfirmSettlementHandler were registered in DI but never invoked by anything (no endpoint, no job); added src/KArtSell.Host/Jobs/TradeStatusPollingJob.cs as a Hangfire recurring job so submitted trades actually progress to Confirmed. `dotnet build -c Release` clean; no dedicated test added (see TECH_DEBT_REGISTER.md for why) and not run against a live database/KIS.
47 AEG-VS-29-01 S2 VS-29 포트폴리오 대사 구현 (Portfolio Reconciliation) COMPLETED IN_PROGRESS 2026-08-07 TBD docs/CURRENT/SLICE_SPECS/VS-29-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/ (Endpoints.cs, ReconcileTradeHandler.cs, ReconciliationEngine.cs, ReconciliationSql.cs, MismatchDetector.cs, CostBasisCalculator.cs); tests/KArtSell.Integration.Tests/PortfolioReconciliation/ReconciliationEngineTests.cs; tests/KArtSell.ModelOperations.UnitTests/EvaluationReconciliationPlannerTests.cs; commit b1e38ac (Phase 3 L, PR #28, merged to main); commit 4059828 (fix: missing model_operations.models table breaking every fresh DB, PR #29, merged to main same day) docs/CURRENT/AEG-VS-29_RECONCILIATION_REPLAY_SAFETY_SLICE_NOTE.md; docs/CURRENT/SLICE_SPECS/VS-29-SLICE_SPEC.md; src/KArtSell.Modules.ModelOperations/PortfolioReconciliation/ (Endpoints.cs, ReconcileTradeHandler.cs, ReconciliationEngine.cs, ReconciliationSql.cs, MismatchDetector.cs, CostBasisCalculator.cs); tests/KArtSell.Integration.Tests/PortfolioReconciliation/ReconciliationEngineTests.cs; tests/KArtSell.ModelOperations.UnitTests/ReconciliationRequestValidatorTests.cs BE Lead New row — no prior tracker entry existed for this slice. ✅ Backend implementation + tests complete: Sell Decision → Trade → Holdings reconciliation, cost-basis calculation, mismatch detection. 18/18 tests PASS run in isolation (2026-08-07). Note this slice's own merge (PR #28) shipped with a missing model_operations.models table that broke every fresh-database migration; that was caught and fixed same day in PR #29 — a reminder that this branch's fresh-install DbUp path had not actually been rehearsed before merge. ⚠️ No frontend UI yet — an attempt was started 2026-08-08 but the background agent building it failed (hit the session's monthly spend limit) before producing any committed code; not resumed this session. Renumbered from VS-14 to VS-29 on 2026-08-08 per docs/DECISIONS/ADR-WBS-001-slice-renumbering.md — VS-14 in WBS_MASTER.csv ('GenerateDailyRecommendations') was an unrelated, still-unimplemented slice and keeps its original number unchanged. 2026-08-08 (BE priority pass): DEBT-018 (outbox writes for TradeReconciled/ReconciliationMismatchAlert not co-transactional with the holding/log write) fixed — see TECH_DEBT_REGISTER.md; `dotnet build -c Release` clean, DB-backed tests still unverified (no reachable Postgres this session). Reclassified from COMPLETED: replay boundary now rejects missing idempotency keys and preserves supplied keys (2 unit tests pass). Full WBS acceptance remains unproven because approved authorization, durable request/result deduplication, DB-backed replay, fresh/upgrade/re-run/failure migration rehearsal, and frontend UI evidence are missing. Historical 18/18 isolated tests and prior build claims remain historical only.
48 PHASE-1-SHADOW-RUN S0-S5 Cross 252+ Trading Day Shadow Run BLOCKED TBD docs/CURRENT/PHASE-1_SHADOW_RUN_STATUS_CORRECTION.md; docs/CURRENT/AEG-X-004_DBUP_EVIDENCE.md; docs/CURRENT/PHASE-1_REQUEUE_READINESS.md; docs/CURRENT/PHASE-1_EXECUTION_EVIDENCE_PLAN.md; docs/CURRENT/PHASE-1_PREFLIGHT_20260806.md; docs/CURRENT/PHASE-1_PRODUCTION_PREFLIGHT_20260806.md; evidence/AEG-X-004/production-readonly-preflight-20260806.md; db/migrations/0032_shadow_run_queued_status_contract.sql; logs/phase-1-execution.log; logs/host-startup-20260804-173000.log 김재현/BE/SRE Read-only preflight: active DbUp journal public.kartsell_schema_versions contains 0032 and check_status includes Queued. Capabilities remain order/KIS/client publication OFF. Server-side dataset_manifest, model_version_registry, evidence_snapshot, and release_evidence_bundle contain no approved/frozen rows; no RunId/JobId/enqueue created. Blocked pending approved server-side VersionSet. Re-confirmed 2026-08-07: still no RunId/JobId exists anywhere in this workspace or its evidence trail; nothing changed on this row this session. Any future document that claims this row is RUNNING must cite a real RunId/JobId — do not restate the earlier (already-corrected) false claim.
49 V13-FE-001 S0 Cross UI Vendor import boundary COMPLETED 2026-08-09 docs/CURRENT/V13-FE-001_KBX_V36_DESIGN_HARNESS_PROPOSAL.md; tools/validate_v16.py docs/CURRENT/V13-FE-001_KBX_V36_DESIGN_HARNESS_PROPOSAL.md; tools/validate_v16.py; frontend/src/shared/ui/adapter/tests/vendorBoundary.spec.ts FE Architect/QA Dependency AEG-X-003 is COMPLETED. KBX v36 was translated as a non-vendor design-evidence harness: preserve the shared UI adapter boundary, keep feature direct PrimeVue/AG Grid imports at zero, and defer token/recipe implementation to separately approved slices. Actual evidence: python tools/validate_v16.py exited 0 with PASS=1 WARN=2 FAIL=0 on 2026-08-09. Warnings are retained (no full source archive; approved runtime evidence absent); no runtime test/build/migration claim is made. Dependency AEG-X-003 is COMPLETED. KBX v36 was translated as a non-vendor design-evidence harness: preserve the shared UI adapter boundary, keep feature direct PrimeVue/AG Grid imports at zero, and defer token/recipe implementation to separately approved slices. Actual evidence: python tools/validate_v16.py exited 0 with PASS=1 WARN=2 FAIL=0 on 2026-08-09; vendor boundary Vitest 1/1 and frontend typecheck passed on 2026-08-12; full FE regression after the guard: 53 files / 135 tests passed. Warnings are retained (no full source archive; approved runtime evidence absent); no runtime test/build/migration claim is made.
50 V13-FE-003 S0 Cross UiAdapter Port 정의 COMPLETED 2026-08-09 docs/CURRENT/V13-FE-003_UI_ADAPTER_PORT_RECONCILIATION.md; frontend/src/shared/ui/adapter/contracts.ts; frontend/src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts FE Architect/QA Dependency V13-FE-001 is COMPLETED. Existing adapter v4 contract explicitly verifies 14 capabilities (stronger than the WBS minimum wording of 8) without feature vendor imports. Actual targeted Vitest evidence: 2 files / 4 tests passed, exit 0, 2026-08-09. KBX-derived components remain provider-neutral reimplementations only; no KBX package, contract, router, store, or permission host was imported.
51 V13-FE-004 S0 Cross PrimeVue/AG Grid Adapter 구현 COMPLETED 2026-08-09 docs/CURRENT/V13-FE-004_ADAPTER_IMPLEMENTATION_RECONCILIATION.md; frontend/src/shared/ui/adapter/primevue; frontend/src/shared/ui/adapter/tests/uiAdapter.contract.spec.ts FE Architect/QA Dependency V13-FE-003 is COMPLETED. PrimeVue/AG Grid remain confined behind adapter v4. Actual targeted Vitest evidence: 2 files / 4 tests passed, exit 0, 2026-08-09. This is contract/accessibility-attribute evidence only; no visual/AT/runtime claim is made.
52 V13-FE-005 S0 Cross Ks* vendor-neutral components COMPLETED IN_PROGRESS 2026-08-09 TBD docs/CURRENT/V13-FE-005_KBX_FORM_COMPONENT_ADOPTION.md; frontend/src/shared/ui/components/KsFormGrid.vue; frontend/src/shared/ui/components/KsFormSection.vue; frontend/src/shared/ui/components/KsFormSpan.vue; frontend/src/shared/ui/components/KsValidationSummary.vue; frontend/src/shared/ui/components/tests/KsFormLayouts.spec.ts docs/CURRENT/V13-FE-005_KBX_FORM_COMPONENT_ADOPTION.md; docs/CURRENT/V13-FE-005_MODELS_LIST_VENDOR_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-005_SHADOW_RUN_VENDOR_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-005_COMPONENT_TEMPLATE_TEST_HARDENING_SLICE_NOTE.md; frontend/src/shared/ui/components/KsFormGrid.vue; frontend/src/shared/ui/components/KsFormSection.vue; frontend/src/shared/ui/components/KsFormSpan.vue; frontend/src/shared/ui/components/KsValidationSummary.vue; frontend/src/shared/ui/components/tests/KsCoreControls.contract.spec.ts; frontend/src/features/models/pages/ModelsList.vue; frontend/src/features/shadow-run/pages/ShadowRunList.vue; evidence/V13-FE-005/component-template-tests_20260813.log FE Architect/QA Dependency V13-FE-004 is COMPLETED. Reimplemented only KBX presentation-only form components against existing K-ArtSell tokens; no KBX package, contracts, provider dependency, routing, permissions, or business policy imported. Actual evidence: targeted Vitest 2 files / 6 tests passed and pnpm typecheck exit 0 on 2026-08-09. Visual/AT/performance baseline remains outside this Slice. Added contract tests for KsButton/KsTextField adapter-neutral behavior, accessibility wiring, loading/disabled semantics, and model events. Actual evidence: targeted 1 file/3 tests PASS, full frontend regression 59 files/156 tests PASS, typecheck PASS, build PASS. Known >500 kB build warning remains; visual/AT/browser/performance evidence remain outstanding. No completion claim.
53 V13-FE-006 S0 Cross AppShell/Page layouts COMPLETED IN_PROGRESS 2026-08-09 TBD docs/CURRENT/V13-FE-006_LAYOUT_CONTRACT_RECONCILIATION.md; frontend/src/shared/ui/layouts/tests/layout.contract.spec.ts; frontend/src/shared/ui/layouts/AppShellLayout.vue; frontend/src/shared/ui/layouts/PageLayout.vue docs/CURRENT/V13-FE-006_LAYOUT_CONTRACT_RECONCILIATION.md; docs/CURRENT/V13-FE-006_NAVIGATION_CONTRACT_HARDENING_SLICE_NOTE.md; docs/CURRENT/V13-FE-006_NAVIGATION_PREFERENCE_SLICE_NOTE.md; frontend/src/shared/shell/KsSideNavigation.vue; frontend/src/shared/shell/KsAppShell.vue; frontend/src/shared/shell/navigationCatalog.ts; frontend/src/shared/shell/screenPreferenceStore.ts; frontend/src/shared/shell/tests/KsSideNavigation.contract.spec.ts; frontend/src/shared/shell/tests/navigationCatalog.spec.ts; frontend/src/shared/ui/layouts/tests/layout.contract.spec.ts; evidence/V13-FE-006/navigation-contract_20260813.log; evidence/V13-FE-006/navigation-preference_20260813.log; evidence/V13-FE-006/navigation-browser-contract_20260813.log UX/FE/QA/Security Dependency V13-FE-005 is COMPLETED. Preserved the existing slot-based layout rather than importing KBX's coupled workspace shell. Actual DOM contract evidence: 1 file / 2 tests passed, exit 0, 2026-08-09; verifies skip navigation, structural landmarks, default automation OFF boundary, and evidence/aside/footer separation. No visual/AT/E2E claim is made. Navigation supports nested-route active semantics, browser-scoped module collapse preference, accessible breadcrumb, and list-only top-level catalog entries. Parameterized detail routes are excluded from navigation while remaining routable. Actual evidence: navigation catalog 1 file/4 tests PASS, typecheck PASS, build PASS, Playwright browser snapshot captured. Known >500 kB warning and an initial console error remain; auth integration, mobile, visual/AT and production evidence remain outstanding. No completion claim.
54 V13-FE-011 S6 Cross T01 검색목록 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-011_T01_SEARCH_LIST_LAYOUT_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/SearchListCrudPage.vue; frontend/src/shared/ui/screen-types/tests/SearchListCrudPage.spec.ts; frontend/src/shared/shell/tests/navigationCatalog.spec.ts; evidence/V13-FE-011/t01-search-list-layout_20260809.log UX/FE 2026-08-09: Scope limited to adapter-neutral T01 composition: list body plus optional detail region through CrudWorkspaceLayout and read-only component catalogue visibility in the Design System menu; WBS workspace remains hidden. Actual execution evidence: targeted Vitest 2 files / 3 tests passed; pnpm typecheck passed. Dependency V13-FE-006 is completed. MVP-A Gate passage, visual/assistive-technology approval, and Playwright evidence are not claimed. Scope remains adapter-neutral T01 composition: list body plus optional detail region, evidence metadata, forbidden content suppression, and retry forwarding. Actual targeted evidence: 1 file / 4 tests passed; pnpm typecheck passed. Dependency V13-FE-006 is completed. MVP-A Gate passage, visual/assistive-technology approval, and Playwright evidence are not claimed.
55 V13-FE-012 S8 Cross T02 상세조회 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-012_T02_DETAIL_READ_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/DetailReadPage.vue; frontend/src/shared/ui/screen-types/tests/DetailReadPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. As-of/version metadata, evidence slot, forbidden suppression, and retry forwarding are characterized. Actual evidence: 1 file / 2 tests and typecheck passed. Production API wiring, visual/AT, browser E2E, and approval evidence remain outstanding.
56 V13-FE-013 S6 Cross T03 등록편집 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-013_T03_EDIT_FORM_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/EditFormPage.vue; frontend/src/shared/ui/screen-types/tests/EditFormPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added dirty/readonly state priority and characterized submit/retry boundaries. Actual evidence: 1 file / 2 tests and typecheck passed. Mutation contract, If-Match/idempotency, visual/AT, browser E2E, and approval evidence remain outstanding.
57 V13-FE-014 S7 Cross T04 MasterDetail 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-014_T04_MASTER_DETAIL_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/MasterDetailCrudPage.vue; frontend/src/shared/ui/screen-types/tests/MasterDetailCrudPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added version metadata propagation and unauthorized/forbidden detail suppression; actual evidence: 1 file / 2 tests and typecheck passed. Route selection, conflict policy, visual/AT, browser E2E, and approval evidence remain outstanding.
58 V13-FE-015 S7 Cross T05 검토승인 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-015_T05_APPROVAL_WORKBENCH_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ApprovalWorkbenchPage.vue; frontend/src/shared/ui/screen-types/tests/ApprovalWorkbenchPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized queue/detail/decision slots plus conflict suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. Maker-checker runtime, evidence hash, visual/AT, browser E2E, and approval evidence remain outstanding.
59 V13-FE-016 S6 Cross T06 Wizard 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-016_T06_WIZARD_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/StepWizardPage.vue; frontend/src/shared/ui/screen-types/tests/StepWizardPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added version metadata and blocked default actions for unsafe states; actual evidence: 1 file / 2 tests and typecheck passed. Resume/branch/validation, visual/AT, browser E2E, and approval evidence remain outstanding.
60 V13-FE-017 S11 Cross T07 Dashboard 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-017_T07_SCORECARD_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ScorecardDashboardPage.vue; frontend/src/shared/ui/screen-types/tests/ScorecardDashboardPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized partial dashboard slots plus forbidden suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. Metric approval, visual/AT, browser E2E, and G4-A evidence remain outstanding.
61 V13-FE-018 S8 Cross T08 Batch운영 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-018_T08_BATCH_OPERATIONS_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/BatchOperationsPageV2.vue; frontend/src/shared/ui/screen-types/tests/BatchOperationsPageV2.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added version metadata and characterized run summary/timeline/records/reprocess/runbook slots plus blocked-state suppression/retry. Actual evidence: 1 file / 2 tests and typecheck passed. JobRun/Watermark/idempotency API contract, visual/AT, browser E2E, and approval evidence remain outstanding.
62 V13-FE-019 S8 Cross T09 대사예외 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-019_T09_RECONCILIATION_EXCEPTION_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/ReconciliationExceptionPage.vue; frontend/src/shared/ui/screen-types/tests/ReconciliationExceptionPage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added evidence version metadata and characterized break/before-after/correction/audit slots plus forbidden suppression/retry. Actual evidence: 1 file / 2 tests. Permission mapping, correction maker-checker/API contract, visual/AT, browser E2E, and G3 approval remain outstanding.
63 V13-FE-028 S8 Cross 대사·정정 화면 적용 IN_PROGRESS TBD docs/CURRENT/V13-FE-028_RECONCILIATION_API_CONTRACT_SLICE_NOTE.md; frontend/src/features/reconciliation/schema.ts; frontend/src/features/reconciliation/api.ts; frontend/src/features/reconciliation/queries.ts; frontend/src/features/reconciliation/tests/schema.spec.ts; frontend/src/features/reconciliation/tests/queries.spec.ts FE/Ops Dependency V13-FE-019 is IN_PROGRESS. Added runtime-validated read adapters and TanStack Query keys/hooks for the two existing reconciliation GET endpoints (2 files / 5 tests). Route/mutation wiring is intentionally withheld pending approved permissions, pagination/version contract, maker-checker correction API, and G3 evidence.
64 V13-FE-020 S11 Cross T10 버전거버넌스 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-020_T10_VERSION_GOVERNANCE_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/VersionGovernancePage.vue; frontend/src/shared/ui/screen-types/tests/VersionGovernancePage.spec.ts UX/FE/QA/Domain Owner Dependency V13-FE-006 is COMPLETED. Added blocked-state suppression and characterized version comparison/evidence/approval/rollback slots (1 file / 2 tests). Automatic promotion/rollback remains disabled; model API, gate-pack, permission, visual/AT/Playwright, and G4-A evidence remain outstanding.
65 V13-FE-034 S7 Cross Idempotency retry contract IN_PROGRESS TBD docs/CURRENT/V13-FE-034_IDEMPOTENCY_RETRY_CONTRACT_SLICE_NOTE.md; frontend/src/shared/commands/idempotency.ts; frontend/src/shared/crud/useOptimisticCommand.ts; frontend/src/shared/crud/tests/useOptimisticCommand.spec.ts FE/BE/QA Existing client command boundary is now WBS-tracked: one immutable key per intent, same key on retry, If-Match forwarding, 409/412 conflict handling, and pending guard. Actual evidence is 1 file / 2 tests plus full FE regression. Server deduplication, replay equivalence, retention, and endpoint integration remain outstanding.
66 V13-FE-036 S8 Cross T12 작업 큐 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-036_T12_WORK_QUEUE_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/WorkQueuePage.vue; frontend/src/shared/ui/screen-types/screenRecipe.ts; frontend/src/shared/ui/screen-types/tests/workQueueRecipe.spec.ts; frontend/src/shared/ui/screen-types/tests/WorkQueuePage.spec.ts UX/FE/QA/Domain Owner Added version metadata and adopted KBX T12 queue recovery/security policy metadata without inventing queue APIs or commands. Actual evidence: 2 test files / 3 tests PASS and pnpm typecheck PASS. Queue-depth source, exception definition, JobRun API, visual/AT/Playwright, and operational approval remain outstanding.
67 V13-FE-037 S7 Cross T11 대량 입력 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-037_T11_FAST_ENTRY_GRID_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/v2/FastEntryGridPage.vue; frontend/src/shared/ui/screen-types/tests/FastEntryGridPage.spec.ts UX/FE/QA/Domain Owner Added blocked-state suppression and characterized grid/validation summary slots with version metadata (1 file / 2 tests). Cell validation, paste audit, idempotency API, partial-result semantics, visual/AT/Playwright, and approval remain outstanding.
68 V13-FE-021 S6 Cross Vee-validate/Zod standard form IN_PROGRESS TBD docs/CURRENT/V13-FE-021_FORM_CONTRACT_AUDIT_NOTE.md; frontend/src/shared/crud/StandardCrudFormPage.vue; frontend/src/shared/ui/screen-types/v2/EditFormPage.vue; frontend/src/shared/crud/formValidation.ts; frontend/src/shared/crud/tests/formValidation.spec.ts; frontend/src/shared/ui/screen-types/tests/EditFormPage.spec.ts; frontend/src/shared/crud/useOptimisticCommand.ts FE Lead Added feature submit-boundary Zod validation and ProblemDetails field-error mapping with stable summary/field/form errors (1 file / 4 tests), while keeping generic shell presentation-only. Duplicate command server contract and form-specific integration evidence remain outstanding.
69 V13-FE-022 S6 Cross Filter/page/tab URL state IN_PROGRESS TBD docs/CURRENT/V13-FE-022_URL_QUERY_CODEC_SLICE_NOTE.md; frontend/src/shared/crud/queryCodec.ts; frontend/src/shared/crud/tests/queryCodec.spec.ts FE Lead/QA Dependency V13-FE-011 remains IN_PROGRESS. Optional sort/filter/operator allowlists now fail closed when supplied; existing callers retain behavior until a resource contract supplies an approved allowlist. Actual evidence: 1 file / 3 tests and typecheck passed. Router wiring and browser deep-link evidence remain outstanding.
70 V13-FE-023 S6 Cross AG Grid server-side contract IN_PROGRESS TBD docs/CURRENT/V13-FE-023_SERVER_GRID_CONTRACT_SLICE_NOTE.md; frontend/src/shared/ui/DataGridShell.vue; frontend/src/shared/ui/tests/DataGridShell.spec.ts FE Lead/BE/QA Dependency V13-FE-004 is COMPLETED. Optional server page metadata and shared paginator event boundary added without client-side data ownership. Actual evidence: 1 file / 2 tests and typecheck passed. Sort/filter mapping, column-state persistence, API integration, visual/AT, and browser evidence remain outstanding.
71 V13-FE-035 S8 Cross Data freshness/version standard IN_PROGRESS TBD docs/CURRENT/V13-FE-035_FRESHNESS_BOUNDARY_SLICE_NOTE.md; docs/CURRENT/V13-FE-035_KBX_FRESHNESS_INDICATOR_ADOPTION_SLICE_NOTE.md; frontend/src/shared/status/DataFreshnessBadge.vue; frontend/src/shared/status/tests/DataFreshnessBadge.spec.ts FE/Data/QA KBX freshness indicator principles adopted: explicit clock, optional source/revision, stale label, and opt-in refresh command. Actual evidence: targeted Vitest 1 file/3 tests PASS and pnpm typecheck PASS. Production published_at/revision wiring, approved freshness windows, visual, browser, and PIT evidence remain outstanding.
72 V13-FE-009 S0 Cross OpenAPI-Zod 생성 전략 ADR COMPLETED 2026-08-12 docs/DECISIONS/ADR-FE-CONTRACT-001.md; frontend/src/shared/api/client.ts; frontend/src/shared/api/problem.ts; frontend/src/shared/api/tests/problem.spec.ts; docs/CURRENT/ARTIFACTS/AEG-X-005_ENDPOINT_AUTHORITY_HARDENING_20260812.md BE/FE Architect Dependency AEG-X-002 is COMPLETED. ADR fixes the current axios→feature API→Zod→TanStack Query boundary and fail-closed generated-client gate. Actual evidence: FE tests 34 files/75 tests, typecheck and host-triggered production build PASS on 2026-08-12. No generated client, OMS contract, or production OpenAPI claim is made.
73 V13-FE-010 S0 Cross PrimeVue unstyled/bootstrap 연결 COMPLETED 2026-08-12 docs/CURRENT/V13-FE-010_UI_BOOTSTRAP_SLICE_NOTE.md; frontend/src/main.ts; frontend/src/shared/ui/provider/resolveUiProvider.ts; frontend/src/shared/ui/provider/tests/resolveUiProvider.spec.ts FE Lead/QA Dependency V13-FE-004 is COMPLETED. Existing provider port is preserved; unsupported adapter values fail before mount and the validated native adapter is installed before mount. Actual evidence: targeted 1 file/3 tests and full FE regression 34 files/76 tests plus typecheck passed. Browser E2E, visual, AT, and deployment evidence are not claimed.
74 V13-FE-007 S0 Cross 11-state Matrix component IN_PROGRESS TBD docs/CURRENT/V13-FE-007_CANONICAL_STATE_PANEL_SLICE_NOTE.md; docs/CURRENT/V13-FE-007_KBX_STATUS_TAG_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/feedback/StandardStatePanel.vue; frontend/src/shared/ui/components/KsStatusTag.vue; frontend/src/shared/ui/components/tests/KsStatusTag.spec.ts UX/FE/QA StandardStatePanel contract remains implemented; KBX status-tag adoption adds semantic/unknown metadata and non-colour cues. Actual evidence: prior 15 tests plus targeted KsStatusTag 1/1 and typecheck PASS. Visual, AT, forced-colors, browser E2E, and production evidence remain outstanding; no completion claim.
75 V13-FE-008 S0 Cross 금융 formatter 중앙화 COMPLETED 2026-08-12 docs/CURRENT/V13-FE-008_FINANCIAL_FORMATTER_SLICE_NOTE.md; frontend/src/shared/formatters/financial.ts; frontend/src/shared/formatters/tests/financial.spec.ts FE Lead/Quant/QA Dependency V13-FE-002 is COMPLETED. Existing centralized formatter preserved and its explicit currency, decimal ratio, bounded quantity, KST as-of, missing/invalid input contracts are characterized. Actual evidence: 1 file / 5 tests and typecheck passed. Locale matrix, visual, and production evidence are not claimed.
76 V13-FE-024 S6 Cross Permission/Capability Guard integration IN_PROGRESS TBD docs/CURRENT/V13-FE-024_PERMISSION_ROUTE_META_SLICE_NOTE.md; frontend/src/app/router.ts; frontend/src/shared/auth/routeAccess.ts; frontend/src/shared/auth/tests/routeAccess.spec.ts FE/Security Dependency V13-FE-006 is COMPLETED. Evidence-backed model.read metadata and pure fail-closed policy added for ModelOps routes. Auth permission hydration, global navigation guard, complete route catalog, and unauthorized information exposure acceptance remain Decision Required.
77 V13-FE-033 S7 Cross ProblemDetails mapping IN_PROGRESS TBD docs/CURRENT/V13-FE-033_KBX_PROBLEM_DETAILS_ADOPTION_SLICE_NOTE.md; docs/CURRENT/V13-FE-033_KBX_PROBLEM_DETAILS_BE_ADOPTION_SLICE_NOTE.md; frontend/src/shared/api/problem.ts; frontend/src/shared/api/tests/problem.spec.ts; src/KArtSell.Host/OpenApi/ProblemDetailsOperationFilter.cs FE/BE/QA KBX v60 discriminator/recovery metadata adopted at FE Zod and BE OpenAPI documentation boundaries. Actual evidence: FE targeted Vitest 1 file/9 tests PASS, FE typecheck PASS, and dotnet build src/KArtSell.Host/KArtSell.Host.csproj -c Release --no-restore PASS (0 warnings/0 errors). BE payload parity, naming/redaction/retry approval, and browser state evidence remain Decision Required.
78 V13-FE-011 S6 Cross T01 검색목록 화면 템플릿 IN_PROGRESS TBD docs/CURRENT/V13-FE-011_KBX_T01_RECIPE_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/screen-types/screenRecipe.ts; frontend/src/shared/ui/screen-types/v2/SearchListCrudPage.vue; frontend/src/shared/ui/screen-types/tests/screenRecipe.spec.ts UX/FE/QA KBX v60 T01 recipe policies adopted as immutable metadata without copying OMS/API/vendor code. Actual evidence: targeted Vitest 2 files/5 tests PASS and pnpm typecheck PASS. Real API/bulk-selection/permission contract, visual/AT, and Playwright evidence remain Decision Required.
79 V13-FE-023 S6 Cross AG Grid server-side contract IN_PROGRESS TBD docs/CURRENT/V13-FE-023_KBX_GRID_STATUS_ADOPTION_SLICE_NOTE.md; frontend/src/shared/ui/gridColumnAdapter.ts; frontend/src/shared/ui/gridStatus.ts; frontend/src/shared/ui/adapter/contracts.ts; frontend/src/shared/ui/tests/gridColumnAdapter.spec.ts; frontend/src/shared/ui/tests/gridStatus.spec.ts; frontend/src/features/models/pages/ModelsList.vue; frontend/src/features/shadow-run/pages/ShadowRunList.vue; evidence/V13-FE-023/frontend-regression_20260813.log; evidence/V13-FE-023/models-grid-port_20260813.log; evidence/V13-FE-023/shadow-run-grid-port_20260813.log; evidence/V13-FE-038/bundle-baseline_20260813.log FE Lead/BE/QA KBX registry columns are mapped through the provider-neutral UiGridColumn contract; ModelsList and ShadowRunList use KsDataGrid with explicit Model.modelId and ShadowRun.runId navigation. Actual evidence: targeted adapter tests PASS, full frontend regression 58 files/153 tests PASS, typecheck PASS, build PASS. Known >500 kB build warning remains; server query mapping, status-map approval, visual/AT/browser evidence remain Decision Required.
80 V13-FE-038 S11 Cross 대량 화면 성능 budget IN_PROGRESS TBD evidence/V13-FE-038/bundle-baseline_20260813.log; evidence/V13-FE-038/chunk-split-attempt_20260813.log; evidence/V13-FE-038/lazy-adapter_20260813.log; evidence/V13-FE-038/aggrid-module-scope_20260813.log; frontend/src/shared/ui/adapter/primevue/index.ts; frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue FE/SRE/QA AG Grid adapter now registers only ClientSideRowModelModule instead of AllCommunityModule. Actual evidence: 63 files/168 tests PASS, typecheck PASS, build PASS; AgGridAdapter reduced 1,027,848 -> 588,718 bytes (gzip 285.75 -> 163.66 kB), but Vite >500 kB warning persists. Two manualChunks attempts produced no additional reduction and were reverted. No performance gate PASS or browser/network budget claim.
@@ -15,9 +15,9 @@
### Source
- `docs/Design/kbx-foundation-v36/docs/design-token-policy-v4.md`: primitive → semantic → component 토큰, 밀도는 배치·form·keyboard 계약을 바꾸지 않음.
- `docs/Design/kbx-foundation-v36/docs/kbx-v36-standard-traceability.md`: template → recipe → canonical scenario → Vitest/Playwright 증거의 연결.
- `docs/Design/kbx-foundation-v36/docs/screen-recipe-verification-home-attention-v36.md`: `testProfile`은 UX/복구/보안 검증 범위이며, client business truth가 아님.
- `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/design-token-policy-v4.md`: primitive → semantic → component 토큰, 밀도는 배치·form·keyboard 계약을 바꾸지 않음.
- `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/kbx-v36-standard-traceability.md`: template → recipe → canonical scenario → Vitest/Playwright 증거의 연결.
- `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/docs/screen-recipe-verification-home-attention-v36.md`: `testProfile`은 UX/복구/보안 검증 범위이며, client business truth가 아님.
- `frontend/src/shared/ui/adapter/`, `tools/validate_v16.py`: 현재 UI provider/adapter 경계와 정적 vendor-import 검사.
- `frontend/src/shared/ui/screen-types/catalogue.ts`, `contracts/ui/screen-types.v2.json`: T01~T10 화면 유형, 상태·증거·anti-pattern 계약.
- `frontend/src/design-system/tokens.css`: 현재 primitive와 일부 semantic/component 토큰.
@@ -79,7 +79,7 @@ KBX의 구현물을 가져오지 않고 다음 불변식을 K-ArtSell의 현 경
| --- | --- |
| `python tools/validate_v16.py` | `PASS=1 WARN=2 FAIL=0`, exit 0 (2026-08-09) |
| Vendor boundary | validator가 `frontend/src``.ts`/`.vue`에서 PrimeVue·AG Grid import를 검사하고 `shared/ui/adapter/primevue` 외 위치를 실패 처리 |
| 범위 | 코드/토큰 값/화면 동작은 변경하지 않음. 사용자 제공 `docs/Design/kbx-foundation-v36/`는 추적·수정하지 않음. |
| 범위 | 코드/토큰 값/화면 동작은 변경하지 않음. 사용자 제공 `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/`는 추적·수정하지 않음. |
경고 2건은 full source archive 및 승인 런타임이 없다는 내용이며, .NET/DB/Playwright/Shadow 결과를 통과로 주장하지 않는다.
@@ -1,4 +1,6 @@
# V13-FE-003 — UI Adapter Port 재검증
# V13-FE-003 — UI Adapter Port 재검증 (historical contract)
> Superseded for existing application-owned components by `V13-FE-005_COMPONENT_DIRECT_VENDOR_RESTORE_SLICE_NOTE.md`. The adapter contract remains valid for newly created vendor-neutral components; it is not the functional ceiling for existing `Ks*` components.
| 항목 | 값 |
| --- | --- |
@@ -1,4 +1,4 @@
# V13-FE-004 — Provider Adapter 구현 재검증
# V13-FE-004 — Provider Adapter 구현 재검증 (new-component scope)
| 항목 | 값 |
| --- | --- |
@@ -8,7 +8,7 @@
## Source / Assumption / Unknown / Decision Required
- **Source:** PrimeVue/AG Grid imports are confined to the approved adapter directory; `Ks*` components consume `UiAdapter` rather than provider components.
- **Source:** PrimeVue/AG Grid imports remain available in the approved adapter directory for new vendor-neutral components. Existing `Ks*` components are direct-vendor components under the direct ownership Slice and no longer consume `UiAdapter` for rendering.
- **Assumption:** the existing WCAG 2.2 AA target is the applicable baseline; this test run is contract-level evidence, not an assistive-technology audit.
- **Unknown:** provider visual baseline and keyboard/AT matrix remain pending `AEG-V16-024` approval.
- **Decision Required:** no new provider or provider-specific component is introduced by KBX reuse.
@@ -0,0 +1,38 @@
# V13-FE-006 — navigation contract hardening
## Scope
- **WBS:** V13-FE-006
- **Requirement/API/UI/Test:** REQ-FE-NAV / Cross / UI-NAV-01 / T-FE-NAV-01
- **Source:** current `KsSideNavigation`, `navigationCatalog`, router meta, and existing AppShell tests.
- **Change:** nested detail routes now activate their parent navigation item and expose `aria-current="page"`.
- **Not changed:** route catalog, permissions, capability flags, menu labels, or navigation persistence.
## Evidence
- Navigation contract test: 1 file / 2 tests passed.
- Full frontend regression: 62 files / 162 tests passed.
- `pnpm typecheck`: passed.
- `pnpm build`: passed; known Vite >500 kB chunk warning remains.
- Visual/AT/browser evidence remains outstanding.
- Evidence: `evidence/V13-FE-006/navigation-contract_20260813.log`.
- Menu search hardening: results now expose stable option IDs and the input tracks the active option through `aria-activedescendant`/`aria-controls`; empty results remove the active descendant.
- Menu search contract test: 1 file / 2 tests passed.
- Evidence: `evidence/V13-FE-006/menu-search-contract_20260813.log`.
- Permission metadata hardening: navigation entries now preserve route permission metadata and expose a pure fail-closed `filterNavigationEntries` function. AppShell wiring remains deferred until a reactive approved auth source exists.
- Catalog contract evidence: 3 files / 7 tests passed; typecheck and build passed.
- Evidence: `evidence/V13-FE-006/navigation-permission-contract_20260813.log`.
- Module section hardening: side navigation sections can collapse/expand with `aria-expanded`; route and permission behavior remain unchanged.
- Targeted navigation test: 1 file / 3 tests passed; typecheck and build passed.
- Evidence: `evidence/V13-FE-006/navigation-section-collapse_20260813.log`.
- Breadcrumb hardening: `KsAppShell` now exposes `홈 → 현재 화면` through an accessible `현재 위치` navigation landmark using route metadata.
- Breadcrumb contract test: 1 file / 2 tests passed; typecheck and build passed.
- Evidence: `evidence/V13-FE-006/breadcrumb-contract_20260813.log`.
- Browser contract evidence: Playwright snapshot confirmed shell landmarks, breadcrumb, and list-only top-level navigation. Parameterized detail routes are excluded from the catalog.
- Evidence: `evidence/V13-FE-006/navigation-browser-contract_20260813.log`.
- Mobile navigation hardening: added a responsive drawer toggle, backdrop close, Escape close, and explicit open/close labels without changing desktop route or permission behavior.
- Evidence: `evidence/V13-FE-006/mobile-navigation-contract_20260813.log`.
- Mobile browser evidence: at 390x844, menu open, drawer/backdrop close, and Escape close were reproduced with Playwright.
- Evidence: `evidence/V13-FE-006/mobile-browser-contract_20260813.log`.
- Focus hardening: mobile drawer now focuses its close control on open, traps Tab/Shift+Tab within drawer controls, and returns focus to the header menu button on close/Escape/backdrop.
- Evidence: `evidence/V13-FE-006/mobile-focus-contract_20260813.log`.
@@ -0,0 +1,23 @@
# V13-FE-006 — navigation section preference persistence
## Scope
- **WBS:** V13-FE-006
- **Requirement/API/UI/Test:** REQ-FE-NAV / Cross / UI-NAV-01 / T-FE-NAV-PREFERENCE
- **Source:** existing versioned `screenPreferenceStore` and `KsSideNavigation` collapse contract.
- **Change:** persist collapsed module names in the existing browser UI preference record and wire the shell as a controlled state boundary.
- **Not changed:** authentication, authorization, route catalog, API data, or business state.
## Source / Assumption / Unknown / Decision Required
- **Source:** `ks.shell.screenPreference.v1` localStorage preference boundary.
- **Assumption:** section collapse is browser UI preference, not user/account data; existing browser storage scope is acceptable.
- **Unknown:** cross-device/user profile synchronization and mobile drawer behavior.
- **Decision Required:** account-scoped preference migration and mobile UX remain separate decisions.
## Evidence
- Targeted navigation contract: 1 file / 3 tests passed.
- `pnpm typecheck`: passed.
- `pnpm build`: passed; known Vite >500 kB chunk warning remains.
- Evidence: `evidence/V13-FE-006/navigation-preference_20260813.log`.
@@ -0,0 +1,26 @@
# V13-FE-007 — Canonical state panel slice note
- **Requirement:** REQ-FE-STATE
- **API/UI/Test:** UI-FOUND-07 / T-FE-STATE-01
- **Source:** v60 canonical status presentation; current `StandardUiState` and `StandardScreenState` contracts.
- **Assumption:** `StandardStatePanel` is the legacy/common feedback component covered by this WBS item; screen-boundary integration remains separately owned by screen-type tests.
- **Unknown:** Product copy and visual/assistive-technology approval for each state are not stored as release evidence.
- **Decision Required:** UX/QA must approve final state copy and visual/AT baselines before claiming those evidence classes.
## Applied boundary
- Aligned `StandardStatePanel` with the active screen state contract by adding `FORBIDDEN`.
- Characterized all 13 declared states, including READY, rendering behavior, explicit retry opt-in, and forbidden-state no-retry behavior.
- Kept state rendering presentation-only; it does not perform authorization, network, persistence, or policy decisions.
## Evidence
```text
pnpm test -- src/shared/ui/feedback/tests/StandardStatePanel.spec.ts
PASS: 1 file / 15 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No visual, assistive-technology, browser E2E, or production evidence is claimed.
@@ -0,0 +1,21 @@
# V13-FE-007 — KBX Status component adoption
## Scope
- **Source:** KBX v59/v60 status dictionary guidance and `packages/kbx-ui/src/components/KbxStatus.vue` principles.
- **Adopted:** vendor-neutral `KsStatusTag` now accepts semantic and unknown metadata; native and PrimeVue adapters expose text, ARIA label, semantic metadata, and a non-colour cue.
- **Not adopted:** direct vendor imports in feature code, new domain statuses, OMS catalogs, or automatic status translation.
## Source / Assumption / Unknown / Decision Required
- **Source:** current `KsStatusTag` adapter port and `gridStatus.ts` resolver.
- **Assumption:** callers pass a label already resolved from an approved status map; the component does not mutate raw API values.
- **Unknown:** final visual tokens and forced-colors baseline for each provider.
- **Decision Required:** UX/QA approval of visual, screen-reader, and forced-colors evidence.
## Evidence
- Targeted Vitest: 1 file / 1 test passed.
- `pnpm typecheck`: passed (`vue-tsc --noEmit`).
Visual, assistive-technology, and browser evidence remain outstanding.
@@ -0,0 +1,26 @@
# V13-FE-008 — Financial formatter slice note
- **Requirement:** REQ-FE-FORMAT
- **API/UI/Test:** UI-FOUND-08 / T-FE-FMT-01
- **Source:** v60 unit/display-boundary guidance; current `frontend/src/shared/formatters/financial.ts`.
- **Assumption:** Formatter inputs are already normalized domain values at the FE boundary: currency amount, decimal ratio, quantity, and an instant for as-of display.
- **Unknown:** Per-account currency and locale policy is not part of this Slice.
- **Decision Required:** Quant/QA must approve any future rounding or locale change; formatters must not silently infer units.
## Applied boundary
- Preserved the existing centralized formatter implementation.
- Characterized missing values, explicit currency marker, decimal-to-percent conversion, bounded quantity precision, KST as-of display, and invalid date handling.
- No domain calculation, rounding policy, API contract, or database value was changed.
## Evidence
```text
pnpm test -- src/shared/formatters/tests/financial.spec.ts
PASS: 1 file / 5 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No visual, locale-matrix, or production evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-010 — UI bootstrap slice note
- **Requirement:** REQ-FE-BOOT
- **API/UI/Test:** UI-FOUND-10 / T-FE-SMOKE-01
- **Source:** v60 provider/bootstrap fail-fast boundary; current `frontend/src/main.ts` and `shared/ui/provider` implementation.
- **Assumption:** `native-accessible` is the deterministic smoke-test provider because it does not require browser vendor runtime setup.
- **Unknown:** Browser-level production startup under every deployment-specific `VITE_UI_ADAPTER` value remains outside this unit slice.
- **Decision Required:** No additional provider or vendor may be introduced without a new adapter contract decision.
## Applied boundary
- Preserve dynamic `resolveUiProvider` selection and reject unsupported values before mount.
- Install the validated adapter before application mount through the provider port.
- Add a smoke test proving the installed adapter is available through the shared adapter injection boundary.
- Do not import the v60 KBX package, router, store, permission host, or OMS screens.
## Evidence
```text
pnpm test -- src/shared/ui/provider/tests/resolveUiProvider.spec.ts
PASS: 1 file / 3 tests (2026-08-12)
pnpm test; pnpm typecheck
PASS: 34 files / 76 tests; typecheck PASS (2026-08-12)
```
This slice does not claim browser E2E, visual, assistive-technology, or production deployment evidence.
@@ -0,0 +1,25 @@
# V13-FE-011 — KBX v60 T01 recipe adoption
## Scope
- **WBS:** V13-FE-011
- **Requirement/API/UI/Test:** REQ-FE-T01 / Cross / UI-T01 / T-FE-T01-01
- **Source:** `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/screens/kbx.screen-recipes.json` T01 recipe.
- **Adopted:** immutable T01 required/recovery/security policy metadata in `frontend/src/shared/ui/screen-types/screenRecipe.ts`.
- **Not adopted:** KBX OMS routes, API calls, server-side selection implementation, vendor UI code, generated scaffolding, or client-side server state.
## Source / Assumption / Unknown / Decision Required
- **Source:** KBX v60 T01 recipe and current `SearchListCrudPage.vue`/`StandardScreenBoundary.vue`.
- **Assumption:** recipe policy metadata documents caller obligations; it does not enforce or invent a backend contract.
- **Unknown:** the approved production search/read-model contract, bulk-selection API and permission names for each K-ArtSell screen.
- **Decision Required:** UX/FE/Domain Owner must approve screen-specific policy bindings before a template is wired to a real API or bulk command.
## Evidence
- Targeted Vitest: 2 files / 5 tests passed.
- `pnpm typecheck`: passed (`vue-tsc --noEmit`).
## Remaining acceptance evidence
Visual/assistive-technology approval, Playwright trace, real API transcript, and approved screen-specific permission/bulk-selection contracts remain outstanding.
@@ -27,6 +27,6 @@
## Actual execution evidence
- `pnpm test -- --run src/shared/ui/screen-types/tests/SearchListCrudPage.spec.ts src/shared/shell/tests/navigationCatalog.spec.ts` — 2 files / 3 tests passed, exit 0.
- `pnpm test -- src/shared/ui/screen-types/tests/SearchListCrudPage.spec.ts` — 1 file / 4 tests passed, exit 0. Covers list/detail composition, forbidden content suppression, and retry forwarding with the validated native adapter fixture.
- `pnpm typecheck``vue-tsc --noEmit`, exit 0.
- Preserved output: `evidence/V13-FE-011/t01-search-list-layout_20260809.log`.
@@ -0,0 +1,27 @@
# V13-FE-012 — T02 detail-read template slice note
- **Requirement:** REQ-FE-T02
- **API/UI/Test:** UI-T02 / T-FE-T02-01
- **Source:** v60 evidence/version detail boundary; current `DetailReadPage.vue`, `PageLayout`, and `StandardScreenBoundary` contracts.
- **Assumption:** The caller supplies an approved evidence context; the template only presents it and does not manufacture evidence.
- **Unknown:** No active production detail screen currently wires a versioned domain response through this template.
- **Decision Required:** Domain Owner/QA must approve per-resource evidence fields and visual/AT/browser acceptance before MVP/G3 claims.
## Applied boundary
- Characterized as-of and version metadata propagation.
- Characterized evidence slot composition.
- Characterized forbidden-state content suppression and retry forwarding.
- Kept the template presentation-only; no API, permission source, or domain policy was introduced.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/DetailReadPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No production API, visual, AT, or browser E2E evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-013 — T03 edit-form template slice note
- **Requirement:** REQ-FE-T03
- **API/UI/Test:** UI-T03 / T-FE-T03-01
- **Source:** v60 dirty/readonly form boundary; current `EditFormPage`, `StandardCrudFormPage`, and `StandardScreenBoundary` contracts.
- **Assumption:** Dirty and readonly flags are caller-owned UI state; validation, If-Match, idempotency, and authorization remain feature/API responsibilities.
- **Unknown:** No active production form currently wires this generic T03 template to a versioned mutation contract.
- **Decision Required:** UX/QA/Domain Owner must approve form-level accessibility, conflict, validation, and browser evidence before MVP-A completion.
## Applied boundary
- Added optional `dirty` and `readonly` inputs to `EditFormPage`.
- Standardized state priority as `READONLY > DIRTY > supplied state`.
- Preserved submit/retry event boundaries and evidence metadata forwarding.
- Did not add domain fields, mutation logic, If-Match handling, or API calls.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/EditFormPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No visual, AT, browser E2E, or production mutation evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-014 — T04 master-detail template slice note
- **Requirement:** REQ-FE-T04
- **API/UI/Test:** UI-T04 / T-FE-T04-01
- **Source:** v60 route-selection/evidence boundary; current `MasterDetailCrudPage`, `PageLayout`, and `StandardScreenBoundary` contracts.
- **Assumption:** Master/detail selection and evidence context are caller-owned; the template does not fetch, cache, or mutate records.
- **Unknown:** No active production master-detail screen currently supplies a domain version/conflict contract.
- **Decision Required:** UX/QA/Domain Owner must approve selection, conflict, accessibility, and browser acceptance before MVP-B completion.
## Applied boundary
- Forwarded evidence `version` in addition to `asOf`.
- Prevented detail-slot content exposure for `UNAUTHORIZED` and `FORBIDDEN` states while preserving the shared state boundary.
- Characterized master/detail slot composition and retry forwarding.
- Did not add route selection state, API calls, or domain conflict policy.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/MasterDetailCrudPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No visual, AT, browser E2E, or production API evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-015 — T05 approval workbench template slice note
- **Requirement:** REQ-FE-T05
- **API/UI/Test:** UI-T05 / T-FE-T05-01
- **Source:** v60 maker-checker/evidence presentation boundary; current `ApprovalWorkbenchPage`, `ReviewWorkbenchLayout`, and `StandardScreenBoundary` contracts.
- **Assumption:** Queue, detail, decision, and evidence data are caller-owned; this template does not approve, publish, or mutate anything.
- **Unknown:** No active production approval screen currently wires maker/checker identity, evidence hash, or warning acknowledgement through this template.
- **Decision Required:** Compliance/QA/Domain Owner must approve maker-checker, reason, expiry, visual/AT, and browser evidence before MVP-B completion.
## Applied boundary
- Forwarded evidence `version` to the page metadata.
- Characterized queue/detail/decision slot composition.
- Characterized conflict-state decision content suppression and retry forwarding.
- Kept the component presentation-only; no approval policy or mutation path was introduced.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/ApprovalWorkbenchPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No maker-checker runtime, visual, AT, browser E2E, or production evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-016 — T06 wizard template slice note
- **Requirement:** REQ-FE-T06
- **API/UI/Test:** UI-T06 / T-FE-T06-01
- **Source:** v60 resume/action-state boundary; current `StepWizardPage`, `PageLayout`, and `StandardScreenBoundary` contracts.
- **Assumption:** Step progression and validation are caller-owned; this template only exposes navigation intents.
- **Unknown:** No active production wizard currently supplies resume/branch/impact-revalidation contracts.
- **Decision Required:** UX/QA/Domain Owner must approve step validation, resume, branch, accessibility, and browser evidence before MVP-A completion.
## Applied boundary
- Forwarded evidence `version` metadata.
- Blocked default wizard actions during `LOADING`, `ERROR`, `UNAUTHORIZED`, `FORBIDDEN`, `CONFLICT`, `EXPIRED`, `READONLY`, and `PROCESSING` states.
- Preserved previous/next/finish event boundaries in actionable states.
- Did not add domain branching, persistence, validation, or mutation logic.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/StepWizardPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No visual, AT, browser E2E, or production workflow evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-017 — T07 dashboard/scorecard template slice note
- **Requirement:** REQ-FE-T07
- **API/UI/Test:** UI-T07 / T-FE-T07-01
- **Source:** v60 metric-definition/version boundary; current `ScorecardDashboardPage`, `DashboardLayout`, and `StandardScreenBoundary` contracts.
- **Assumption:** KPI, primary, secondary, alert, and metric-definition content is caller-owned; the template does not calculate or publish metrics.
- **Unknown:** No active production dashboard currently supplies approved metric definitions and sample-size evidence through this template.
- **Decision Required:** Quant/QA/Domain Owner must approve metric definition, partial-data semantics, accessibility, visual, and browser evidence before G4-A completion.
## Applied boundary
- Forwarded evidence `version` metadata.
- Characterized all dashboard slots under a `PARTIAL` snapshot.
- Characterized forbidden content suppression and retry forwarding after an error state.
- Did not add metric calculation, threshold, or publication logic.
## Evidence
```text
pnpm test -- src/shared/ui/screen-types/tests/ScorecardDashboardPage.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No metric approval, visual, AT, browser E2E, or production evidence is claimed.
@@ -0,0 +1,27 @@
# V13-FE-018 — T08 Batch Operations Screen Template
## Source / Assumption / Unknown / Decision Required
- Source: `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening`; existing `BatchOperationsPageV2.vue` and `StandardScreenBoundary` contracts.
- Assumption: batch run summary, timeline, records, reprocess, and runbook are presentation slots; JobRun/Watermark semantics remain server-side contracts.
- Unknown: approved batch API, JobRun schema, replay/idempotency contract, ownership, alert, and runbook evidence.
- Decision Required: approve the production batch API and operational safety contract before wiring mutations or schedules.
## Implemented boundary
- Propagates evidence `version` through `PageLayout`.
- Preserves named slots for summary, timeline, records, reprocess, and runbook.
- Suppresses operational content while loading, processing, error, unauthorized, forbidden, conflict, expired, or readonly; retry remains owned by the shared boundary.
- No scheduler, reprocess mutation, automatic model promotion, order, or KIS path was introduced.
## Evidence
Command: `pnpm test -- src/shared/ui/screen-types/tests/BatchOperationsPageV2.spec.ts`
- Actual result: 1 file / 2 tests passed.
- `pnpm typecheck`: passed.
- `git diff --check`: passed; only existing LF/CRLF normalization warnings were emitted.
## Outstanding
Visual/AT/browser E2E evidence, batch API contract, JobRun/Watermark/idempotency evidence, metrics/alerts/runbook, and approval evidence remain outstanding. This Slice is intentionally `IN_PROGRESS`.
@@ -0,0 +1,22 @@
# V13-FE-019 — T09 Reconciliation Exception screen template
## Source / Assumption / Unknown / Decision Required
- Source: v60 screen contract/permission guidance and current `ReconciliationExceptionPage.vue` shared screen port.
- Assumption: before/after, correction, audit, and break content are evidence-bearing slots; API authority remains server-side.
- Unknown: approved reconciliation permissions, correction maker-checker contract, API schema, and Playwright/AT environment.
- Decision Required: UX/Domain/QA approval of responsive, accessibility, permission, and correction workflow evidence.
## Implemented
- Propagates evidence version to the page header.
- Preserves T09 comparison, correction, audit, break, filter, action, and footer slots.
- Suppresses sensitive exception details and actions for blocked/terminal states; shared boundary retains retry behavior.
## Evidence
`pnpm test -- src/shared/ui/screen-types/tests/ReconciliationExceptionPage.spec.ts`: 1 file / 2 tests passed.
- Full FE regression after the Slice: 46 files / 119 tests passed; `pnpm typecheck` passed; production Vite build completed with the existing large-chunk warning.
- Reconciliation backend characterization: PortfolioReconciliation filter 17 tests passed; ModelOperations reconciliation filter 3 tests passed.
- Visual/AT/Playwright evidence remains required before completion; this Slice is `IN_PROGRESS`.
@@ -0,0 +1,19 @@
# V13-FE-020 — T10 Version Governance screen template
## Source / Assumption / Unknown / Decision Required
- Source: v60 screen recipe governance requirements and current `VersionGovernancePage.vue` shared screen port.
- Assumption: version comparison, evidence matrix, approval, and rollback are evidence-bearing presentation slots; activation remains human-approved.
- Unknown: approved model/policy API, gate-pack schema, same-dataset/cost definition, rollback contract, and permission mapping.
- Decision Required: Quant/Risk/QA approval before wiring activation or rollback commands.
## Implemented
- Preserves version metadata and governance slots.
- Suppresses comparison/evidence/approval/rollback/footer content in blocked or terminal states.
- Keeps retry under the shared boundary; no automatic promotion, rollback, threshold mutation, or order path is added.
## Evidence
- Targeted test: 1 file / 2 tests passed.
- Typecheck and full FE regression evidence must be refreshed after this Slice; visual/AT/Playwright and G4-A evidence remain outstanding.
@@ -0,0 +1,27 @@
# V13-FE-021 — Form contract audit
## Source / Assumption / Unknown / Decision Required
- Source: `frontend/src/shared/crud/StandardCrudFormPage.vue`, `frontend/src/shared/ui/screen-types/v2/EditFormPage.vue`, `FormPageLayout.vue`, and `useOptimisticCommand.ts`.
- Assumption: form rendering owns state/presentation; schema parsing and command idempotency belong at the feature submit boundary.
- Unknown: approved standard Zod form adapter, 422 ProblemDetails field mapping, and per-form If-Match contract.
- Decision Required: FE/BE/QA approval before introducing a shared form validation abstraction.
## Audit result
- Existing form screens provide dirty/readonly state precedence, shared retry, submit event forwarding, and evidence version display.
- Added `validateFormSubmission()` as an explicit feature submit-boundary helper; the generic form shell remains presentation-only.
- The helper returns typed data or a stable summary plus field/form-level errors.
- Added `mapProblemToFormFailure()` for server ProblemDetails `errors` without mutating the response.
- Duplicate-submit protection and `Idempotency-Key`/`If-Match` forwarding exist in `useOptimisticCommand`, not in the generic form shell.
- No new library or speculative abstraction was introduced because the approved form contract is missing.
## Evidence
- `frontend/src/shared/ui/screen-types/tests/EditFormPage.spec.ts`: 1 file / 2 tests passed in the FE regression run.
- `frontend/src/shared/crud/tests/useOptimisticCommand.spec.ts`: 1 file / 2 tests passed.
- `frontend/src/shared/crud/tests/formValidation.spec.ts`: 1 file / 4 tests passed.
## Outstanding
Feature-specific integration, 422 transport tests, and approved form workflow evidence remain outstanding. This WBS item remains `IN_PROGRESS`.
@@ -0,0 +1,27 @@
# V13-FE-022 — URL query codec slice note
- **Requirement:** REQ-FE-URL
- **API/UI/Test:** UI-URL-01 / T-FE-URL-01
- **Source:** v60 deep-link/canonical route boundary; current `frontend/src/shared/crud/queryCodec.ts`.
- **Assumption:** Each screen that consumes the codec can provide an approved field/operator allowlist from its resource contract.
- **Unknown:** No active production screen currently wires this codec to router state.
- **Decision Required:** FE/QA must approve per-resource filter/sort allowlists before enabling URL synchronization in a screen.
## Applied boundary
- Added optional allowlists for sort fields, filter fields, and filter operators.
- When supplied, unapproved URL values are discarded and the approved fallback remains authoritative.
- Preserved existing behavior for callers that have not yet supplied a screen-specific allowlist.
- Kept URL state as a serializable query contract; no Pinia/server-state duplication was introduced.
## Evidence
```text
pnpm test -- src/shared/crud/tests/queryCodec.spec.ts
PASS: 1 file / 3 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
The Slice remains IN_PROGRESS until a production screen supplies an approved allowlist and deep-link browser evidence is collected.
@@ -0,0 +1,34 @@
# V13-FE-023 — KBX v59 grid status boundary adoption
## Scope
- **WBS:** V13-FE-023
- **Requirement/API/UI/Test:** REQ-FE-GRID / Cross / UI-GRID-01 / T-FE-GRID-01
- **Source:** `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/packages/kbx-ui/src/grid/status.ts` and v59 Grid Status Dictionary guidance.
- **Adopted:** pure `raw canonical value → label/semantic/unknown` resolver, label-based filtering/export helpers, and optional `statusMap` on the shared grid-column contract.
- **Not adopted:** OMS status catalog, backend status mutation, vendor grid APIs, filter/CSV behavior, or client-side data ownership.
## Source / Assumption / Unknown / Decision Required
- **Source:** KBX resolver contract and current `UiGridColumn`/`DataGridShell` adapter boundary.
- **Assumption:** status maps are feature-owned declarations; shared UI owns only the resolver contract.
- **Unknown:** approved status dictionaries for each K-ArtSell feature and whether the current vendor adapters consume formatter/status metadata.
- **Decision Required:** FE/Domain Owner must approve each feature's status vocabulary and adapter rendering/filter/export mapping before production wiring.
## Evidence
- Targeted Vitest: 1 file / 4 tests passed.
- `pnpm typecheck`: passed (`vue-tsc --noEmit`).
- Grid boundary adoption: `ModelsList` now uses `KsDataGrid`; KBX registry columns are converted by `toUiGridColumns` and selected rows use the explicit `Model.modelId` contract.
- Targeted adapter Vitest: 1 file / 3 tests passed.
- Full frontend regression: 57 files / 150 tests passed, `pnpm typecheck` passed, and `pnpm build` passed. The known >500 kB chunk warning remains; no performance gate pass is claimed.
- Evidence: `evidence/V13-FE-023/models-grid-port_20260813.log`.
- `ShadowRunList` now uses the same provider-neutral grid boundary; row navigation is explicitly backed by `ShadowRun.runId`.
- Full frontend regression after this change: 58 files / 153 tests passed, typecheck passed, build passed. The known >500 kB chunk warning remains.
- Evidence: `evidence/V13-FE-023/shadow-run-grid-port_20260813.log`.
- Dead-code cleanup: removed unused `useRoute/route` bindings from both migrated list screens; retained the adapter export for compatibility because external consumers were not verified.
- Cleanup evidence: `evidence/V13-FE-023/grid-boundary-cleanup_20260813.log`.
## Remaining acceptance evidence
Status cell rendering, label-based filtering/export, visual/AT/browser evidence, server query mapping, and feature-level canonical parity remain outstanding.
@@ -0,0 +1,27 @@
# V13-FE-023 — Server-side grid contract slice note
- **Requirement:** REQ-FE-GRID
- **API/UI/Test:** UI-GRID-01 / T-FE-GRID-01
- **Source:** v60 server-side grid boundary; current `DataGridShell`, `KsDataGrid`, `KsPaginator`, and `CrudPageResult` contracts.
- **Assumption:** Page metadata is authoritative input from the query/read model; the UI emits a request intent and does not fetch or mutate server state.
- **Unknown:** Sort/filter event wiring and column-state persistence are not connected to an active production screen through this component.
- **Decision Required:** FE/BE must approve a per-resource query contract before adding server sort/filter event mapping.
## Applied boundary
- Added optional `page`, `pageSize`, and `total` metadata to `DataGridShell`.
- Rendered the shared paginator only when all page metadata is explicitly supplied.
- Forwarded page changes as an event; the component does not own fetching, caching, or server state.
- Preserved existing client-row callers without pagination metadata.
## Evidence
```text
pnpm test -- src/shared/ui/tests/DataGridShell.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
No server API, sort/filter event, column-state persistence, visual, AT, or browser E2E evidence is claimed.
@@ -0,0 +1,29 @@
# V13-FE-024 — Permission route metadata slice note
- **Requirement:** REQ-FE-AUTHZ
- **API/UI/Test:** UI-AUTH-01 / T-FE-AUTH-01
- **Source:** v60 fail-closed permission boundary; current `frontend/src/features/{models,shadow-run}/registry.ts` declarations.
- **Assumption:** `model.read` is the only permission identifier currently evidenced by the active feature registries.
- **Unknown:** Authenticated permission hydration and the complete route-to-permission catalog are not yet connected to the active router.
- **Decision Required:** Security/FE owners must approve the auth permission source and route visibility behavior before enabling a global navigation guard.
## Applied boundary
- Added `permissions: ['model.read']` to the four active ModelOps routes whose feature registries already declare that permission.
- Added a pure `canAccessRoute` policy that fails closed for declared permissions and does not perform authentication or network access.
- Kept API authorization as the final authority; this Slice does not claim server security or hide routes globally.
- Did not invent permissions for financial, operations, internal, or portfolio routes.
## Evidence
```text
pnpm test -- src/shared/auth/tests/routeAccess.spec.ts
PASS: 1 file / 3 tests (2026-08-12)
The third test verifies all four active ModelOps route permissions match their feature registries.
pnpm typecheck
PASS (2026-08-12)
```
Status remains IN_PROGRESS until the permission source and global route policy are approved.
@@ -0,0 +1,26 @@
# V13-FE-028 — Reconciliation API contract boundary
## Source / Assumption / Unknown / Decision Required
- Source: current `PortfolioReconciliation/Endpoints.cs` response DTOs and v60 runtime-validation/API boundary guidance.
- Assumption: FE treats the current holdings and mismatch responses as read contracts and validates them at the HTTP boundary.
- Unknown: approved route permissions, pagination/filter semantics, response version/as-of metadata, and correction command contract.
- Decision Required: approve the production API/permission contract before adding route registration, TanStack Query wiring, or correction mutations.
## Implemented
- Added Zod schemas and typed API adapters for `GET /reconciliation/holdings` and `GET /reconciliation/mismatches`.
- API adapters parse response payloads at runtime; no response is copied into Pinia.
- Added TanStack Query keys/hooks with explicit mismatch date-window cache identity and bounded retry.
- No route, query cache, correction mutation, or permission claim was added while backend authority remains unresolved.
## Evidence
- `pnpm test -- src/features/reconciliation/tests/schema.spec.ts`: 1 file / 3 tests passed.
- `pnpm test -- src/features/reconciliation/tests/queries.spec.ts`: 1 file / 2 tests passed.
- `pnpm typecheck`: passed.
- `git diff --check`: passed.
## Outstanding
TanStack Query integration, route permission metadata, server pagination/version/as-of contract, Playwright/AT evidence, and correction/maker-checker API remain outstanding. This Slice is `IN_PROGRESS`.
@@ -0,0 +1,37 @@
# V13-FE-033 — KBX ProblemDetails adoption Slice note
## Scope
- **WBS:** V13-FE-033
- **Requirement/API/Test:** REQ-FE-ERROR / Cross / T-FE-ERROR-01
- **Goal:** KBX v60 problem discriminator and recovery metadata를 현재 ASP.NET ProblemDetails + Zod 경계에 제한적으로 차용한다.
- **Status:** IN_PROGRESS
## Source / Assumption / Unknown / Decision Required
- **Source:** `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening/contracts/problems/kbx.problem.schema.json`, `packages/kbx-ui`의 오류 계약, 현재 `frontend/src/shared/api/problem.ts``client.ts`.
- **Assumption:** 기존 `status` HTTP 필드는 유지한다. KBX `type`은 도메인 오류 분류를 보강하는 discriminator로만 사용한다.
- **Unknown:** BE가 실제로 `correlationId`, `retryable`, `validationErrors`, `actions`를 어떤 JSON naming policy로 발행하는지와 모든 endpoint의 응답 일관성.
- **Decision Required:** BE/Architect가 공통 ProblemDetails payload의 필드명과 401/403/409/422/429/503별 표준 메시지·재시도 정책을 승인해야 한다.
## Adopted
- Discriminator: `validation`, `business-rule`, `conflict`, `permission`, `not-found`, `integration`, `system`.
- Recovery metadata: `correlationId`, `code`, `retryable`, `currentVersion`, `actions`, structured validation errors.
- Pure FE interaction mapping: `UNAUTHORIZED`, `FORBIDDEN`, `CONFLICT`, `VALIDATION`, `RETRYABLE`, `ERROR`.
## Explicitly not adopted
- OMS lifecycle/shipment status values, OMS routes, database migrations, generated clients, PrimeVue/AG Grid imports, automatic retry execution, or KIS/order submission behavior.
- No server-side error contract was invented; current implementation accepts the proposed fields but does not claim BE parity.
## Evidence
- `pnpm exec vitest run src/shared/api/tests/problem.spec.ts`: 1 file, 9 tests passed.
- `pnpm typecheck`: passed (`vue-tsc --noEmit`).
## Remaining acceptance evidence
- BE contract fixture or live endpoint evidence for all six interaction classes.
- API Architect approval of field naming, redaction, correlation propagation, and retry ownership.
- Browser/component evidence that each standard state renders the approved action without duplicate submission.
@@ -0,0 +1,19 @@
# V13-FE-033 — KBX ProblemDetails BE/OpenAPI adoption
## Scope
- **Source:** KBX v60 `docs/api-contract-governance-v14.md` and `contracts/problems/kbx.problem.schema.json`.
- **Adopted:** OpenAPI operation metadata documenting the supported ProblemDetails discriminator family and correlation header.
- **Not adopted:** generated API catalogs, route/permission invention, automatic retry, endpoint behavior changes, database changes, or KIS/order paths.
## Source / Assumption / Unknown / Decision Required
- **Source:** existing `ProblemDetailsOperationFilter`, ASP.NET Core `AddProblemDetails()`, and `CorrelationIdMiddleware`.
- **Assumption:** `X-Correlation-Id` is the existing host response/request correlation contract.
- **Unknown:** endpoint-specific retryability and business error codes are not uniformly declared by current handlers.
- **Decision Required:** API Architect must approve the extension names and whether a generated OpenAPI contract will become the release baseline.
## Evidence
- Host build/test verification is required after the OpenAPI package compatibility check.
- No endpoint or runtime error behavior was changed by this adoption.
@@ -0,0 +1,25 @@
# V13-FE-034 — Idempotency retry contract
## Source / Assumption / Unknown / Decision Required
- Source: `frontend/src/shared/commands/idempotency.ts`, `frontend/src/shared/crud/useOptimisticCommand.ts`, and their characterization tests.
- Assumption: one `createRequest()` represents one user intent; every retry reuses that immutable request envelope.
- Unknown: each production command's server-side deduplication store, response replay contract, retention, and endpoint coverage.
- Decision Required: BE/QA approval of per-command idempotency persistence and duplicate-side-effect evidence.
## Existing contract verified
- UUID key is generated once per intent.
- `run()` sends the same `Idempotency-Key` on repeated execution.
- Optional `If-Match` is forwarded for optimistic concurrency.
- 409/412 sets the conflict state and pending state is cleared.
- Concurrent execution is rejected while a command is pending.
## Evidence
- `pnpm test -- src/shared/crud/tests/useOptimisticCommand.spec.ts`: 1 file / 2 tests passed in the FE regression run.
- Full FE regression: 49 files / 126 tests passed; typecheck passed.
## Outstanding
This proves the client boundary only. Server-side deduplication, replayed response equivalence, retention, and per-endpoint integration evidence remain outstanding. This Slice is `IN_PROGRESS`.
@@ -0,0 +1,27 @@
# V13-FE-035 — Freshness boundary slice note
- **Requirement:** REQ-FE-FRESH
- **API/UI/Test:** UI-ALL / T-FE-FRESH-01
- **Source:** v60 freshness/version guidance; current `frontend/src/shared/status/DataFreshnessBadge.vue` and centralized financial formatter.
- **Assumption:** The caller owns the approved current instant and passes it as `now`; the component is presentation-only.
- **Unknown:** No active production screen currently consumes this badge with a server-provided `published_at`/revision contract.
- **Decision Required:** FE/Data/QA must approve the per-resource freshness window and the authoritative server timestamp before production adoption.
## Applied boundary
- Removed direct machine-clock access from `DataFreshnessBadge`.
- Added required `now` input so identical `asOf + now + threshold` inputs produce identical state.
- Reused centralized `formatAsOf` for deterministic KST display formatting.
- Characterized fresh/stale boundary behavior at and after the configured threshold.
## Evidence
```text
pnpm test -- src/shared/status/tests/DataFreshnessBadge.spec.ts
PASS: 1 file / 2 tests (2026-08-12)
pnpm typecheck
PASS (2026-08-12)
```
This is a contract slice only; no production freshness policy, API integration, revision, or visual evidence is claimed.
@@ -0,0 +1,21 @@
# V13-FE-035 — KBX freshness indicator adoption
## Scope
- **Source:** KBX v60 `KbxFreshnessIndicator.vue` and freshness contract principles.
- **Adopted:** explicit caller-supplied clock, optional source/revision metadata, stale label, and opt-in refresh command with accessible naming.
- **Not adopted:** system-clock reads, invented freshness windows, automatic refresh loops, server `published_at`/revision persistence, or provider APIs.
## Source / Assumption / Unknown / Decision Required
- **Source:** current `DataFreshnessBadge.vue`, centralized `formatAsOf`, and KBX freshness indicator.
- **Assumption:** `staleAfterMinutes` remains an approved caller input; the shared component does not choose a domain threshold.
- **Unknown:** production mapping from PIT `published_at`/revision and approved source display names.
- **Decision Required:** Data/UX/QA must approve freshness windows, source redaction, revision semantics, and refresh ownership.
## Evidence
- Targeted Vitest: 3 tests passed.
- `pnpm typecheck`: required after this change.
Visual, browser, PIT integration, and production evidence remain outstanding.
@@ -0,0 +1,20 @@
# V13-FE-036 — T12 Work Queue screen template
## Source / Assumption / Unknown / Decision Required
- Source: v60 T12 queue contract and existing `WorkQueuePage.vue` shared screen port.
- Assumption: queue and exception summary are server-owned operational data; state boundary controls presentation only.
- Unknown: queue-depth source, exception-count definition, permissions, and production JobRun API.
- Decision Required: Ops/SRE approval of queue metrics, ownership, retry semantics, and runbook.
## Implemented
- Propagates evidence version.
- Suppresses queue/exception content in blocked or terminal states.
- Preserves shared retry and quick-action/work-summary slots.
- No blind retry, schedule, mutation, or automatic order/KIS path added.
## Evidence
- Targeted test: 1 file / 2 tests passed.
- Full FE regression, visual/AT/Playwright, queue source, and operational approval remain outstanding.
@@ -0,0 +1,19 @@
# V13-FE-037 — T11 Fast Entry Grid screen template
## Source / Assumption / Unknown / Decision Required
- Source: v60 T11 screen contract and current `FastEntryGridPage.vue` shared screen port.
- Assumption: grid and validation summary are presentation slots; cell validation, paste audit, and idempotent commit are feature/API responsibilities.
- Unknown: approved bulk command schema, maximum paste size, cell-level error contract, audit payload, and permission mapping.
- Decision Required: FE/BE/QA approval of bulk commit, idempotency, paste audit, and partial-result semantics.
## Implemented
- Preserves version metadata, grid, validation summary, total, and actions slots.
- Suppresses editable grid content in blocked/terminal states and retains shared retry.
- No silent bulk overwrite, unbounded paste, or mutation API was introduced.
## Evidence
- Targeted test: 1 file / 2 tests passed.
- Cell-level validation, paste audit, idempotency API, visual/AT/Playwright, and approval evidence remain outstanding.
@@ -0,0 +1,36 @@
# v60 Reference Integration Index
## Scope
Canonical reference: `docs/Design/kbx-foundation-v60-status-canonical-contract-hardening`.
This index records what was borrowed into the current domain, what remains intentionally deferred, and the evidence that supports each disposition. The reference package is not the current domain source of truth.
## Adopted patterns
| Area | Adopted element | Current artifact | Evidence |
|---|---|---|---|
| FE UI | Provider-neutral UI adapter and shared screen/state boundaries | `frontend/src/shared/ui/adapter`; `frontend/src/shared/ui/screen-types` | FE regression `53 files / 135 tests`, typecheck passed |
| FE validation | Runtime request/form validation and ProblemDetails mapping | `frontend/src/shared/crud/formValidation.ts`; `frontend/src/shared/api` | Form and full FE tests |
| FE vendor boundary | Feature code cannot import PrimeVue/AG Grid directly | `frontend/src/shared/ui/adapter/tests/vendorBoundary.spec.ts` | Vendor boundary test `1/1` passed |
| API generation | Runtime Swashbuckle generation with deterministic schema IDs | `src/KArtSell.Host/Program.cs` | Host Release build; real artifact generation |
| API errors | ProblemDetails response family documented without inventing `422` | `src/KArtSell.Host/OpenApi/ProblemDetailsOperationFilter.cs` | Generated responses `200/400/401/403/404/409/500` |
| Reliability | JobRun repository-to-baseline column drift check | `tests/KArtSell.ArchitectureTests/RepositoryRulesTests.cs` | Architecture tests `17/17` passed |
| Safety | KIS/Trade endpoints remain unregistered while hard-off | `TradeEndpoints.cs`; architecture guard | KIS hard-off evidence and architecture test |
| CI governance | Approved baseline only; candidate upload, no auto-promotion | `.gitea/workflows/openapi-gate.yml` | PyYAML parse passed; fail-closed baseline path |
## Intentionally deferred
- v60 API operation catalog as a current baseline: explicit audit found live IDs `31`, reference IDs `66`, intersection `0`.
- `docs/api/openapi.json` baseline: requires API Architect approval.
- Reconciliation route authorization and correction mutation: approved permission/maker-checker contract absent.
- JobRun fresh/upgrade/re-run/failure DB rehearsal: PostgreSQL was unavailable; no completion claim.
- FE global router guard: approved auth hydration and unauthorized screen contract absent.
- KIS order/status/cancel/settlement activation: separately approved release required; capability remains OFF.
## Governance invariants
- Reference code is borrowed only through current repository ports and contracts.
- No guessed route, permission, threshold, migration, or production capability is introduced.
- Evidence records actual commands and results; unavailable external dependencies remain unresolved.
- WBS status is not promoted to `COMPLETED` without its acceptance evidence.
+1 -1
View File
@@ -14,7 +14,7 @@
## Safety invariants
1. Allowed provider values are `primevue` and `native`; any other value fails closed at startup.
2. No feature source may import PrimeVue or AG Grid. Vendor imports are confined to `frontend/src/shared/ui/adapter/primevue/`.
2. Feature source remains vendor-free. Existing application-owned components under `frontend/src/shared/ui/components/` may use the selected vendor directly to preserve full component functionality. New vendor-neutral components may use `frontend/src/shared/ui/adapter/`; the direct-component ownership harness prevents accidental adapter regression.
3. Changing a provider means building and deploying a new artifact. Do not mutate the active application's global provider.
4. Rollback restores the last approved artifact and its recorded provider value. It does not alter data, decisions, evidence, or audit records.