Completion Evidence
Фактические записи о поставке завершённых changes: Delivery Map, archive path,
delivery commits, точные verification commands с наблюдёнными результатами и
итог independent read-only review. Записи добавляются после archive и являются
неизменяемой историей поставки.
2026-08-28-portfolio-income-analytics
Change: portfolio-income-analytics (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-28-portfolio-income-analytics
Specs sync: создан main spec brokerage-account-income-analytics; post-archive
strict validation подтвердил 23 passed, 0 failed.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
Account income route, applied-period UI, accessible per-currency trend, realized/forecast sections, overview summary и generated API consumers поставлены. |
| backend |
affected |
Complete Ledger range collection, date/decimal aggregation, income summary/analytics endpoints и additive Future Cash Events totals поставлены. |
| specs |
affected |
Approved change заархивирован, capability синхронизирована в canonical main specs. |
| docs |
affected |
As-built documentation описывает delivered income analytics flow, API boundaries, domain terms и system navigation. |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
93645682028947d3fbd212bc9929dd2195715c69 |
feat(income): add account income analytics |
| backend |
7ba4da0d1b49afcb0db3d1756254e5d5e04f0c35 |
feat(income): add account income analytics API |
| specs (archive/sync) |
9ac04cdb44cacdad51b60e157a0d8a2f98e3a16a |
docs(specs): archive income analytics change |
| docs (as-built) |
cc3b5b0ae5b0e9507e2267c47fb55ea969f2765b |
docs: add account income analytics |
| docs (evidence) |
current evidence commit |
docs: record income analytics completion evidence |
Verification
| Command (repo) |
Наблюдённый результат |
npm run verify (frontend) |
pass; typecheck, Biome, 22 Vitest files / 84 tests, Knip, dependency-cruiser и production build. |
npm run verify (backend) |
pass; lint, app/test typecheck, 25 Jest suites / 89 tests и build. |
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run test:openapi-contract (backend) |
pass; 1 suite / 1 test, runtime OpenAPI совпадает с committed frontend snapshot. |
npm run verify (docs) |
pass; markdownlint без issues и git diff --check clean. |
openspec schema validate wealth-ledger-sdd --verbose (specs) |
pass; schema structure, templates и dependency graph valid. |
openspec validate portfolio-income-analytics --type change --strict --store wealth-ledger-specs (specs, pre-archive) |
pass; change valid. |
openspec archive portfolio-income-analytics --yes --store wealth-ledger-specs (specs) |
pass; all tasks complete, capability synced and archived as 2026-08-28-portfolio-income-analytics. |
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) |
pass; 23 passed, 0 failed. |
Все Tasks были завершены до archive. Semantic verification сопоставила
поставленную реализацию с Proposal, Delta Spec, Design и Tasks: backend сохраняет
account authorization, exact Money и complete-or-error result; frontend сохраняет
source currencies, applied URL period, accessible signed trend и отделённый
forecast; OpenAPI snapshot синхронизирован.
Independent read-only review
Verdict: PASS. Critical findings — 0, Important findings — 0.
Validation No. 4 выявила signed-trend deviation; она была исправлена, а
Validation No. 5 подтвердила финальный runtime contract без product changes.
2026-08-27-optimize-agent-token-workflow
Change: optimize-agent-token-workflow (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-27-optimize-agent-token-workflow
Specs sync: engineering-change-governance и
openspec-authority-and-lifecycle обновлены; post-archive strict validation
подтвердил 21 passed, 0 failed.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
N/A |
Пользовательское поведение, frontend routing и canonical frontend gate не менялись |
| backend |
N/A |
Backend behavior, data и runtime API contract не менялись |
| specs |
affected |
Change заархивирован; main specs получили stage-aware token-efficiency invariants для evidence batching, quality-coupled pilot evaluation и approval-preserving handoff |
| docs |
affected |
development/agent-token-efficiency.md получил versioned pilot result и перевёл guidance из active pilot в completed observed practice без нового hard guardrail |
Delivery commits
| Repo |
Commit |
Subject |
| specs (archive) |
216956e0c6868c75bce8390d36e90685922b2c3b |
docs(specs): archive session workflow changes |
| specs (cleanup) |
2c9d163d396e7a770bfa0be33bf7fd5e1c2860aa |
docs(specs): drop archived optimize change |
| docs (as-built) |
21ccad3639714bcc364af329ea884eda57259aab |
docs: publish token workflow pilot result |
| docs (evidence) |
current evidence commit |
docs: record session workflow completion evidence |
Verification
| Command (repo) |
Наблюдённый результат |
npm run verify (docs) |
pass; markdownlint checked 38 files, 0 issues, git diff --check clean |
openspec schema validate wealth-ledger-sdd --verbose (specs) |
pass; schema structure, templates и dependency graph valid |
openspec archive optimize-agent-token-workflow --yes --store wealth-ledger-specs (specs) |
pass; task status ✓ Complete, archived as 2026-08-27-optimize-agent-token-workflow, main specs updated for engineering-change-governance and openspec-authority-and-lifecycle |
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) |
pass; 21 passed, 0 failed |
git diff --check (specs/docs) |
pass |
Все Tasks были отмечены completed до archive. Semantic verification
подтвердила Proposal, все Delta Requirements и Design: guidance действительно
осталась non-blocking, pilot result опубликован только в пределах наблюдённых
данных, minimum threshold выполнен с запасом (17 completed phases across 5
changes), а числовой token budget не превращён в hard completion gate.
Independent read-only review
Verdict: PASS. Critical findings — 0, Important findings — 0, Minor
findings — 0. Review подтвердил, что change не ослабляет approval boundaries,
semantic verification, independent review или canonical gates, не вводит второй
authority вместо OpenSpec и честно фиксирует confounders pilot вместо
неподтверждённых claims о quota, cost или причинности.
2026-08-27-add-session-oriented-sdd-skills
Change: add-session-oriented-sdd-skills (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-27-add-session-oriented-sdd-skills
Specs sync: создан новый main spec agent-sdd-session-workflow; post-archive
strict validation подтвердил 21 passed, 0 failed.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
N/A |
Продуктовое поведение, frontend agent routing и API snapshot не менялись |
| backend |
N/A |
Backend behavior, data, auth и runtime contract не менялись |
| specs |
affected |
Change заархивирован; в canonical store появился новый capability agent-sdd-session-workflow с role isolation, minimal handoff, independent validation и PASS-only finalization |
| docs |
N/A |
Durable docs не менялись; change доставляет только canonical spec/archive, Completion Evidence добавлен отдельным финальным docs commit |
Delivery commits
| Repo |
Commit |
Subject |
| specs (archive) |
216956e0c6868c75bce8390d36e90685922b2c3b |
docs(specs): archive session workflow changes |
| docs (evidence) |
current evidence commit |
docs: record session workflow completion evidence |
Verification
| Command (repo) |
Наблюдённый результат |
openspec schema validate wealth-ledger-sdd --verbose (specs) |
pass; schema structure, templates и dependency graph valid |
openspec validate add-session-oriented-sdd-skills --type change --strict --store wealth-ledger-specs (specs, pre-archive) |
external inconsistency; CLI reported "No deltas found" despite present delta spec, поэтому этот результат не использовался как completion evidence |
openspec archive add-session-oriented-sdd-skills --yes --store wealth-ledger-specs (specs) |
pass; task status ✓ Complete, archived as 2026-08-27-add-session-oriented-sdd-skills, main spec agent-sdd-session-workflow created |
openspec validate --specs --strict --store wealth-ledger-specs (specs, post-archive) |
pass; 21 passed, 0 failed |
git diff --check (specs/docs) |
pass |
Все Tasks были отмечены completed до archive. Semantic verification
подтвердила, что archived capability описывает ровно один workflow слой:
каждая agent-сессия ограничена одной ролью, handoff не копирует canonical
planning authority, Validation остаётся read-only, а Finalization требует
предыдущий PASS.
Independent read-only review
Verdict: PASS. Critical findings — 0, Important findings — 0, Minor
findings — 0. Review подтвердил, что change не меняет product behavior,
public API, данные или approvals в OpenSpec lifecycle, а добавляет только новый
canonical process capability без competing planning root.
2026-08-26-simplify-verification-infrastructure
Change: simplify-verification-infrastructure (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-26-simplify-verification-infrastructure
Specs sync: skip_specs: true; change упрощает локальную verification
инфраструктуру и lifecycle routing без изменения observable product
requirements или public API behavior.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
Local gate упрощён до прямых project tools: сохранены typecheck, Biome, Vitest coverage, Knip, dependency-cruiser и build; удалены hygiene wrappers, exact lazy-route baseline и meta-tests конфигурации |
| backend |
affected |
Local gate упрощён до lint/typecheck/Jest/build; shell runtime verifier заменён focused Jest OpenAPI contract test на integration boundary; project-owned hygiene wrappers удалены |
| specs |
affected |
Project-owned planning, authority, version, runtime-openapi и workspace verification scripts удалены; native OpenSpec validation и explicit completion sequencing закреплены в canonical store, затем change заархивирован |
| docs |
affected |
As-built workflow docs синхронизированы с direct repository/native gates, historical evidence сохранён как исторический факт без переписывания прошлых записей |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
3d9b61919c0254dc8f0e325db6416d0b24b377ca |
chore: simplify frontend verification |
| frontend |
f09baa68fcecfd210f95a7bfe8a67dc3741abce8 |
chore: simplify frontend verification |
| backend |
fd4572a64563c588029af38cd7b4cddc3e014cdf |
chore: simplify backend verification |
| specs |
2faf4eb959e7cc37bdbb08d3fb40a170388cc7ae |
chore: use native OpenSpec validation |
| specs |
b6c141f4f3b5d95dbfcbd921959db910e8d1db66 |
chore(specs): finish verification cleanup |
| specs (archive) |
15ce5b586da20ec2cf441a59547da5257c316b78 |
docs(specs): archive verification simplification change |
| docs (as-built) |
4af0a9cf1f4408bd9824be6722df09a045e7954b |
docs: simplify verification workflow |
| docs (as-built) |
8eac3b0ffa0c1300eb85f83dd2504d56780abae5 |
Update frontend verification docs |
| docs (evidence) |
current evidence commit |
docs: record verification simplification evidence |
Verification
| Command (repo) |
Наблюдённый результат |
npm run verify (frontend) |
pass; typecheck, Biome, coverage (21 files / 73 tests), Knip, dependency-cruiser и production build прошли без ошибок |
npm run verify (backend) |
pass; lint, app/test typecheck, Jest (23 suites / 82 tests) и build прошли без ошибок |
npm run verify (docs) |
pass; markdownlint checked 38 files, 0 issues, git diff --check clean |
openspec schema validate wealth-ledger-sdd --verbose (specs, pre-archive) |
pass; schema structure, templates и dependency graph valid |
openspec validate simplify-verification-infrastructure --type change --strict --store wealth-ledger-specs (specs, pre-archive) |
pass; change valid |
openspec validate --specs --strict --store wealth-ledger-specs (specs, pre-archive) |
pass; 20 passed, 0 failed |
npm run test:openapi-contract (backend, first attempt) |
failed due environment mismatch: better-sqlite3 binary had NODE_MODULE_VERSION 127, current Node required 147 |
npm rebuild better-sqlite3 (backend) |
pass; native module rebuilt successfully, no source changes observed in repo |
npm run test:openapi-contract (backend, rerun) |
pass; 1 suite / 1 test, runtime OpenAPI snapshot contract matched after rebuild |
openspec archive simplify-verification-infrastructure --yes --store wealth-ledger-specs (specs) |
pass; archived as 2026-08-26-simplify-verification-infrastructure |
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; 36 passed, 0 failed |
openspec schema validate wealth-ledger-sdd --verbose (specs, post-archive) |
pass; schema and dependency graph valid |
Все Tasks были завершены до archive. Semantic verification подтвердила
утверждённый Design: verification ownership действительно вернулся native
OpenSpec и repository-owned gates, focused backend contract check заменил shell
wrapper без изменения API behavior, а historical docs/evidence не были
переписаны под новый workflow задним числом.
Independent read-only review
Verdict: PASS. Critical findings — 0, Important findings — 0, Minor
findings — 0. Review подтвердил, что change не расширил scope за пределы
tooling/process boundaries, skip_specs: true согласован с отсутствием runtime
requirement changes, affected repositories прошли свои canonical gates по одному
разу, а единственный observed failure был environment-only ABI mismatch у
better-sqlite3, устранённый локальным rebuild без source diff.
2026-08-26-improve-ledger-event-rows
Change: improve-ledger-event-rows (schema wealth-ledger-sdd v3)
Archive path: specs/openspec/changes/archive/2026-08-26-improve-ledger-event-rows
Specs sync: три изменения в brokerage-account-ledger слиты в main spec;
post-archive strict validation подтвердил 20 passed, 0 failed, archived
changes 34 passed, 0 failed.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
Последние события и Журнал операций используют общий compact row с логотипом или буквенным fallback, русскими подписями Поступление / Списание / Без движения денег, знаком суммы и семантическими тонами; полный журнал переведён на container -> ViewModel -> view без потери фильтров, cursor-пагинации и состояний |
| backend |
affected |
Ledger entry DTO получил additive nullable logoName; общий resolver metadata переиспользуется между portfolio и ledger, сохраняет UID-first/FIGI-fallback и кэширует как найденные, так и отрицательные lookup results без скрытия операций при ошибках enrichment |
| specs |
affected |
Approved Proposal, Design, Tasks и Delta Spec заархивированы; изменения синхронизированы в brokerage-account-ledger |
| docs |
affected |
As-built documentation закрепляет nullable visual metadata и русскую семантику поступления, списания и отсутствия движения денег |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
488ccad540c771e862fb795edf2df6c6cea315af |
feat: improve ledger event rows |
| backend |
84fabd264fa539dfefb1172e27a038870a30d845 |
feat: enrich ledger events with logo metadata |
| specs (archive) |
9a8687feda24edcc6ee6412313a844afce50f5eb |
docs(specs): archive improved ledger event rows |
| docs (as-built) |
d39a9d3df08d068b0c5fba97cfb7bb0d5755f329 |
docs: describe improved ledger event rows |
| docs (evidence) |
current evidence commit |
docs: record improved ledger row evidence |
Verification
| Command (repo) |
Наблюдённый результат |
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify (backend) |
pass; runtime/hygiene/lint/typecheck/Jest/build зелёные, 23 suites / 78 tests после регрессионных фиксов по metadata fallback и negative cache |
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH bash specs/scripts/verify-workspace-change.sh improve-ledger-event-rows (workspace, pre-archive final) |
pass; Delivery Map verified frontend/backend/specs/docs=affected, runtime-openapi=required; frontend 21 files / 73 tests, backend 23 suites / 78 tests, docs lint clean, runtime OpenAPI SHA совпадает со snapshot |
openspec archive improve-ledger-event-rows --yes --store wealth-ledger-specs (specs) |
pass; archived as 2026-08-26-improve-ledger-event-rows, brokerage-account-ledger updated with 3 modified requirements |
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; 34 passed, 0 failed |
openspec schema validate wealth-ledger-sdd --verbose (specs, post-archive) |
pass; schema and dependency graph valid |
bash scripts/verify-openspec-authority.sh (specs, post-archive) |
pass; OpenSpec CLI 1.10.0, authority wealth-ledger-specs |
Все Tasks были завершены до archive. Semantic verification подтвердила, что
оба пользовательских surface (Последние события и Журнал операций) получили
одинаковую компактную композицию, денежное направление выражается не только
цветом, backend enrichment остаётся additive и nullable, а существующие суммы,
категории, курсоры, loading/error/empty states и runtime OpenAPI contract не
сломаны.
Independent read-only review
Verdict: PASS. Первый review обнаружил два Important findings:
page-local dedupe в журнале мог подавлять FIGI fallback после UID-only miss, а
negative metadata lookups не кэшировались и повторно били в upstream. Оба
finding устранены: ключ дедупликации учитывает uid + figi, null-results
кэшируются через sentinel, добавлены прямые regression tests. Повторный
read-only review подтвердил итог: Critical 0, Important 0, Minor 0.
2026-08-26-polish-stock-position-cards
Change: polish-stock-position-cards (schema wealth-ledger-sdd v3)
Archive path: specs/openspec/changes/archive/2026-08-26-polish-stock-position-cards
Specs sync: skip_specs: true; change уточняет presentation существующего
Portfolio Position без изменения observable requirements или API contract.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
Карточка акции получила двухзонную иерархию: identity и метаданные слева, стоимость и доходность справа, средняя цена и доля одной приглушённой строкой; мобильный перенос сохраняет количество и ISIN |
| backend |
N/A |
Backend behavior, финансовые расчёты и API contract не менялись |
| specs |
affected |
Утверждённые Proposal, Design и Tasks заархивированы с skip_specs: true |
| docs |
affected |
As-built Portfolio documentation описывает поставленную визуальную иерархию карточки акции |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
273778c4cfa6ef8bd3ab421e03c57b6e31f7d925 |
feat: polish stock position cards |
| specs (archive) |
cf6bc1761140f06f44ea29e2eee1a2b24d075e2a |
docs(specs): archive stock card polish |
| docs (as-built) |
0c59ce788690ba6d17f33e0b57e122dd67e74904 |
docs: describe polished stock cards |
| docs (evidence) |
current evidence commit |
docs: record stock card polish evidence |
Verification
| Command (repo) |
Наблюдённый результат |
npm run test:run -- src/pages/account/ui/AccountPage.test.tsx (frontend, RED) |
failed as expected: прежняя разметка не объединяла quantity/ISIN и average price/share в спокойные строки |
npm run test:run -- src/pages/account/ui/AccountPage.test.tsx (frontend, responsive RED) |
failed as expected: metadata имела data-line-clamp=true, способный скрыть ISIN на узком экране |
npm run test:run -- src/pages/account/ui/AccountPage.test.tsx (frontend, final) |
pass; 13/13 tests, metadata больше не line-clamped |
PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH bash specs/scripts/verify-workspace-change.sh polish-stock-position-cards (workspace, pre-archive) |
pass; frontend/specs/docs affected, backend/runtime-openapi N/A; 20/20 main specs; frontend 21 files / 68 tests, build and bundle check; docs 37 Markdown files / 0 issues |
openspec archive polish-stock-position-cards --skip-specs --yes --store wealth-ledger-specs (specs) |
pass; archived as 2026-08-26-polish-stock-position-cards, spec updates skipped by approved metadata |
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; 33 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 |
Все четыре Tasks завершены до archive. Semantic verification подтвердила
двухзонную компоновку только для секции акций, сохранение состава метрик,
nullable hiding, прежнего вида облигаций/прочих позиций и отсутствие изменений
API. Account lazy-route baseline зафиксирован на 24,695 bytes; initial
JavaScript payload — 510,523 bytes.
Independent read-only review
Verdict: PASS. Первый review выявил два Important findings: потенциальное
скрытие ISIN из-за lineClamp на узком экране и преждевременную отметку
workspace task. Task была возвращена в unchecked, metadata получила перенос
через overflow-wrap: anywhere, добавлен RED/GREEN regression assertion.
Повторный review подтвердил: Critical — 0, Important — 0; stock-only routing,
nullable hiding и неизменённый branch облигаций/прочих позиций сохранены.
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.
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 не внесено.
2026-08-27-consume-mantine-components
Change: consume-mantine-components (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-27-consume-mantine-components
Specs sync: skip_specs: true; технический рефакторинг заменяет ручную
реализацию хлебных крошек на штатный Mantine Breadcrumbs без изменения
observable requirements или API contract (capability app-breadcrumb-navigation
не меняется).
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
AppBreadcrumbs переведён на Mantine Breadcrumbs (component="nav", aria-label, data-depth, separator); цепочки/пропсы AccountBreadcrumbs и AppBreadcrumbs не изменены; кастомные breadcrumbs-* классы удалены из styles.css, сохранены только адаптивное правило data-depth="3" (медиа, узкий экран) и базовое оформление ссылок; тест обновлён под Mantine DOM (navigation role, aria-label, aria-current="page", data-depth, ссылки, fallback «Счет», aria-hidden у сепараторов) |
| backend |
N/A |
API contract, данные и backend-поведение не менялись |
| specs |
affected |
Approved Proposal, Design и Tasks заархивированы с skip_specs: true |
| docs |
N/A |
Ни один as-built документ в docs/ не описывает эти компоненты; правки product docs не требовались — итог подводит только Completion Evidence |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
3c459e6 |
refactor: use Mantine Breadcrumbs for app navigation |
| backend |
— |
N/A |
| specs (archive) |
b5df309 |
docs(specs): archive consume-mantine-components change |
| docs (as-built) |
— |
N/A (docs as-built не изменялись — компонент не задокументирован) |
| docs (evidence) |
current evidence commit |
docs: record Mantine breadcrumbs evidence |
Verification
| Command (repo) |
Наблюдённый результат |
npx vitest run src/app/ui/AppBreadcrumbs.test.tsx (frontend) |
pass; 6 tests (включая aria-hidden сепараторов и прежние поведенческие ассерты) |
npm run verify (frontend, Node 22) |
pass (exit 0); strict TypeScript, Biome, coverage, Knip, dependency-cruiser и production build без ошибок |
openspec validate consume-mantine-components --type change --strict --store wealth-ledger-specs (specs, pre-archive) |
pass; change valid |
git diff --check (specs) |
pass (clean) |
openspec validate consume-mantine-components --type change --strict --store wealth-ledger-specs (specs, post-tasks-edit) |
pass; change valid |
Environment note: specs/scripts/verify-workspace-change.sh и
verify-openspec-version.sh отсутствуют в данном checkout, поэтому workspace
verification выполнялся native OpenSpec validation (openspec validate --type change --strict) + canonical gate affected repo (frontend npm run verify) и
git diff --check; OpenSpec CLI 1.10.0 проверен напрямую (совпадает с pinned
.cli-version). Git-репозитории созданы без remote, поэтому push не выполнялся.
Все Tasks завершены до archive. Semantic verification подтвердила соответствие
утверждённому Design (D1–D3): Mantine Breadcrumbs с component="nav",
aria-label, data-depth и separator="→"; предшествующие крошки — Link
children, текущая — <span aria-current="page">; удалены кастомные
breadcrumbs-* классы, адаптивное правило data-depth="3" и базовое
оформление ссылок сохранены; маршруты, цепочки, aria и ссылки не изменились.
Independent read-only review
Verdict: PASS. Первый review выявил 1 Important и 2 Minor findings:
(1) сепаратор «→» потерял aria-hidden, что меняло доступный tree — исправлено
на separator={<span aria-hidden="true">→</span>} с добавлением теста; (2)
потерян margin-bottom: 1rem — восстановлен через [data-depth]; (3) потерян
accent-цвет ссылок — восстановлен через [data-depth] a. Повторная проверка
подтвердила: Critical — 0, Important — 0, Minor — 0. Review также
подтвердил неизменность routing/chain-логики, сохранение <nav>/aria-label/
data-depth, адаптивного скрытия промежуточных крошек и отсутствие остаточных
breadcrumbs-* ссылок во frontend/src.
2026-08-27-account-ledger-explicit-filters
Change: account-ledger-explicit-filters (schema wealth-ledger-sdd)
Archive path: specs/openspec/changes/archive/2026-08-27-account-ledger-explicit-filters
Specs sync: в main spec brokerage-account-ledger добавлен Requirement
User can explicitly apply ledger filters с четырьмя scenarios: черновик не
делает запрос до Применить, Применить коммитит draft и сбрасывает cursor,
Сбросить очищает фильтр и пагинацию, пагинация остаётся привязанной к
последнему применённому фильтру.
Delivery Map
| Area |
Status |
Outcome |
| frontend |
affected |
Страница account-operations переведена на draft/applied семантику фильтров: два DateInput c DD.MM.YYYY, min/max и русской локалью через DatesProvider; категории собраны в MultiSelect с placeholder Выберите категории; кнопки Применить/Сбросить управляют применённым состоянием; Сбросить дополнительно инвалидирует unfiltered query key, чтобы React Query не подменял обязательный повторный запрос свежим cache hit; добавлены risk-based тесты для сценариев «черновик без запроса» и «reset перезапрашивает без categories» |
| backend |
N/A |
API /api/v1/brokerage-accounts/{accountId}/operations, query params from/to/categories/cursor/limit, серверный дефолт периода и cache identity не менялись |
| specs |
affected |
Approved Proposal, Design, Tasks и delta spec заархивированы; Requirement синхронизирован в main spec brokerage-account-ledger |
| docs |
affected |
features/brokerage-account-ledger.md описывает staged draft/applied поведение, явные Применить/Сбросить и пагинацию по последнему применённому фильтру |
Delivery commits
| Repo |
Commit |
Subject |
| frontend |
7d748a65d384e76220e234aa37a21b05b81e442a |
feat(account-operations): require explicit ledger filters |
| specs (archive) |
69d4e63a5110f744a2428dd9d40525bf025a2db8 |
docs(specs): archive account-ledger-explicit-filters |
| docs (as-built) |
820cf5510318e0868eba46a6ff0b556053cb9806 |
docs(brokerage-account-ledger): describe explicit filters |
| docs (evidence) |
current evidence commit |
docs: record explicit ledger filters evidence |
Verification
| Command (repo) |
Наблюдённый результат |
source ~/.nvm/nvm.sh && nvm use 22 >/dev/null && node -v && npm run verify (frontend) |
pass; Node v22.21.0, canonical gate прошёл: strict TypeScript, Biome, coverage (21 files / 79 tests), Knip, dependency-cruiser и production build без ошибок |
npm ci (frontend) |
pass; lockfile не изменился, install завершён |
npm run verify (docs) |
pass; markdownlint 38 files, 0 issues, git diff --check clean |
openspec validate account-ledger-explicit-filters --type change --strict --store wealth-ledger-specs (specs, pre-archive) |
pass; change valid |
openspec archive account-ledger-explicit-filters --yes --store wealth-ledger-specs (specs) |
pass; Task status ✓ Complete, main spec brokerage-account-ledger обновлён, change archived as 2026-08-27-account-ledger-explicit-filters |
openspec validate --specs --strict --store wealth-ledger-specs (specs, pre/post-archive) |
pass; 20 passed, 0 failed |
git diff --check (frontend/docs/specs) |
pass |
openspec validate --archived --strict --store wealth-ledger-specs (specs, post-archive) |
external failure; 39 passed, 1 failed because unrelated archived change 2026-08-27-consume-mantine-components still has 1 incomplete task; 2026-08-27-account-ledger-explicit-filters itself passed archived validation |
Environment note: during npm ci the default shell used Node v26.7.0 and
printed an EBADENGINE warning, поэтому canonical frontend gate был повторно
запущен под nvm use 22 и именно этот результат считается verification
evidence. В specs рабочее дерево после archive остаётся с незафиксированным
соседним change add-session-oriented-sdd-skills; он не входит в delivery
этой фичи и не включался в archive commit.
Все Tasks были отмечены completed до archive. Semantic verification подтвердила
утверждённые Proposal, Design и delta scenarios: черновик фильтров не меняет
видимый ledger и не делает новый запрос до Применить; Применить коммитит
draft и сбрасывает cursor; Сбросить очищает draft/applied state и принуждает
повторный unfiltered fetch; кнопки пагинации продолжают работать по последнему
применённому фильтру; backend contract и server default period не меняются.
Independent read-only review
Verdict: PASS. Critical findings — 0, Important findings — 0, Minor
findings — 0. Проверка diff и post-archive состояния подтвердила, что
изменение локализовано во frontend/docs/specs, не меняет backend/API contract,
не затрагивает денежные вычисления, auth, data integrity или security, не
вводит лишних зависимостей сверх @mantine/dates и dayjs, а дополнительная
invalidate-on-reset логика закрывает реальный cache edge case вместо тестового
костыля. Residual blocker относится не к этой фиче, а к чужому archived change
consume-mantine-components.