Files
docs/development/completion-evidence.md
T

28 KiB
Raw Blame History

Completion Evidence

Фактические записи о поставке завершённых changes: Delivery Map, archive path, delivery commits, точные verification commands с наблюдёнными результатами и итог independent read-only review. Записи добавляются после archive и являются неизменяемой историей поставки.

2026-08-26-harden-openspec-sdd-agent-resilience

Change: harden-openspec-sdd-agent-resilience (schema wealth-ledger-sdd v3) Archive path: specs/openspec/changes/archive/2026-08-26-harden-openspec-sdd-agent-resilience Specs sync: три новых и три изменённых Requirements слиты в openspec-authority-and-lifecycle и multi-repository-delivery; post-archive strict validation — 20 main specs и 32 archived changes без ошибок.

Delivery Map

Area Status Outcome
frontend N/A Client behavior, implementation и local gate не менялись
backend N/A API behavior, implementation и local gate не менялись
specs affected Schema v3, operation-neutral template, failure taxonomy, controlled fixtures, Delta Specs и archive/sync поставлены
docs affected Шесть reports сохранены одним snapshot, claims triaged, lifecycle/ADR/registry синхронизированы

Delivery commits

Repo Commit Subject
specs (implementation) 8462a3ba75d6dda491b9221699357c58d8f8e3cc feat: harden OpenSpec agent resilience
specs (archive/sync) 779a1e1305f8c209a4f98fae7f87718e48d61b37 docs(specs): archive OpenSpec resilience change
docs (as-built) d80e2e32b2ebadcd93a53105e1ac337fe2c1f4f6 docs: record second OpenSpec schema review
docs (evidence) current evidence commit docs: record OpenSpec resilience evidence

Verification

Command (repo) Наблюдённый результат
bash scripts/verify-openspec-planning.test.sh (specs, RED before implementation) failed as expected: прежний verifier не выдавал artifact-validation, schema оставалась v2
bash scripts/verify-openspec-planning.sh definitely-missing-change (specs, review reproduction) до fix: exit 1 artifact-validation; после fix: exit 2 Planning invocation failed
bash scripts/verify-openspec-planning.test.sh (specs) pass; positive stage cases, controlled ADDED/MODIFIED/REMOVED/RENAMED, artifact/invocation/environment failures, N/A и instruction contracts
bash scripts/verify-openspec-authority.test.sh (specs) pass; controlled-invalid authority cases отклонены по ожидаемым причинам
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH bash specs/scripts/verify-workspace-change.sh harden-openspec-sdd-agent-resilience (workspace, pre-archive) pass; specs/docs affected, frontend/backend/runtime-openapi N/A; schema/change valid, 20/20 main specs, docs 37 Markdown files / 0 issues
openspec archive harden-openspec-sdd-agent-resilience --yes --store wealth-ledger-specs (specs) pass; archived as 2026-08-26-harden-openspec-sdd-agent-resilience; +3/~3 Requirements synced
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) pass; 20 passed, 0 failed
openspec validate --archived --strict --store wealth-ledger-specs (specs, post-archive) pass; 32 passed, 0 failed
openspec schema validate wealth-ledger-sdd --verbose (specs, post-archive) pass; dependency graph and templates valid
bash scripts/verify-openspec-authority.sh (specs, post-archive) pass; OpenSpec CLI 1.10.0, authority wealth-ledger-specs
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (docs) pass; Node 22.21.0, 37 Markdown files, 0 issues
git diff --check (specs/docs) pass

Schema instruction source уменьшился с 348 строк / 22,215 bytes до 209 строк / 14,197 bytes без числового blocking threshold. Все 12 Tasks завершены до archive; semantic verification сопоставила delivery со всеми 6 Requirements и 20 Scenarios.

Independent read-only review

Verdict: PASS. Итог после remediation review findings: Critical — 0, Important — 0, Minor — 0. Reviewer подтвердил schema v3 и Critical Rules, operation-neutral template и four-operation fixture, три failure category, structural/semantic границу N/A, native contextFiles + local AGENTS.md, cascade/mechanical assertions и snapshot/registry/as-built consistency без scope creep.

2026-08-25-align-domain-model-and-money-contract

