From d749bf5b2829b3127d6b8f6129edd262db37348f Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Thu, 27 Aug 2026 11:36:18 +0300 Subject: [PATCH] docs: record ledger entry type label evidence --- development/completion-evidence.md | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/development/completion-evidence.md b/development/completion-evidence.md index 69b06b6..11e73bf 100644 --- a/development/completion-evidence.md +++ b/development/completion-evidence.md @@ -529,3 +529,71 @@ Change Owner дополнительно удалены children-only aliases в `type TestWrapperProps = PropsWithChildren` и чистые barrel imports ради последующего re-export; обе convention-проверки подтверждены пустыми `rg` результатами. Generated OpenAPI source остался вне manual migration. + +## 2026-08-27-ledger-entry-type-label + +**Change:** ledger-entry-type-label (schema `wealth-ledger-sdd`) +**Archive path:** `specs/openspec/changes/archive/2026-08-27-ledger-entry-type-label` +**Specs sync:** дельта `brokerage-account-ledger` — «Full ledger presents +compact rows» слита в main spec (1 модифицированный Requirement с новыми +scenarios «Отображение купона», «Отображение дивиденда» и «Подпись типа не +дублируется»); post-archive strict validation — `20 passed, 0 failed` для main +specs и `38 passed, 0 failed` для archived changes. + +### Delivery Map + +| Area | Status | Outcome | +| --- | --- | --- | +| frontend | affected | `LedgerEntryRow` показывает подпись типа события вместо цветной подписи направления: для income по upstream `type` — «Купон» (`OPERATION_TYPE_COUPON`) или «Дивиденд» (остальные income-типы), иначе — подпись категории; категория убрана из вторичной метадаты (дата · инструмент); знак «+»/«−» и семантический цвет остаются носителями направления; без денежного движения — «Без движения денег»; добавлены i18n-ключи `ledger.entryLabel.income.*`, удалены неиспользуемые `ledger.direction.*`; тесты обновлены (сценарии «Купон»/«Дивиденд»/«Комиссия») | +| backend | N/A | API contract, маппинг категорий и финансовые расчёты не менялись; `category` и upstream `type` уже были в контракте | +| specs | affected | Approved Proposal, Delta Specs, Design и Tasks заархивированы; delta синхронизирована в main spec | +| docs | affected | as-built `features/brokerage-account-ledger.md` описывает подпись типа события, знак и цвет как носители направления, отсутствие дублирования категории во вторичной метадате | + +### Delivery commits + +| Repo | Commit | Subject | +| --- | --- | --- | +| frontend | `d53ce50e2842e8d69a709b92417888ba851774b4` | feat(broker-operation): show operation type label in ledger entries | +| specs (archive) | `37c0133e8baf15959a0c38e45e7b7ac320b8084f` | docs(specs): archive ledger-entry-type-label change and sync main spec | +| docs (as-built) | `2abb5912b2db23d4984ca3b99578310596d66555` | docs(brokerage-account-ledger): describe operation type label and no category duplication | +| docs (evidence) | current evidence commit | docs: record ledger entry type label evidence | + +### Verification + +| Command (repo) | Наблюдённый результат | +| --- | --- | +| `npm ci` (frontend, Node 22) | pass; 419 packages from offline cache, 0 vulnerabilities | +| `npm run verify` (frontend) | pass (exit 0); strict TypeScript, Biome, coverage (`21` files / tests зелёные), Knip, dependency-cruiser и production build прошли без ошибок | +| `npm ci` (docs) | pass | +| `npm run verify` (docs) | pass (exit 0); markdownlint `38` files, `0` issues, `git diff --check` clean | +| `openspec validate ledger-entry-type-label --type change --strict --store wealth-ledger-specs` (specs, pre-archive) | pass; change valid | +| `openspec validate --specs --strict --store wealth-ledger-specs` (specs, pre/post-archive) | pass; `20 passed, 0 failed` | +| `openspec archive ledger-entry-type-label --store wealth-ledger-specs --yes` (specs) | pass; Task status Complete, main spec `brokerage-account-ledger` обновлён (`~ 1 modified`), archived as `2026-08-27-ledger-entry-type-label` | +| `openspec validate --archived --strict --store wealth-ledger-specs` (specs, post-archive) | pass; `38 passed, 0 failed` | +| `git diff --check` (frontend/docs/specs) | pass (clean) | + +Environment note: `specs/scripts/verify-workspace-change.sh` and +`verify-openspec-version.sh` отсутствуют в данном checkout, поэтому +workspace-verify выполнялся native OpenSpec validation (`openspec validate +--change --strict --tasks`-эквивалент через `open spec validate --type change +--strict`) + canonical gates каждого affected repo (frontend/docs) по одному +разу; `openspec schema validate wealth-ledger-sdd` недоступен в CLI 1.10.0 +(только `spec-driven`), что не блокирует archive — команда archive сама +выполнила strict-валидацию и синхронизацию. Git-repository созданы без +remote, поэтому push не выполнялся (некуда пушить). + +Все Tasks были завершены до archive. Semantic verification подтвердила каждый +delta Requirement: подпись типа по `category`+`type` (income → «Купон» или +«Дивиденд», иначе категория), отсутствие дублирования подписи во вторичной +метадате, знак и цвет как носители направления, нейтральная запись без +движения денег без цены/количества, и обзор счёта (пять последних записей) +разделяет ту же семантику через общий `LedgerEntryRow`. + +### Independent read-only review + +Verdict: **PASS**. Critical findings — `0`, Important findings — `0`, Minor +findings — `0`. Изменение чисто презентационное (текстовая подпись строки + +i18n), backend/API contract, денежные расчёты, безопасность и данные не +затрагиваются; знак «+»/«−` сохраняет направление независимо от цвета +(accessibility); конфликтов, race conditions, log noise, non-determinism, +DEBUG/TODO/console и deprecated API не внесено.