# Completion Evidence — optimize-session-oriented-sdd-v2 Delivery facts observed on 2026-09-07 before native archive. Independent Validation: **PASS**, no unresolved Critical/Important findings. All 20 implementation Tasks are complete. The Change Owner explicitly authorized this dependency and its current Tasks in the coordinating conversation ("да, давай"), following the concrete request to include and complete this dependency directly. Optional session routing was not invoked; legacy state was not used as approval. ## Delivery Map and existing commits | Area | Delivered scope | Existing commit | | --- | --- | --- | | frontend | Canonical routing and the necessary ignored-file formatting fix; earlier approved Storybook delivery is also present | `36698322b7273b3a9eae1d078bcc9cddf2c8295b` | | backend | Canonical routing; runtime/API unchanged | `de1dab0d476d10a28b101d9cf6f25e5ace1368d2` | | specs | Schema v4, native Tasks dependencies and bounded Apply; completed checklist | `04a07b390f73412a5d376c0051253da25481f1a3` | | docs | Portable lifecycle/context authority, registry/index routing and previously verified Storybook as-built docs | `024e240303ec977ece40ab0e75a234267834ea7c` | Workspace-owned root routing and optional adapters are local unversioned instructions, bound by the inventory below; workspace root is not a Git repository. No fictional workspace commit is claimed. Runtime-openapi: N/A because no API contract changed. Historical archives, audits and legacy completion evidence were preserved. No product pilot was performed. ## Verification and independent review All Node commands used Node 22 selected through repository `.nvmrc`; specs used frontend runtime. Frontend lockfile install was already successful on the same lockfile; backend `npm ci` succeeded. Canonical frontend/backend/docs gates and native schema/current/main-spec checks have successful observed results below. The first backend build failed on sandbox Prisma cache `utime`; the sanctioned rerun completed. Frontend commit hooks exposed an ignored-AGENTS formatting bug; the scoped native formatter option fixed it without bypassing hooks, followed by a new frontend gate and superseding independent PASS. Commit/staging left reviewed bytes and the final fingerprint unchanged. # Independent Validation — optimize-session-oriented-sdd-v2 Verdict: **PASS** on the frozen inputs below. No unresolved Critical or Important findings. This is an independent read-only review performed by the delegated reviewer after explicit Change Owner authorization of the dependency and its Tasks, as reported in the current coordinating conversation. The optional session router was not invoked. Legacy session state was not treated as approval evidence. The reviewer did not modify production code, repository policy, canonical specifications, Tasks, historical records, or other changes. This temporary report is evidence for the canonical Completion Evidence, not a new versioned planning or verdict store. ## Reviewed input binding - Change: `optimize-session-oriented-sdd-v2`. - Inventory: `/tmp/sdd-v2-ready-review-final.json`; independently re-expanded final snapshot: `/tmp/sdd-v2-independent-after-final.json`. - Raw planning/delivery fingerprint: `sha256:42e412e4ee45f765bad83639561db8fb5cf8aadeef3283b6543a5ca7152d724d`. - Files: **420**. The reviewer independently reconstructed the byte stream and SHA-256 using the delivered context contract, verified exact inventory membership, and matched the coordinating snapshot. A final re-expansion and fingerprint after review matched again. - Scope: full tracked/nonignored frontend, backend and docs repository candidates; the predecessor canonical change; all canonical main specs; project-local `wealth-ledger-sdd` schema; specs configuration, CLI version and AGENTS; root AGENTS; all 16 OpenCode entrypoints and the six SDD phase skills/shared protocol. Workspace-owned ignored instructions are explicitly enumerated through their roots. - Exclusions: this change's own future `completion-evidence.md` and irrelevant `.DS_Store`; other active change planning and historical archives are outside this change's process review scope. Existing Storybook delivery is inside the full frontend/docs gate inventory and had its own earlier scoped review. It is not represented as new predecessor product behavior. - Canonical Tasks: **20 checked, 0 unchecked** after observed implementation outcomes. Task contents remained approved; checkbox progress is raw in this PASS fingerprint and separately normalized only for approval binding. - Runtime: Node 22 selected using repository `.nvmrc` through `nvm use --silent`; specs uses frontend runtime. Runtime/gate metadata must remain attached to this fingerprint when consumed. ## Authority and implementation review Read the full approved Proposal, both Delta Specs, Design and Tasks, applicable main baselines, root/all four repository AGENTS, delivered governance/lifecycle/context documentation, registry/index changes, project-local schema, all 16 `.opencode` entrypoints, and all SDD phase skills/shared protocol. The two deltas contain **11 Requirements / 39 Scenarios**. Semantic and acceptance review covered each: | Requirement | Implementation and scenario evidence | | --- | --- | | Implementation сохраняет ограниченные checkpoints | Schema Apply and Implementation adapter distinguish a verified partial batch as CHECKPOINT from completion of all implementation-owned tasks as READY_FOR_VALIDATION. Actual obstacles remain BLOCKED; independent Validation is not executed by Apply. | | Активные инструкции согласованы и независимы от agent runtime | Root/repository instructions and 16 optional command/skill entrypoints point to the same vendor-neutral governance/lifecycle/context authorities. Local gates/boundaries remain available without an optional runtime. Clean-shell native routing succeeded for all five native planning/apply instructions. | | Каждая agent-сессия имеет одну SDD-роль | Governance approval table, shared protocol and Specification adapter preserve Discovery, individual artifact decisions, bounded Proposal+Specs and Design+Tasks pairs, same-role continuation after permitted approval, and independent context at pair/role boundaries. Tasks approval does not run Implementation inside Specification; completed Implementation does not run Validation. | | Продолжение workflow восстанавливает только нужный контекст | Context authority and protocol define one current self-contained envelope, phase-specific canonical context, old records only for concrete investigation, bounded independent reads and reuse only for unchanged relevant gate inputs. Native Tasks resolves Design plus both Delta Specs; Apply resolves all five canonical files. | | Handoff не заменяет canonical OpenSpec authority | Envelope contains navigation/results/task IDs, never copied requirements or design. Four approval slots require explicit decision source, artifact identity and content fingerprint; missing legacy binding requires owner decision; mismatch invalidates the affected boundary and downstream slots. Approved Tasks progress normalization does not conceal semantic edits or raw PASS changes. | | Validation остаётся независимой и без побочных исправлений | Governance, lifecycle and Validation adapter require gates, semantic/acceptance behavior, edge cases and independent review; prohibit production/planning/Tasks edits; preserve PASS/FAIL/SPEC_ISSUE routing. Validation-owned work is not an implementation checkbox. | | Finalization требует успешной независимой Validation | Finalization consumes current input-bound PASS, re-expands inventory and handles unchecked implementation work, stale/missing PASS, planning gaps and retryable completion failures at their responsible roles. It does not repair implementation/planning or rerun unchanged Validation. | | Completion Evidence сохраняет фактическое завершение change | Governance/lifecycle and Finalization adapter create evidence inside the active canonical change only from existing Delivery Map, commits, exact observed gates and independent result, then archive it together. Missing facts block completion; docs N/A does not require an evidence-only docs mutation. | | OpenSpec change закрывается только после полной верификации | Completion requires all implementation-owned tasks, required artifacts, affected gates, semantic/acceptance verification, no blocking findings, as-built documentation and current independent PASS. No confirmation override is permitted. | | Документация процесса содержит remediation registry | Updated registry/index preserve sources/status/next task and use a canonical archive/evidence link for future done entries. Historical dated records and prior evidence links remain unchanged. | | Durable documentation is not a parallel SDD store | Docs AGENTS/governance/lifecycle/index distinguish as-built documentation from canonical planning/evidence, retain documentation only for actual affected subjects and avoid a parallel evidence store. Existing historical docs evidence is preserved under the explicit no-rewrite constraint. | ## Verification evidence Existing successful affected gates were assessed with the supplied command results/logs and the frozen delivery inventory; full application gates were not needlessly repeated by this reviewer. - Frontend: `npm run verify`, supplied successful exit; `/tmp/sdd-v2-frontend-verify-final.log` directly inspected: 24 test files / 110 tests pass, production build and Storybook static build succeed. Existing large Storybook bundle warning is nonblocking and introduces no predecessor runtime behavior. - Backend: `npm ci`, then `npm run verify`, supplied successful exits; `/tmp/sdd-v2-backend-verify-final.log` directly inspected: 25 suites / 106 tests, type/lint checks, Prisma generation and Nest build pass. Earlier sandbox EPERM was resolved by the sanctioned rerun, not treated as a successful result. - Specs: coordinating evidence reports successful `openspec schema validate wealth-ledger-sdd --verbose` and strict current-change validation after marking Tasks. Reviewer independently observed schema resolution as project-local and all native context instructions under Node 22. `openspec validate --specs --strict --store wealth-ledger-specs` was rerun after the input-scope correction; `/tmp/sdd-v2-main-specs-gate.log` directly inspected: 23 passed, 0 failed. - Docs: writer/coordinator supplied successful canonical `npm run verify` for 43 Markdown files and scoped verification of 125 local links. Scoped diff review found no rewritten historical completion-evidence entries or dated audit snapshots. - Native read-only clean-shell check: with `/bin/zsh`, `login: false`, frontend `.nvmrc` activated, invoked `openspec instructions --change optimize-session-oriented-sdd-v2 --json --store wealth-ledger-specs` for proposal/specs/design/tasks/apply. Every stage resolves `wealth-ledger-sdd`; dependencies are proposal→specs→design and tasks→design+specs; Apply observes all_done after 20/20 Tasks. This does not mistake native completeness for independent PASS or archive completion. - Adapter mechanics: directly inspected `/tmp/sdd-v2-adapter-probe.py` and the 15 observed positive/negative checks in `/tmp/sdd-v2-adapter-proof-1vg2e8yo/proof.txt` (coordinator also reran to `/tmp/sdd-v2-adapter-proof-tyvq9ut4/proof.txt`). Assertions cover matching approval, checkbox-only normalization versus raw PASS, semantic edit invalidation, added/deleted membership, executable mode, symlink identity, exclusive lock refusal, concurrent-state detection/preservation, exclusive immutable record creation, interrupted write and atomic pointer replacement. - The disposable fingerprint helper and this review report are not new versioned runtime tooling. Current real inventory uses valid workspace-relative paths and regular files/symlinks covered by the documented algorithm. ## Superseding review after the completion blocker This PASS supersedes `/tmp/sdd-v2-independent-review.md`. The earlier raw PASS was correctly invalidated when completion exposed an actual frontend AGENTS-only commit failure and Implementation changed `frontend/package.json`. The only change adds `--no-errors-on-unmatched` to the existing `lint-staged` Biome formatting command. It permits a batch containing only intentionally ignored files without suppressing parser errors, weakening lint rules, bypassing the hook, or changing application runtime/dependencies. Independent scoped review found no Critical/Important issue. The executor observed the ignored-AGENTS positive command exit 0; `/tmp/sdd-v2-format-negative.log` was inspected and shows malformed TypeScript still rejected with formatting aborted due to parsing errors. The affected frontend canonical `npm run verify` was rerun successfully (coordinator observed exit 0); the final log was directly inspected: 24 files / 110 tests pass and both production/Storybook builds succeed. Other gates and semantic review are reused for verified unchanged inputs. The reviewer reconstructed the current 420-file fingerprint independently. Reversing only this formatter flag **in memory**, without any repository write, reconstructed the exact previous fingerprint `sha256:9f89383792f5373e626b0608bb3d4a7d7a3244f36e40a6b19a249dc0e4c676de`. This proves the rest of the formerly reviewed content/modes/membership remained unchanged. A final inventory re-expansion matches `sha256:42e412e4ee45f765bad83639561db8fb5cf8aadeef3283b6543a5ca7152d724d`. ## Resolved finding and completion limits One evidence-binding gap was found before PASS: the initial inventory covered only two main capabilities while the reused native main-specs gate covered all 23. The executor expanded the scope to all main specs plus the CLI version and reran the affected main-specs strict gate. The reviewer independently verified the corrected 420-file membership and final fingerprint. No unresolved finding remains. The expected future semantic sync is 2 ADDED and 5 MODIFIED session Requirements and 4 MODIFIED documentation Requirements. Existing identities match the approved deltas; untouched Requirements and Purpose must be preserved. Finalization still has to review the exact resulting semantic diff, create evidence from existing delivery commits, execute archive, and verify its outputs. This PASS does not claim archive, completion evidence creation, terminal status, or completion of `integrate-ui-ux-design-workflow`. Any new relevant planning/delivery content or inventory change invalidates this PASS. Staging/committing unchanged bytes does not. Expected archive/sync/evidence outputs follow the separately reviewed completion procedure and cannot hide implementation changes. ## Controlled adapter evidence ```text PASS unchanged content yields matching approval binding PASS canonical checklist-only progress retains Tasks approval PASS canonical checklist-only progress changes PASS raw binding PASS semantic task edit invalidates approval binding PASS re-expanded directory detects added input PASS prior missing entry plus re-expanded inventory detects deletion PASS executable mode mutation changes binding PASS symlink target identity mutation changes binding PASS exclusive lock refuses second writer PASS state byte comparison detects concurrent replacement PASS conflict path preserves other writer state PASS exclusive record creation preserves immutable record PASS interruption after record leaves old pointer intact PASS state still matches writer snapshot under lock PASS atomic pointer replacement occurs after existing record ``` # SDD v2 adapter controlled walkthrough Scope: predecessor Tasks 4.1–4.5, optional adapter instructions only. These are manual role walkthroughs against the edited instruction text, supplemented by actual temporary filesystem/fingerprint experiments in `/tmp/sdd-v2-adapter-proof-1vg2e8yo/proof.txt`. No production role was invoked, no actual change state/record was mutated, and this is not a product pilot or independent whole-change Validation. | Task | Controlled input | Observed instruction result | | --- | --- | --- | | 4.1 | Approved Proposal with matching canonical identity, fingerprint and explicit decision source | Recovery step 2 carries the binding without repeating approval; router loads only Specification for Delta Specs. | | 4.1 | Approved label with missing fingerprint or source | Recovery step 3 requires the earliest missing owner decision; downstream file existence grants no approval. | | 4.1 | Legacy version 1 state pointing to Implementation | Recovery step 5 uses phase only as a hint and recovers prerequisite bindings from explicit available decisions; missing decisions require owner recovery, never automatic promotion. | | 4.1 | Proposal payload changes | Recovery step 3 invalidates Proposal and all downstream approvals and selects Specification/proposal. | | 4.1 | Delta Specs member added or removed | Fresh full membership fingerprint changes; recovery invalidates Specs, Design and Tasks and selects Specification/specs. Temporary addition/deletion experiments detected both mutations. | | 4.1 | Canonical Tasks checkbox alone changes | Approval fingerprint remains equal while raw PASS fingerprint changes; temporary experiment demonstrated both. | | 4.1 | Current record missing or envelope fields conflict | Recovery step 5 blocks routing until the selected change is reconciled; no history-wide migration. | | 4.1 | Concurrent state writer or existing immutable record | Lock/byte compare/exclusive creation prevents overwrite. Temporary experiments detected concurrent replacement, refused second lock/record creation, preserved old pointer after interrupted write, then completed record-before-pointer update. | | 4.2 | Structurally valid Proposal awaiting owner decision | Specification step 2 records AWAITING_APPROVAL; Delta Specs remains unavailable. | | 4.2 | Owner explicitly approves unchanged Proposal | Step 3 records ARTIFACT_APPROVED and permits Delta Specs in the same Specification task after native context reads. | | 4.2 | Owner explicitly approves Delta Specs | Step 4 ends first pair and selects Design in a new Specification task. | | 4.2 | Owner explicitly approves unchanged Design | Step 3 permits Tasks within the same Specification task. | | 4.2 | Tasks drafted but not approved | Step 2 keeps AWAITING_APPROVAL; Implementation unavailable. | | 4.2 | Owner explicitly approves Tasks | Step 4 selects Implementation in a new task and ends Specification. | | 4.3 | Coherent checked batch complete with pending implementation-owned Tasks | Step 4 chooses CHECKPOINT and next Implementation outcome; remaining work alone is not BLOCKED. | | 4.3 | All implementation-owned Tasks complete and relevant checks successful | Step 4 chooses READY_FOR_VALIDATION; role stops before independent verification. | | 4.3 | Actual obstacle prevents next batch | Step 4 chooses BLOCKED, retains Implementation and names obstacle. | | 4.3 | Architecture inconsistency discovered | Step 4 chooses SPEC_ISSUE at Design, invalidating dependent Tasks approval. | | 4.4 | Independent affected gates, acceptance/semantic evidence and review satisfy current approved inputs | PASS is bound to reviewed inventory and exact evidence; next role Finalization. | | 4.4 | Observed implementation violation | FAIL includes requirement, evidence and expected result; next role Implementation; read-only rule prohibits repairing code, tests or Tasks. | | 4.4 | Observed planning contradiction | SPEC_ISSUE selects earliest responsible Specification boundary; planning and Tasks remain read-only. | | 4.4 | Input changes while verification runs | Step 4 re-expands inventory and repeats affected verification before verdict; old evidence cannot bind new content. | | 4.5 | Current independent PASS with unchanged inputs and existing completion facts | Steps 1–4 consume PASS without rerunning Validation, create active canonical completion-evidence.md, then archive together via native lifecycle. | | 4.5 | Missing or stale PASS | Step 2 routes FINALIZATION_BLOCKED to Validation; no archive. | | 4.5 | Unchecked implementation-owned Task or implementation finding | Step 2 routes blocker to Implementation; no self-repair or archive. | | 4.5 | Planning gap/conflict | Step 2 routes blocker to earliest Specification boundary; no rewrite under Finalization. | | 4.5 | Missing delivery commit/gate/review fact | Step 3 blocks completion and disallows placeholders; terminal status unavailable. | | 4.5 | Retryable archive/evidence/environment failure with unchanged valid inputs | Step 2 retains Finalization; current record carries PASS source/input binding for retry without reconstructing history. | Edited sources: `.agents/skills/sdd-session/SKILL.md`, `.agents/skills/sdd-session/references/workflow-protocol.md`, and `sdd-specification`, `sdd-implementation`, `sdd-validation`, `sdd-finalization` `SKILL.md` files. General policy and exact fingerprint algorithm remain owned by vendor-neutral engineering/context documents; adapters link to them. Additional observed check: all six edited files passed frontmatter/newline/ whitespace checks; all eight local links and the fingerprint anchor resolve. ## Reviewed input inventory This embeds the reviewed inventory so temporary log/manifest locations above are supporting evidence, not a prerequisite for recovering the verdict. Fingerprint procedure is the delivered context authority. Completion Evidence excludes itself; native archive/sync outputs are checked separately against the approved deltas. No future archive commit is claimed here. ```json { "roots": [ "frontend", "backend", "docs", "specs/openspec/schemas/wealth-ledger-sdd", "specs/openspec/changes/optimize-session-oriented-sdd-v2", "specs/openspec/specs" ], "paths": [ "AGENTS.md", "specs/AGENTS.md", "specs/openspec/config.yaml", "specs/openspec/.cli-version" ], "workspace_roots": [ ".opencode/commands", ".opencode/skills", ".agents/skills/sdd-session", ".agents/skills/sdd-discovery", ".agents/skills/sdd-specification", ".agents/skills/sdd-implementation", ".agents/skills/sdd-validation", ".agents/skills/sdd-finalization" ], "exclude": [ "specs/openspec/changes/optimize-session-oriented-sdd-v2/completion-evidence.md", ".agents/skills/sdd-session/.DS_Store" ], "purpose": "Independent validation of optimize-session-oriented-sdd-v2; full affected repository gate inputs plus reviewed process delivery and canonical planning/baseline. Other active changes and immutable archives excluded from process scope.", "files": [ ".agents/skills/sdd-discovery/SKILL.md", ".agents/skills/sdd-finalization/SKILL.md", ".agents/skills/sdd-implementation/SKILL.md", ".agents/skills/sdd-session/SKILL.md", ".agents/skills/sdd-session/references/workflow-protocol.md", ".agents/skills/sdd-specification/SKILL.md", ".agents/skills/sdd-validation/SKILL.md", ".opencode/commands/opsx-apply.md", ".opencode/commands/opsx-archive.md", ".opencode/commands/opsx-continue.md", ".opencode/commands/opsx-explore.md", ".opencode/commands/opsx-new.md", ".opencode/commands/opsx-propose.md", ".opencode/commands/opsx-sync.md", ".opencode/commands/opsx-verify.md", ".opencode/skills/openspec-apply-change/SKILL.md", ".opencode/skills/openspec-archive-change/SKILL.md", ".opencode/skills/openspec-continue-change/SKILL.md", ".opencode/skills/openspec-explore/SKILL.md", ".opencode/skills/openspec-new-change/SKILL.md", ".opencode/skills/openspec-propose/SKILL.md", ".opencode/skills/openspec-sync-specs/SKILL.md", ".opencode/skills/openspec-verify-change/SKILL.md", "AGENTS.md", "backend/.env.example", "backend/.gitignore", "backend/.nvmrc", "backend/.prettierrc", "backend/AGENTS.md", "backend/README.md", "backend/certs/russian-trusted-root-ca.pem", "backend/eslint.config.mjs", "backend/nest-cli.json", "backend/package-lock.json", "backend/package.json", "backend/prisma.config.ts", "backend/prisma/migrations/20260813063823_add_authentication/migration.sql", "backend/prisma/migrations/20260813145440_add_tbank_connection/migration.sql", "backend/prisma/migrations/migration_lock.toml", "backend/prisma/schema.prisma", "backend/src/app.module.ts", "backend/src/auth/auth.controller.spec.ts", "backend/src/auth/auth.controller.ts", "backend/src/auth/auth.dto.ts", "backend/src/auth/auth.module.ts", "backend/src/auth/auth.service.spec.ts", "backend/src/auth/auth.service.ts", "backend/src/auth/auth.types.ts", "backend/src/auth/jwt-auth.guard.ts", "backend/src/auth/jwt.strategy.ts", "backend/src/common/decorators/api-safe-error-response.decorator.ts", "backend/src/common/filters/http-exception.filter.spec.ts", "backend/src/common/filters/http-exception.filter.ts", "backend/src/common/logging/logging.module.ts", "backend/src/common/logging/request-context.service.ts", "backend/src/common/logging/request-logging.middleware.spec.ts", "backend/src/common/logging/request-logging.middleware.ts", "backend/src/common/logging/structured-logger.service.spec.ts", "backend/src/common/logging/structured-logger.service.ts", "backend/src/config/env.validation.spec.ts", "backend/src/config/env.validation.ts", "backend/src/config/swagger.config.ts", "backend/src/main.spec.ts", "backend/src/main.ts", "backend/src/prisma/prisma.module.ts", "backend/src/prisma/prisma.service.ts", "backend/src/tbank/brokerage-account.dto.ts", "backend/src/tbank/brokerage-accounts.controller.ts", "backend/src/tbank/brokerage-accounts.service.spec.ts", "backend/src/tbank/brokerage-accounts.service.ts", "backend/src/tbank/brokerage-operation.dto.ts", "backend/src/tbank/brokerage-operation.mapper.spec.ts", "backend/src/tbank/brokerage-operation.mapper.ts", "backend/src/tbank/brokerage-operations.controller.spec.ts", "backend/src/tbank/brokerage-operations.controller.ts", "backend/src/tbank/brokerage-operations.service.spec.ts", "backend/src/tbank/brokerage-operations.service.ts", "backend/src/tbank/decimal.spec.ts", "backend/src/tbank/decimal.ts", "backend/src/tbank/income-analytics.controller.ts", "backend/src/tbank/income-analytics.dto.ts", "backend/src/tbank/income-analytics.service.spec.ts", "backend/src/tbank/income-analytics.service.ts", "backend/src/tbank/income-period.spec.ts", "backend/src/tbank/income-period.ts", "backend/src/tbank/instrument-metadata.service.spec.ts", "backend/src/tbank/instrument-metadata.service.ts", "backend/src/tbank/moex.client.spec.ts", "backend/src/tbank/moex.client.ts", "backend/src/tbank/portfolio-totals.ts", "backend/src/tbank/portfolio.controller.ts", "backend/src/tbank/portfolio.dto.ts", "backend/src/tbank/portfolio.service.spec.ts", "backend/src/tbank/portfolio.service.ts", "backend/src/tbank/proto/contracts/common.proto", "backend/src/tbank/proto/contracts/google/api/field_behavior.proto", "backend/src/tbank/proto/contracts/instruments.proto", "backend/src/tbank/proto/contracts/operations.proto", "backend/src/tbank/proto/contracts/users.proto", "backend/src/tbank/tbank-access.service.spec.ts", "backend/src/tbank/tbank-access.service.ts", "backend/src/tbank/tbank-account-policy.spec.ts", "backend/src/tbank/tbank-account-policy.ts", "backend/src/tbank/tbank-connection.controller.ts", "backend/src/tbank/tbank-connection.dto.ts", "backend/src/tbank/tbank-connection.module.ts", "backend/src/tbank/tbank-connection.service.spec.ts", "backend/src/tbank/tbank-connection.service.ts", "backend/src/tbank/tbank-token.service.spec.ts", "backend/src/tbank/tbank-token.service.ts", "backend/src/tbank/tbank.client.spec.ts", "backend/src/tbank/tbank.client.ts", "backend/src/tbank/tbank.crypto.spec.ts", "backend/src/tbank/tbank.crypto.ts", "backend/src/tbank/upcoming-events.controller.spec.ts", "backend/src/tbank/upcoming-events.controller.ts", "backend/src/tbank/upcoming-events.dto.ts", "backend/src/tbank/upcoming-events.service.spec.ts", "backend/src/tbank/upcoming-events.service.ts", "backend/test/app.e2e-spec.ts", "backend/test/e2e-env.cjs", "backend/test/jest-e2e.json", "backend/test/openapi-contract.e2e-spec.ts", "backend/test/runtime-check.cjs", "backend/tsconfig.build.json", "backend/tsconfig.json", "backend/tsconfig.typecheck.app.json", "backend/tsconfig.typecheck.test.json", "docs/.gitignore", "docs/.markdownlint-cli2.jsonc", "docs/.nvmrc", "docs/AGENTS.md", "docs/adr/001-prisma-sqlite-local-mvp.md", "docs/adr/002-nest-generated-openapi-contract.md", "docs/adr/003-tbank-server-side-grpc-boundary.md", "docs/adr/004-encrypted-per-user-tbank-token.md", "docs/adr/005-tbank-upstream-resilience.md", "docs/adr/006-auth-session-policy.md", "docs/adr/007-react-query-fetch-policy.md", "docs/adr/008-pino-backend-logging.md", "docs/adr/009-concurrent-refresh-rotation-policy.md", "docs/adr/010-native-openspec-sdd-and-local-orchestration.md", "docs/adr/README.md", "docs/architecture/README.md", "docs/architecture/domain-glossary.md", "docs/architecture/system-overview.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/README.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/deepseek-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/gemini-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/grok-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/kimi-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/qwen-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd-v2-review/zai-audit.md", "docs/audits/2026-08-26-wealth-ledger-sdd/README.md", "docs/audits/2026-08-26-wealth-ledger-sdd/deepseek-result.md", "docs/audits/2026-08-26-wealth-ledger-sdd/gemini-result.md", "docs/audits/2026-08-26-wealth-ledger-sdd/kimi-result.md", "docs/audits/2026-08-26-wealth-ledger-sdd/qwen-result.md", "docs/audits/2026-08-26-wealth-ledger-sdd/zai-result.md", "docs/audits/2026-08-frontend-repository-audits/README.md", "docs/audits/2026-08-frontend-repository-audits/frontend-repository-audit-2026-08-28.md", "docs/audits/2026-08-frontend-repository-audits/frontend-repository-audit.md", "docs/audits/2026-08-frontend-repository-audits/frontend-structural-maintainability-audit.md", "docs/audits/README.md", "docs/audits/audit-13-08-2026.md", "docs/audits/audit-20-08-2026.md", "docs/audits/audit-24-08-2026.md", "docs/audits/codex-sessions-token-audit-2026-08-26.md", "docs/development/README.md", "docs/development/agent-token-efficiency.md", "docs/development/audit-remediation.md", "docs/development/backend-workflow.md", "docs/development/completion-evidence.md", "docs/development/engineering-governance.md", "docs/development/frontend-workflow.md", "docs/development/openspec-authority-and-lifecycle.md", "docs/development/runtime-openapi-verification.md", "docs/development/ui-catalog.md", "docs/features/README.md", "docs/features/authentication.md", "docs/features/brokerage-account-income-analytics.md", "docs/features/brokerage-account-ledger.md", "docs/features/brokerage-account-upcoming-events.md", "docs/features/brokerage-accounts.md", "docs/features/frontend-ui-resilience.md", "docs/features/portfolio-view.md", "docs/features/tbank-connection.md", "docs/package-lock.json", "docs/package.json", "frontend/.env.example", "frontend/.gitignore", "frontend/.husky/commit-msg", "frontend/.husky/pre-commit", "frontend/.nvmrc", "frontend/.storybook/dependency-cruiser.cjs", "frontend/.storybook/main.ts", "frontend/.storybook/preview.tsx", "frontend/AGENTS.md", "frontend/README.md", "frontend/biome.json", "frontend/commitlint.config.cjs", "frontend/dependency-cruiser.cjs", "frontend/docs/API-LAYER.md", "frontend/docs/CONVENTIONS.md", "frontend/docs/README.md", "frontend/docs/STRUCTURE.md", "frontend/docs/TESTING.md", "frontend/docs/UI-PATTERN.md", "frontend/index.html", "frontend/knip.json", "frontend/package-lock.json", "frontend/package.json", "frontend/public/favicon.svg", "frontend/public/icons.svg", "frontend/scripts/check-openapi.mjs", "frontend/src/app/index.ts", "frontend/src/app/routes/AppRoutes.test.tsx", "frontend/src/app/routes/AppRoutes.tsx", "frontend/src/app/routes/ProtectedLayout.tsx", "frontend/src/app/routes/RouteErrorBoundary.test.tsx", "frontend/src/app/routes/RouteErrorBoundary.tsx", "frontend/src/app/routes/RouteFallback.tsx", "frontend/src/app/routes/RouteGuards.tsx", "frontend/src/app/routes/index.ts", "frontend/src/app/styles.css", "frontend/src/app/theme.ts", "frontend/src/app/ui/AccountBreadcrumbs.tsx", "frontend/src/app/ui/App.tsx", "frontend/src/app/ui/AppBreadcrumbs.module.css", "frontend/src/app/ui/AppBreadcrumbs.test.tsx", "frontend/src/app/ui/AppBreadcrumbs.tsx", "frontend/src/app/ui/BreadcrumbTrail.tsx", "frontend/src/app/ui/index.ts", "frontend/src/assets/hero.png", "frontend/src/assets/react.svg", "frontend/src/assets/vite.svg", "frontend/src/entities/broker-operation/api/useBrokerageOperations.test.tsx", "frontend/src/entities/broker-operation/api/useBrokerageOperations.ts", "frontend/src/entities/broker-operation/index.ts", "frontend/src/entities/broker-operation/model/display.ts", "frontend/src/entities/broker-operation/ui/LedgerEntryRow.module.css", "frontend/src/entities/broker-operation/ui/LedgerEntryRow.tsx", "frontend/src/entities/brokerage-account/api/useBrokerageAccounts.test.tsx", "frontend/src/entities/brokerage-account/api/useBrokerageAccounts.ts", "frontend/src/entities/brokerage-account/index.ts", "frontend/src/entities/brokerage-account/model/display.ts", "frontend/src/entities/brokerage-account/ui/BrokerageAccountList.module.css", "frontend/src/entities/brokerage-account/ui/BrokerageAccountList.stories.tsx", "frontend/src/entities/brokerage-account/ui/BrokerageAccountList.test.tsx", "frontend/src/entities/brokerage-account/ui/BrokerageAccountList.tsx", "frontend/src/entities/brokerage-event/api/useBrokerageEvents.test.tsx", "frontend/src/entities/brokerage-event/api/useBrokerageEvents.ts", "frontend/src/entities/brokerage-event/index.ts", "frontend/src/entities/income/api/useIncome.ts", "frontend/src/entities/income/index.ts", "frontend/src/entities/portfolio/api/usePortfolio.test.tsx", "frontend/src/entities/portfolio/api/usePortfolio.ts", "frontend/src/entities/portfolio/index.ts", "frontend/src/entities/portfolio/model/display.test.ts", "frontend/src/entities/portfolio/model/display.ts", "frontend/src/features/auth/index.ts", "frontend/src/features/auth/model/auth.test.tsx", "frontend/src/features/auth/model/auth.tsx", "frontend/src/features/auth/model/validation.ts", "frontend/src/features/auth/ui/AuthForm.module.css", "frontend/src/features/auth/ui/AuthForm.test.tsx", "frontend/src/features/auth/ui/AuthForm.tsx", "frontend/src/features/auth/ui/AuthPageLayout.module.css", "frontend/src/features/auth/ui/AuthPageLayout.tsx", "frontend/src/features/auth/ui/LoginForm.tsx", "frontend/src/features/auth/ui/RegisterForm.tsx", "frontend/src/features/tbank-connection/index.ts", "frontend/src/features/tbank-connection/model/connection-boundary.ts", "frontend/src/features/tbank-connection/ui/TbankConnectionSection.test.tsx", "frontend/src/features/tbank-connection/ui/TbankConnectionSection.tsx", "frontend/src/features/tbank-connection/ui/TbankConnectionSection.view.test.tsx", "frontend/src/features/tbank-connection/ui/TbankConnectionSection.view.tsx", "frontend/src/features/tbank-connection/ui/TbankConnectionSection.vm.ts", "frontend/src/features/tbank-connection/ui/TbankConnectionSectionLoaded.tsx", "frontend/src/main.tsx", "frontend/src/pages/account-events/index.ts", "frontend/src/pages/account-events/ui/AccountEventsPage.test.tsx", "frontend/src/pages/account-events/ui/AccountEventsPage.tsx", "frontend/src/pages/account-events/ui/AccountEventsPage.vm.ts", "frontend/src/pages/account-events/ui/components/AccountEventRow.view.tsx", "frontend/src/pages/account-events/ui/components/AccountEventsPageEmpty.view.tsx", "frontend/src/pages/account-events/ui/components/AccountEventsPageError.view.tsx", "frontend/src/pages/account-events/ui/components/AccountEventsPageLoaded.view.tsx", "frontend/src/pages/account-events/ui/components/AccountEventsPageLoading.view.tsx", "frontend/src/pages/account-income/index.ts", "frontend/src/pages/account-income/ui/AccountIncomePage.module.css", "frontend/src/pages/account-income/ui/AccountIncomePage.test.tsx", "frontend/src/pages/account-income/ui/AccountIncomePage.tsx", "frontend/src/pages/account-income/ui/AccountIncomePage.vm.ts", "frontend/src/pages/account-income/ui/components/AccountIncomePageError.view.tsx", "frontend/src/pages/account-income/ui/components/AccountIncomePageLoaded.view.tsx", "frontend/src/pages/account-income/ui/components/AccountIncomePageLoading.view.tsx", "frontend/src/pages/account-income/ui/components/IncomeBreakdown.view.tsx", "frontend/src/pages/account-income/ui/components/IncomeComparisons.view.tsx", "frontend/src/pages/account-income/ui/components/IncomeForecast.view.tsx", "frontend/src/pages/account-income/ui/components/IncomeSummary.view.tsx", "frontend/src/pages/account-income/ui/components/IncomeTrend.view.tsx", "frontend/src/pages/account-operations/index.ts", "frontend/src/pages/account-operations/ui/AccountOperationsPage.test.tsx", "frontend/src/pages/account-operations/ui/AccountOperationsPage.tsx", "frontend/src/pages/account-operations/ui/AccountOperationsPage.vm.ts", "frontend/src/pages/account-operations/ui/components/AccountOperationsPageError.view.tsx", "frontend/src/pages/account-operations/ui/components/AccountOperationsPageLoaded.view.tsx", "frontend/src/pages/account-operations/ui/components/AccountOperationsPageLoading.view.tsx", "frontend/src/pages/account/index.ts", "frontend/src/pages/account/ui/AccountPage.module.css", "frontend/src/pages/account/ui/AccountPage.test.tsx", "frontend/src/pages/account/ui/AccountPage.tsx", "frontend/src/pages/account/ui/AccountPage.vm.test.tsx", "frontend/src/pages/account/ui/AccountPage.vm.ts", "frontend/src/pages/account/ui/components/AccountHeading.view.tsx", "frontend/src/pages/account/ui/components/AccountPageEmpty.view.tsx", "frontend/src/pages/account/ui/components/AccountPageError.view.tsx", "frontend/src/pages/account/ui/components/AccountPageLoaded.view.tsx", "frontend/src/pages/account/ui/components/AccountPageLoading.stories.tsx", "frontend/src/pages/account/ui/components/AccountPageLoading.view.tsx", "frontend/src/pages/account/ui/components/CashBalances.view.tsx", "frontend/src/pages/account/ui/components/IncomeSummary.view.tsx", "frontend/src/pages/account/ui/components/PortfolioRefreshState.stories.tsx", "frontend/src/pages/account/ui/components/PortfolioRefreshState.view.tsx", "frontend/src/pages/account/ui/components/PortfolioTotals.view.tsx", "frontend/src/pages/account/ui/components/PositionCard.stories.tsx", "frontend/src/pages/account/ui/components/PositionCard.view.tsx", "frontend/src/pages/account/ui/components/PositionLogo.view.tsx", "frontend/src/pages/account/ui/components/PositionSection.view.tsx", "frontend/src/pages/account/ui/components/RecentEvents.stories.tsx", "frontend/src/pages/account/ui/components/RecentEvents.view.tsx", "frontend/src/pages/account/ui/components/RecentOperations.view.tsx", "frontend/src/pages/accounts/index.ts", "frontend/src/pages/accounts/ui/AccountsPage.test.tsx", "frontend/src/pages/accounts/ui/AccountsPage.tsx", "frontend/src/pages/accounts/ui/AccountsPage.vm.ts", "frontend/src/pages/accounts/ui/components/AccountsPageEmpty.view.tsx", "frontend/src/pages/accounts/ui/components/AccountsPageError.view.tsx", "frontend/src/pages/accounts/ui/components/AccountsPageLoaded.view.tsx", "frontend/src/pages/accounts/ui/components/AccountsPageLoading.view.tsx", "frontend/src/pages/accounts/ui/components/AccountsRefreshState.view.tsx", "frontend/src/pages/login/index.ts", "frontend/src/pages/login/ui/LoginPage.tsx", "frontend/src/pages/not-found/index.ts", "frontend/src/pages/not-found/ui/NotFoundPage.tsx", "frontend/src/pages/register/index.ts", "frontend/src/pages/register/ui/RegisterPage.tsx", "frontend/src/pages/settings/index.ts", "frontend/src/pages/settings/ui/SettingsPage.tsx", "frontend/src/shared/api/authenticated-query.test.tsx", "frontend/src/shared/api/authenticated-query.ts", "frontend/src/shared/api/client.test.ts", "frontend/src/shared/api/client.ts", "frontend/src/shared/api/generated/schema.d.ts", "frontend/src/shared/api/index.ts", "frontend/src/shared/api/problem-details.ts", "frontend/src/shared/api/spec/openapi.json", "frontend/src/shared/i18n/i18n.ts", "frontend/src/shared/i18n/index.ts", "frontend/src/shared/i18n/locales/ru.ts", "frontend/src/shared/i18n/zod.ts", "frontend/src/shared/lib/display.test.ts", "frontend/src/shared/lib/display.ts", "frontend/src/shared/lib/index.ts", "frontend/src/shared/ui/AppShell.module.css", "frontend/src/shared/ui/AppShell.tsx", "frontend/src/shared/ui/LoadingSkeleton.tsx", "frontend/src/shared/ui/StateView.stories.tsx", "frontend/src/shared/ui/StateView.test.tsx", "frontend/src/shared/ui/StateView.tsx", "frontend/src/shared/ui/index.ts", "frontend/src/test/handlers.ts", "frontend/src/test/query.tsx", "frontend/src/test/server.ts", "frontend/src/test/setup.ts", "frontend/src/test/storybook.test.tsx", "frontend/tsconfig.app.json", "frontend/tsconfig.json", "frontend/tsconfig.node.json", "frontend/vite.config.ts", "frontend/vitest.config.ts", "specs/AGENTS.md", "specs/openspec/.cli-version", "specs/openspec/changes/optimize-session-oriented-sdd-v2/.openspec.yaml", "specs/openspec/changes/optimize-session-oriented-sdd-v2/design.md", "specs/openspec/changes/optimize-session-oriented-sdd-v2/proposal.md", "specs/openspec/changes/optimize-session-oriented-sdd-v2/specs/agent-sdd-session-workflow/spec.md", "specs/openspec/changes/optimize-session-oriented-sdd-v2/specs/project-documentation/spec.md", "specs/openspec/changes/optimize-session-oriented-sdd-v2/tasks.md", "specs/openspec/config.yaml", "specs/openspec/schemas/wealth-ledger-sdd/schema.yaml", "specs/openspec/schemas/wealth-ledger-sdd/templates/design.md", "specs/openspec/schemas/wealth-ledger-sdd/templates/proposal.md", "specs/openspec/schemas/wealth-ledger-sdd/templates/spec.md", "specs/openspec/schemas/wealth-ledger-sdd/templates/tasks.md", "specs/openspec/specs/.gitkeep", "specs/openspec/specs/agent-sdd-session-workflow/spec.md", "specs/openspec/specs/api-contract-generation/spec.md", "specs/openspec/specs/app-breadcrumb-navigation/spec.md", "specs/openspec/specs/audit-remediation-workflow/spec.md", "specs/openspec/specs/backend-structured-logging/spec.md", "specs/openspec/specs/brokerage-account-income-analytics/spec.md", "specs/openspec/specs/brokerage-account-ledger/spec.md", "specs/openspec/specs/brokerage-account-upcoming-events/spec.md", "specs/openspec/specs/brokerage-accounts/spec.md", "specs/openspec/specs/engineering-change-governance/spec.md", "specs/openspec/specs/frontend-data-resilience/spec.md", "specs/openspec/specs/frontend-loading-presentation/spec.md", "specs/openspec/specs/frontend-quality-guardrails/spec.md", "specs/openspec/specs/frontend-query-coherence/spec.md", "specs/openspec/specs/frontend-ui-resilience/spec.md", "specs/openspec/specs/multi-repository-delivery/spec.md", "specs/openspec/specs/openspec-authority-and-lifecycle/spec.md", "specs/openspec/specs/portfolio-view/spec.md", "specs/openspec/specs/project-documentation/spec.md", "specs/openspec/specs/project-foundation/spec.md", "specs/openspec/specs/tbank-connection/spec.md", "specs/openspec/specs/user-authentication/spec.md", "specs/openspec/specs/workspace-artifact-hygiene/spec.md" ], "fingerprint": "sha256:42e412e4ee45f765bad83639561db8fb5cf8aadeef3283b6543a5ca7152d724d" } ```