Change: align-domain-model-and-money-contract (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-25-align-domain-model-and-money-contract Specs sync: дельты brokerage-account-upcoming-events, brokerage-accounts, portfolio-view и project-documentation слиты в main specs; openspec validate --specs --strict --store wealth-ledger-specs — 20 passed, 0 failed.

Delivery Map

Area Status Outcome
backend affected UpcomingEventDto заменил event-level amount/currency на nullable projectedAmount Money; mapping coupon/dividend/maturity возвращает Money, offer и неизвестная валюта возвращают null; focused tests покрывают новый contract
frontend affected OpenAPI snapshot/generated types синхронизированы; full events page, account overview recent events, hook tests и fixtures consume projectedAmount напрямую и сохраняют «Сумма неизвестна» для null
specs affected Delta specs синхронизированы в main specs, change заархивирован
docs affected Глоссарий и feature/system docs закрепляют Money, current-connection account accessibility, Portfolio Snapshot, Currency Instrument Position, Cash Balance и Future Cash Event terminology

Delivery commits

Repo Commit Subject
backend f1df1044623862770ecb40fd735e1aea08dc2a68 feat: use money for upcoming event projections
frontend 1fd9a3a861a8b915b6c64861a018db39e2598a83 feat: consume money projected event amounts
specs 039b72eed38b07e89e2f0234e7c12c202b6cf262 docs(specs): archive domain money contract change
docs 68d975befda90c198a0287bb8d43ac5d6e386eb5 docs: align investment domain terminology

Verification

Command (repo) Наблюдённый результат
npm test -- tbank/upcoming-events.service.spec.ts --runInBand (backend, RED) failed as expected before implementation because response lacked projectedAmount; later failed as expected for omitted currency until null behavior was implemented
npm test -- tbank/upcoming-events.service.spec.ts --runInBand (backend) pass; 1 suite / 7 tests
npm run lint && npm run typecheck:app && npm run typecheck:test && npm test -- --runInBand (backend) pass; Jest 22 suites / 71 tests
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (backend) pass; runtime/hygiene/lint/typecheck/Jest/build passed; Jest 22 suites / 71 tests
VITE_API_BASE_URL=http://localhost:3001 npm run openapi:sync (frontend) pass; updated only OpenAPI snapshot and generated types for UpcomingEventDto.projectedAmount
npm run test:run -- brokerage-event AccountEventsPage AccountPage.vm (frontend, RED) failed as expected before UI change because renderer still read old amount/currency fields
npm run test:run -- brokerage-event AccountEventsPage AccountPage.vm (frontend) pass; 3 files / 6 tests
npm run openapi:check && npm run typecheck (frontend) pass
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (frontend) pass; 21 test files / 67 tests, build and bundle budget passed
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (docs) pass; Node 22.21.0, markdownlint 35 files, 0 issues
bash specs/scripts/verify-runtime-openapi.sh (workspace) pass; runtime SHA-256 = snapshot SHA-256 = aa4db3d4d3bb5e6e4e8b6bf4641a2024d00c827ee612e09709c1b6fda75d3e50
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH bash specs/scripts/verify-workspace-change.sh align-domain-model-and-money-contract (workspace, pre-archive) pass; Delivery Map verified frontend/backend/specs/docs=affected, runtime-openapi=required; all gates green
openspec archive align-domain-model-and-money-contract --yes --store wealth-ledger-specs (specs) pass; archived as 2026-08-25-align-domain-model-and-money-contract, 8 modified requirements applied
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) pass; 20 passed, 0 failed
bash scripts/verify-openspec-authority.sh (specs, post-archive) pass; OpenSpec CLI 1.10.0, authority wealth-ledger-specs

Independent read-only review

Verdict: PASS. Critical и Important findings отсутствовали. Reviewer подтвердил, что breaking contract ограничен Future Cash Event projected amount, backend не создаёт Money без валюты, frontend не читает removed event.amount/event.currency, docs не стали параллельным SDD artifact, а routes, storage, supported account policy, cache TTLs, sorting и upstream sources не менялись.

2026-08-24-add-instrument-logos

Change: add-instrument-logos (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-24-add-instrument-logos Specs sync: дельта portfolio-view слита в main spec (openspec/specs/portfolio-view/spec.md); повторная сверка блоков requirements подтвердила идентичность, openspec validate --specs --strict --store wealth-ledger-specs — 20 passed, 0 failed.

Delivery Map

Area Status Outcome
backend affected logoName из бренда upstream через instrument lookup и 24h metadata cache в nullable поле Portfolio Position DTO; OpenAPI артефакт перегенерирован
frontend affected generated types из snapshot; хелпер URL логотипа x160; секция STOCK одноколоночная с Avatar-логотипом (фолбэк-буква) и доходностью со знаком без подписи; тесты страницы обновлены
specs affected delta portfolio-view синхронизирована в main spec, change заархивирован
docs affected глоссарий: термин «Instrument Logo»; as-built features/portfolio-view.md: поле контракта и новый вид секции акций

Delivery commits

Repo Commit Subject
backend 5375e55 feat: expose instrument brand logo name in portfolio positions
frontend a6d3051 feat: render stock logos with signed returns on account page
specs 70a200e docs(specs): archive add-instrument-logos
docs 30e5699 docs: document instrument logos in portfolio

Verification

Command (repo) Наблюдённый результат
npm ci && npm run verify (backend) pass; Jest 19 suites / 59 tests, prisma generate + nest build без ошибок (прогон повторён после исправления извлечения brand.logoName)
npm ci && npm run verify (frontend) pass; runtime/hygiene/typecheck/lint/vitest/knip/deps/build/bundle-budget без ошибок
bash specs/scripts/verify-runtime-openapi.sh (workspace) pass; runtime SHA-256 = snapshot SHA-256 = db6133d0ad89b02851a6e2df9f23099e243e6bab72bc4e15ffe5317017bcf454
npx vitest run src/entities/portfolio/model/display.test.ts src/pages/account/ui/AccountPage.test.tsx (frontend) pass; 12 тестов (позже 12 с учётом zero-return кейса в том же файле — финальный прогон страницы 9/9)
bash specs/scripts/verify-workspace-change.sh add-instrument-logos (workspace) pass; Delivery Map verified frontend/backend/specs/docs=affected, runtime-openapi=required; все gates зелёные, «Workspace verification passed»
openspec validate --specs --strict --store wealth-ledger-specs (specs) pass; 20 passed, 0 failed

Independent read-only review

Verdict: PASS. Critical и Important findings отсутствовали. Minor findings устранены до archive: добавлен тест нулевой доходности акций (0 ₽ без знака) в AccountPage.test.tsx; baseline lazy-route бандла подтверждённо перегенерирован скриптом npm run bundle:baseline после подключения Mantine Avatar (17018 → 21868 bytes для src/pages/account/index.ts). В ходе реализации найдено и исправлено расхождение с upstream: gRPC отдаёт имя файла логотипа вложенно в brand.logo_name, извлечение выполняется в сервисе портфеля.

2026-08-25-extend-instrument-logo-to-bonds

Change: extend-instrument-logo-to-bonds (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-25-extend-instrument-logo-to-bonds Specs sync: дельта portfolio-view слита в main spec; старое требование «Ошибки и состояния Portfolio на клиенте» удалено, добавлены два фокусированных: «Состояния и ошибки Portfolio на клиенте» и «Представление карточек позиций на клиенте»; openspec validate --specs --store wealth-ledger-specs — 20 passed, 0 failed.

Delivery Map

Area Status Outcome
frontend affected Презентационный флаг stock переименован в wide; секции STOCK и BOND передают wide; карточки облигаций получили логотип бренда, фолбэк первой буквы, знаковый доход без подписи, одноколоночную раскладку; регрессионный тест секции иных типов добавлен
backend N/A logoName уже потоковый для всех типов позиций; правки не требовались
specs affected Delta portfolio-view синхронизирована в main spec, change заархивирован
docs affected features/portfolio-view.md обновлён: облигации в едином стиле с акциями

Delivery commits

Repo Commit Subject
frontend c04025a feat(portfolio): extend instrument logo rendering to bonds
backend — N/A
specs bfaa04b feat(portfolio-view): sync delta spec and archive change
docs 2e9e403 docs(portfolio-view): update as-built for bond parity

Verification

Command (repo) Наблюдённый результат
npm run test:run (frontend) pass; 17 suites, 61 tests, 0 failures
npm ci && npm run verify (frontend) pass; runtime/hygiene/typecheck/lint/vitest/knip/deps/build/bundle-budget без ошибок
bash specs/scripts/verify-workspace-change.sh extend-instrument-logo-to-bonds (workspace) pass; Delivery Map verified frontend/backend=N/A/specs/docs=affected; все gates зелёные, «Workspace verification passed»
openspec validate --specs --store wealth-ledger-specs (specs) pass; 20 passed, 0 failed

Independent read-only review

Verdict: PASS. Critical findings отсутствовали. 2 WARNING устранены до archive: (1) изменение ассерта в stale-тесте объяснено осознанным изменением поведения облигаций согласно дельте; (2) хрупкий глобальный скан стилей усилен до toHaveLength(1) вместо some(). 2 SUGGESTION приняты без действий (существующий паттерн хардкода URL в тестах, именование тестов).

2026-08-25-codify-frontend-view-model-boundary

Change: codify-frontend-view-model-boundary (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-25-codify-frontend-view-model-boundary Specs sync: skip_specs: true; change закрепляет frontend/docs/process границы View/ViewModel без изменения runtime product requirements.

Delivery Map

Area Status Outcome
frontend affected AccountPage разделён на thin container, ViewModel и props-only view; VM владеет data/auth/router/application hooks и derived presentation model; view оставлен только с useTranslation; крупные смысловые секции вынесены в небольшие presentation components; добавлены VM regression tests
backend N/A API и backend-поведение не менялись
specs affected OpenSpec change заархивирован после workspace verification
docs N/A As-built product docs не менялись; Completion Evidence добавлен отдельным финальным docs-коммитом

Delivery commits

Repo Commit Subject
frontend fff36f252aa1a7bb18042c8fc2d06262b687b0b1 refactor: enforce account page view model boundary
backend — N/A
specs 5cc42f30cab997a6d0889c124279d06d64fc8e07 docs(specs): archive frontend view model boundary change
docs current evidence commit docs: record frontend view model boundary evidence

Verification

Command (repo) Наблюдённый результат
npm run test:run -- src/pages/account/ui/AccountPage.test.tsx (frontend, baseline) pass; 1 файл, 12 тестов
npm run test:run -- src/pages/account/ui/AccountPage.test.tsx src/pages/account/ui/AccountPage.vm.test.tsx (frontend) pass; 2 файла, 15 тестов
npm run typecheck (frontend) pass
npm run lint (frontend) pass
npm run knip (frontend) pass
npm run deps (frontend) pass
npm ci && npm run verify (frontend, Node 22.21.0) pass; runtime/hygiene/typecheck/lint/vitest/knip/deps/build/bundle-budget без ошибок; 18 test files / 64 tests
openspec validate codify-frontend-view-model-boundary --type change --strict --store wealth-ledger-specs (specs) pass
bash specs/scripts/verify-workspace-change.sh codify-frontend-view-model-boundary (workspace, Node 22.21.0) pass; Delivery Map verified frontend/specs=affected, backend/docs/runtime-openapi=N/A
openspec validate --specs --strict --store wealth-ledger-specs (specs) pass; 20 passed, 0 failed
bash specs/scripts/verify-openspec-authority.sh (workspace) pass
git diff --check (frontend/specs) pass

Independent read-only review

Verdict: PASS. Critical и Important findings отсутствовали. Minor hygiene: удалены случайные .DS_Store файлы из specs до archive/commit.

2026-08-25-remove-frontend-hook-token-params

Change: remove-frontend-hook-token-params (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-25-remove-frontend-hook-token-params Specs sync: skip_specs: true; change закрывает audit-derived frontend architecture item без изменения observable product requirements.

Delivery Map

Area Status Outcome
frontend affected usePortfolio, useBrokerageAccounts, useBrokerageOperations и useBrokerageEvents больше не принимают accessToken; protected query gating централизован в shared useAuthenticatedQuery; page/app callers перестали читать auth state только ради token plumbing; добавлены regression tests
backend N/A API contract и backend behavior не менялись
specs affected OpenSpec change заархивирован как process/audit remediation без delta specs
docs N/A As-built product docs не менялись; Completion Evidence добавлен отдельным финальным docs-коммитом

Delivery commits

Repo Commit Subject
frontend 268acdf2e1057ed0f6c19384bfb6477aff773d1d refactor: centralize frontend auth query gating
backend — N/A
specs 6e2890f86f5316fdb821b043084461314eb8cf13 docs(specs): archive frontend auth query gating change
docs current evidence commit docs: record frontend auth query gating evidence

Verification

Command (repo) Наблюдённый результат
npm run test:run -- src/shared/api (frontend, RED baseline before implementation) failed as expected because ./authenticated-query did not exist
npm run test:run -- src/shared/api (frontend) pass; 2 files / 4 tests
npm run test:run -- src/entities/portfolio/api/usePortfolio.test.tsx src/entities/broker-operation/api/useBrokerageOperations.test.tsx src/entities/brokerage-account/api/useBrokerageAccounts.test.tsx src/entities/brokerage-event/api/useBrokerageEvents.test.tsx (frontend) pass; 4 files / 4 tests
npm run test:run -- src/pages/accounts src/pages/account src/pages/account-operations src/pages/account-events src/app/ui (frontend) pass; 6 files / 29 tests
npm run typecheck (frontend) pass
rg "usePortfolio\\([^\\n,]+,\\s*accessToken|useBrokerageAccounts\\(accessToken|useBrokerageOperations\\([^\\n]+accessToken|useBrokerageEvents\\([^\\n]+accessToken" frontend/src -n (workspace) no matches
bash specs/scripts/verify-workspace-change.sh remove-frontend-hook-token-params (workspace, pre-archive, Node 22.21.0) pass; Delivery Map verified frontend/specs=affected, backend/docs/runtime-openapi=N/A; frontend canonical verification passed
openspec archive remove-frontend-hook-token-params --skip-specs --yes --store wealth-ledger-specs (specs) pass; archived as 2026-08-25-remove-frontend-hook-token-params
npm run verify (frontend, post-archive, Node 22.21.0) pass; runtime/openapi/hygiene/typecheck/lint/vitest/knip/deps/build/bundle-budget без ошибок; 21 test files / 67 tests; initial JavaScript payload 510597 bytes
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) pass; 20 passed, 0 failed
bash scripts/verify-openspec-authority.sh (specs, post-archive) pass; OpenSpec CLI 1.10.0, authority wealth-ledger-specs

Independent read-only review

Verdict: PASS. Critical и Important findings отсутствовали; Minor findings отсутствовали. Reviewer подтвердил, что четыре targeted hooks и их callers больше не передают accessToken, auth gating централизован в shared API layer, query params/keys, staleTime и retry: false сохранены, а оставшееся использование accessToken в T-Bank connection ViewModel соответствует явному non-goal Design. Residual risk: full AuthProvider login/refresh/logout path enabling/disabling authenticated queries покрыт ограниченно; direct session snapshot transition через configureAuthClient покрыт regression test.

2026-08-25-codify-frontend-component-style

Change: codify-frontend-component-style (schema wealth-ledger-sdd) Archive path: specs/openspec/changes/archive/2026-08-25-codify-frontend-component-style Specs sync: дельта frontend-quality-guardrails слита в main spec; openspec validate --specs --strict --store wealth-ledger-specs — 20 passed, 0 failed.

Delivery Map

Area Status Outcome
frontend affected Authored React components мигрированы на const-valued FC declarations; props destructuring перенесён внутрь component body; лишние children-only props aliases удалены в пользу FC<PropsWithChildren>; чистые barrels используют direct re-exports; Biome gate блокирует проверяемую часть style
backend N/A Backend behavior, routes, DTOs, persistence и runtime OpenAPI contract не менялись
specs affected Delta frontend-quality-guardrails синхронизирована в main spec, change заархивирован
docs N/A As-built product docs не менялись; Completion Evidence добавлен отдельным финальным docs-коммитом

Delivery commits

Repo Commit Subject
frontend d10e1dd1827094e6e52768f0ccd2ea060aef95a1 chore: codify React component style
backend — N/A
specs 6898732dd8e933e9d6a587aef48ebe0eddaa0cf2 docs: archive React component style change
docs current evidence commit docs: record React component style evidence

Verification

Command (repo) Наблюдённый результат
npm run typecheck (frontend, baseline before structural edits) pass
npm run test:coverage (frontend, baseline before structural edits) pass; 21 test files / 67 tests
npm exec biome -- check .tmp-biome-style/compliant.tsx (frontend) pass; compliant representative sample accepted
npm exec biome -- check .tmp-biome-style/function-component.tsx (frontend) failed as expected with lint/nursery/useReactFunctionComponentDefinition
npm exec biome -- check .tmp-biome-style/default-export.tsx (frontend) failed as expected with lint/style/noDefaultExport
npm exec biome -- check .tmp-biome-style/export-order.tsx (frontend) failed as expected with lint/style/useExportsLast
rg "type \\w+Props = PropsWithChildren;" frontend/src -g '!shared/api/generated/**' (workspace) no matches
rg -n "^import \\{ .+ \\} from \\\"\\." frontend/src/**/index.ts (workspace) no matches
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (frontend) pass; runtime Node 22.21.0, OpenAPI/hygiene/typecheck/lint/vitest/knip/deps/build/bundle checks passed; 21 test files / 67 tests; initial JavaScript payload 510523 bytes
bash specs/scripts/verify-workspace-change.sh codify-frontend-component-style (workspace, Node 22.21.0) pass; Delivery Map verified frontend/specs=affected, backend/docs/runtime-openapi=N/A; main specs 20 passed, frontend canonical verification passed
openspec archive codify-frontend-component-style --yes --store wealth-ledger-specs (specs) pass; archived as 2026-08-25-codify-frontend-component-style
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) pass; 20 passed, 0 failed
git diff --check (frontend/specs) pass

Independent read-only review

Verdict: PASS. Critical и Important findings отсутствовали. Minor findings о mixed-language summary и stale wording устранены до archive. После уточнения Change Owner дополнительно удалены children-only aliases вида type TestWrapperProps = PropsWithChildren и чистые barrel imports ради последующего re-export; обе convention-проверки подтверждены пустыми rg результатами. Generated OpenAPI source остался вне manual migration.