Files
docs/development/audit-remediation.md
T

86 KiB
Raw Blame History

Audit remediation registry

Назначение

Это единый versioned реестр текущего состояния remediation для findings из всех технических audit snapshots. Каждый аудит — неизменяемый source of facts; этот документ хранит только текущий статус, путь продолжения и evidence последующих решений, не копируя полный текст finding.

Правила работы

  • Каждая audit-derived запись имеет один статус: planned, active, done, deferred или accepted.
  • Каждое уникальное external claim дополнительно имеет независимый triage disposition: confirmed, already-covered, rejected или deferred. Повтор одного underlying claim в нескольких reports получает один Audit ID со ссылкой на каждый source. Disposition не является remediation status: confirmed ещё может быть active, а rejected — accepted как проверенное решение ничего не внедрять.
  • Одновременно допускается не более одного active remediation change. Пока он существует, продолжается только он. При наличии planned ровно одна запись отмечается следующей рекомендуемой задачей, но она не запускается параллельно active change.
  • Новая запись done требует даты и ссылки на фактически выполненную работу и её проверки (например, commit/PR или существующее evidence). OpenSpec archive не является обязательным; не создавайте отдельные artifacts только ради статуса.
  • deferred и accepted требуют даты, rationale и review trigger либо ссылки на явное решение владельца.
  • При смене статуса обновляется только этот реестр; versioned audit snapshot не редактируется.

Текущая проверка результата определена в engineering governance. Исторические записи ниже, прежние ссылки на completion-evidence.md в docs и датированные audit snapshots сохраняются без переноса или переписывания задним числом.

Датированные dispositions ниже описывают проверки и решения своего времени; они не восстанавливают прежние SDD prerequisites. Live ссылки ведут к текущим owners, а историческое evidence сохраняется по исходным адресам.

Текущее состояние workflow

Текущая задача

Frontend audit remediation завершена; Completion Evidence содержит archive, delivery commits, verification и независимый verdict. Следующий remediation change создаётся после выбора владельцем продолжения.

Следующая рекомендуемая задача

assess-auth-platform-options для AUD24-02. Change применит Solution Assessment к существующей реализации и зрелым auth platforms, включая Better Auth, и не предрешает миграцию.

Реестр findings

Frontend audits: август 2026

Источник: три неизменяемых snapshots. G — общий audit от 31 августа, A28 — audit от 28 августа, S — structural audit от 31 августа. Все 22 source findings сопоставлены 18 underlying claims ниже; одинаковые F IDs без source prefix неоднозначны.

Дата сопоставления и закрытия FE26-02–FE26-18: 06.09.2026. Completion Evidence содержит общий archive path, delivery commits всех четырёх областей, точные commands/results и независимый PASS. already-covered обозначает прежнюю реализацию, подтверждённую текущей проверкой, без фиктивной повторной implementation task. Реализация прежних исправлений находится во frontend c97f62b и backend 55b100d; эти идентификаторы не доказывают исторические approvals или gates.

Audit ID Нормализованный claim Sources Disposition Remediation status Evidence / текущее состояние
FE26-01 Общая граница финансового кэша при смене T-Bank connection. FE-A28 F1; FE-S F-01 already-covered done 01.09.2026; archive, delivery commits, gates и independent review — существующее Completion Evidence.
FE26-02 Проверять соответствие generated types OpenAPI snapshot. FE-A28 F2; FE-G F-01 already-covered done 06.09.2026; FE26-E. check-openapi включён в verify; snapshot/types проверяются offline. Pre-commit состав честно описан в conventions.
FE26-03 Events должен соблюдать принятую VM/view границу. FE-A28 F3 confirmed done 06.09.2026; FE26-E. Events VM владеет route/query/state/retry; container использует прежние views. Остальные named pages уже разделены; см. FE26-13.
FE26-04 Покрыть успешный public login journey. FE-G F-02 already-covered done 06.09.2026; FE26-E. AppRoutes tests: форма, нормализованные credentials, реальный AuthProvider/MSW и protected landing.
FE26-05 Безопасно отклонять невозможные календарные даты. FE-G F-03 already-covered done 06.09.2026; FE26-E. Income VM проверяет finite date до ISO conversion; regression tests покрывают invalid date и leap year.
FE26-06 Включить type-only dependencies в public API guardrail. FE-G F-04 already-covered done 06.09.2026; FE26-E. dependency-cruiser включает tsPreCompilationDeps; shared API экспортирует paths.
FE26-07 Дать общим display/API primitives нейтральных владельцев. FE-G F-05; FE-S F-07 already-covered done 06.09.2026; FE26-E. shared display владеет Money/date/logo; apiErrorCode объединяет transport extraction. S F-07 расширяет тот же ownership claim API helper; повторной реализации нет.
FE26-08 Синхронизировать entrypoint docs с фактическими gates. FE-G F-06 already-covered done 06.09.2026; FE26-E. Frontend README, conventions и workflow описывают существующие команды, не обещая удалённые runtime/hygiene checks.
FE26-09 Убрать механическое обязательное дробление каждого component. FE-G F-07 already-covered done 06.09.2026; FE26-E. UI pattern сохраняет semantic ownership и допускает tightly-coupled renderers; это guidance, а не line-count gate. Конкретное разделение крупных modules учтено отдельно FE26-13.
FE26-10 Объединить protected query policy и endpoint query identity ownership. FE-G F-08; FE-S F-05 already-covered done 06.09.2026; FE26-E. App defaults, T-Bank VM и entity-owned options operations/portfolio; status использует общий authenticated query seam.
FE26-11 Централизовать test cleanup и auth reset. FE-S F-02 already-covered done 06.09.2026; FE26-E. Test setup: RTL cleanup, auth reset, MSW handler reset в общем afterEach.
FE26-12 Убрать повтор server identity из Income view/model. FE-S F-03 confirmed done 06.09.2026; FE26-E. Backend income service передаёт instrumentKey; Income VM проверяет и группирует готовую связь, не вычисляя identity.
FE26-13 Выделить самостоятельные ответственности семи крупных TSX modules. FE-S F-04 already-covered done 06.09.2026; FE26-E. Income/Events/Accounts/Account state views, route fallback, guards, breadcrumbs и T-Bank loaded section выделены во frontend c97f62b.
FE26-14 Устранить повтор test client policy и нестабильный cache lifetime. FE-S F-06 confirmed done 06.09.2026; FE26-E. Test query factory используется оставшимися auth/T-Bank harnesses; auth test проверяет сохранение client и seeded cache при rerender.
FE26-15 Перенести компонентные стили из global CSS к владельцам. FE-S F-08 already-covered done 06.09.2026; FE26-E. Global styles содержат базовые правила; AppShell, breadcrumbs и auth используют CSS Modules, StateView — Mantine props.
FE26-16 Исправить source connectedAt contract вместо String coercion. FE-S F-09 already-covered done 06.09.2026; FE26-E. Backend DTO задаёт nullable date-time string; frontend consumer не скрывает неверный transport type через String.
FE26-17 Перенести auth validation и payment invariants из JSX к model owners. FE-S F-10 already-covered done 06.09.2026; FE26-E. Auth validation, ledger display владеют соответствующими правилами.
FE26-18 Удалить redundant position modes и test-only proxy exports. FE-S F-11 already-covered done 06.09.2026; FE26-E. PositionCard выводит mode из kind; StateView не экспортирует Mantine Button; page barrels сохраняют product surface.

Повторный multi-source review WealthLedger SDD v2 26.08.2026

Шесть исходных reports находятся в immutable snapshot set. Сокращения: D2 — DeepSeek, G2 — Gemini, Gr2 — Grok, K2 — Kimi, Q2 — Qwen, Z2 — Z.AI. Оценки и предложенные patches не принимаются без сопоставления с воспроизводимым project invariant.

Audit ID Нормализованный claim Sources Disposition Remediation status Evidence, rationale или review trigger
SDD26R2-01 Сократить и визуально приоритизировать instructions, сохранив самодостаточные critical rules и единый основной язык. D2, Gr2, Z2 confirmed done 2026-08-26; archive; specs 8462a3ba75d6dda491b9221699357c58d8f8e3cc, 779a1e1305f8c209a4f98fae7f87718e48d61b37; docs d80e2e32b2ebadcd93a53105e1ac337fe2c1f4f6; commands/results: Completion Evidence.
SDD26R2-02 Delta Spec template не должен предрешать ADDED и должен показывать все допустимые operations без активных пустых sections. K2 confirmed done 2026-08-26; тот же archive, delivery commits и Completion Evidence.
SDD26R2-03 Planning verifier должен отличать defect артефакта от неверного invocation и failure окружения. Z2, Q2 confirmed done 2026-08-26; тот же archive, delivery commits и Completion Evidence. Retry counter отклонён владельцем как лишнее состояние.
SDD26R2-04 Apply должен читать точные native contextFiles и локальные правила affected repositories. K2 confirmed done 2026-08-26; тот же archive, delivery commits и Completion Evidence; отдельный context mapping не введён.
SDD26R2-05 N/A rationale должно объяснять техническую необходимость, но его смысл нельзя надёжно валидировать простым text heuristic. Q2 confirmed done 2026-08-26; тот же archive, delivery commits и Completion Evidence; semantic sufficiency оставлена owner/reviewer.
SDD26R2-06 Граница mechanical Apply fix должна явно исключать Requirement, Scenario, architecture и Verification changes. Q2, Z2 confirmed done 2026-08-26; тот же archive, delivery commits и Completion Evidence.
SDD26R2-07 Exact Requirement heading в Covers нужно копировать дословно и проверять детерминированно. Z2 already-covered accepted 2026-08-26; SDD26-12 уже требует exact heading, а planning verifier отклоняет неизвестную reference и uncovered Requirement. Review trigger: удаление или ослабление exact-reference check.
SDD26R2-08 Добавить Target Repositories в Proposal или расширить owner area произвольными repository paths. G2, Gr2 rejected accepted 2026-08-26; Proposal сохраняет intent без implementation topology; фиксированная Delivery Map отражает фактические четыре repos. Пересмотреть только при добавлении новой delivery area в workspace.
SDD26R2-09 Хранить machine-readable approval markers внутри versioned artifacts. Gr2, K2 rejected accepted 2026-08-26; approval identity принадлежит разговору с Change Owner. Marker дублировал бы external state и мог бы ложно выглядеть действующим после upstream change. Review trigger: воспроизводимый случай ложного approval после потери conversation state.
SDD26R2-10 Добавить отдельные verify/archive/DoD artifacts или phase. Gr2, K2 already-covered accepted 2026-08-26; SDD26-11 уже закрыт dispatcher, semantic verification, independent review, hard archive blockers и post-archive Completion Evidence без второго workflow artifact. Review trigger: доказанный terminal gap, который эти gates не выражают.
SDD26R2-11 Ослабить последовательность Specs → Design для exploratory feasibility. Gr2 rejected accepted 2026-08-26; production change сохраняет утверждённый behavior до architecture. Throwaway feasibility work допустима вне Apply, но не становится versioned parallel plan. Review trigger: повторяемый change, где безопасная feasibility work блокируется текущим graph.
SDD26R2-12 Вынести Solution Assessment в отдельный artifact. Gr2 rejected accepted 2026-08-26; conditional section остаётся в Design, где сравнение вариантов непосредственно обосновывает architecture; отдельный artifact усложнил бы graph без нового invariant. Review trigger: появление independently reusable assessment с отдельным approval owner.
SDD26R2-13 Требовать отдельную workspace-task для semantic review каждого change. Gr2 already-covered accepted 2026-08-26; terminal semantic verification и independent read-only review обязательны; workspace task создаётся в Tasks для orchestration, когда она нужна delivery plan. Review trigger: semantic review, пропущенный из-за отсутствия task-level representation.
SDD26R2-14 Добавить Success Metrics в Proposal. Gr2 rejected accepted 2026-08-26; observable acceptance принадлежит Requirements и Scenarios. Универсальные metrics в intent artifact создавали бы неподтверждённые цели без измеримого project need. Review trigger: утверждённая product metric, которую нельзя выразить Requirements/Scenarios.
SDD26R2-15 Вести schema changelog рядом с version field. Gr2 rejected accepted 2026-08-26; versioned Git history, OpenSpec change и archive уже фиксируют rationale и diff. Второй changelog не добавляет authority. Review trigger: наблюдаемая невозможность восстановить schema migration из canonical history.
SDD26R2-16 Добавить CI/CD validation. D2 deferred deferred 2026-08-26; текущий contract сознательно использует canonical local gates под Node 22. Review trigger: появление project CI.
SDD26R2-17 Добавить dependencies между changes, sizing задач и commit convention. K2 already-covered accepted 2026-08-26; dependencies остаются deferred в SDD26-15 до реального conflict; sizing отклонён в SDD26-16, commit convention — в SDD26-19. Review triggers наследуются из этих записей; повторный report не даёт нового evidence.
SDD26R2-18 Exact schema version и criteria Solution Assessment отсутствуют или недостаточны. D2 already-covered accepted 2026-08-26; .cli-version, schema version, controlled upgrade contract и explicit assessment trigger areas уже закреплены schema/governance. Review trigger: assessment, для которого текущие trigger areas не дают однозначного решения.

Multi-source assessment WealthLedger SDD 26.08.2026

Raw external reports и checksums находятся в immutable snapshot set. Сокращения источников: D — DeepSeek, G — Gemini, K — Kimi, Q — Qwen, Z — Z.AI. Ни одна внешняя рекомендация сама по себе не является project authority.

Audit ID Нормализованный claim Sources Disposition Remediation status Evidence, rationale или review trigger
SDD26-01 Снизить instruction bloat и устранить конкурирующих владельцев общих правил. D, G, Q, Z confirmed done 2026-08-26; 2026-08-26-harden-openspec-sdd-quality: schema v2 владеет semantics, templates — shape, config — только facts/language, scripts — hard invariants; отдельный _rules.md не вводится.
SDD26-02 Проверять planning format машинно до approval и автоматически исправлять технические ошибки. D, Z confirmed done 2026-08-26; stage-aware non-mutating verifier, controlled-invalid fixtures и format-only retry path поставлены в 2026-08-26-harden-openspec-sdd-quality.
SDD26-03 Каждая task должна иметь однозначную delivery area; multi-repo implementation нужно разделять. D, G, Z confirmed done 2026-08-26; schema v2 использует [frontend|backend|specs|docs|workspace]; planning verifier отклоняет owner из N/A area.
SDD26-04 Добавить Target Repositories уже в Proposal. G rejected accepted 2026-08-26; Proposal остаётся owner-readable intent без implementation topology. Полный scope repositories определяется позже через обязательную Design Delivery Map.
SDD26-05 Явно координировать порядок и совместимость multi-repository delivery. D, G already-covered accepted 2026-08-26; Delivery Map, Contract Gate Decision, Migration Plan и workspace dispatcher уже задают owners, порядок, совместимость API и canonical gates.
SDD26-06 Формализовать trigger для Solution Assessment. D already-covered accepted 2026-08-26; engineering governance и schema перечисляют auth, security, storage, integrations, observability, caching, concurrency и shared tooling.
SDD26-07 Не допускать Design/Apply по неутверждённым artifacts. D, K, Z already-covered accepted 2026-08-26; human approval хранится в разговоре, one-artifact entrypoints останавливаются, downstream approvals каскадно инвалидируются. Фиктивный approval.md или status field не создаётся.
SDD26-08 Разрешить partial/diff MODIFIED вместо полного requirement block. D rejected accepted 2026-08-26; native OpenSpec archive semantics требуют полного MODIFIED; собственный merge format создал бы второй transformation engine и риск потери scenarios.
SDD26-09 Дать компактные примеры сложных delta operations. D, K confirmed done 2026-08-26; schema v2 добавляет MODIFIED, REMOVED и RENAMED examples, сохраняя minimal ADDED-first template.
SDD26-10 Генерировать в spec.md placeholders всех delta sections. K rejected accepted 2026-08-26; пустые sections повышают шум и риск неверной операции. Complex forms принадлежат instructions/examples, а template остаётся минимальным.
SDD26-11 Явно определить DoD, verification и archive после Apply. D, K, Q already-covered accepted 2026-08-26; engineering governance, workspace dispatcher, semantic verification, independent review и hard archive blockers уже образуют terminal protocol. Completion Evidence создаётся после факта, не в Tasks.
SDD26-12 Связать каждую task с точными Delta Requirements и отклонять uncovered requirements. D, K confirmed done 2026-08-26; schema v2 использует native identity capability path — exact Requirement heading; planning verifier проверяет ссылки и полное покрытие без собственного ID namespace.
SDD26-13 Добавить Fast Track или сокращённую вторую schema для мелких fixes. G rejected accepted 2026-08-26; один lifecycle сохраняет предсказуемые approvals и archive blockers. Пропорциональность обеспечивают skip_specs, conditional assessment/rollback и узкие tasks.
SDD26-14 Ограничивать agent context через tool-specific .aiignore и список repos из Proposal. G rejected accepted 2026-08-26; это не portable OpenSpec invariant. Context ограничивается Delivery Map, task owner и targeted reads; dependencies/build outputs уже исключаются локальными tool/repository rules. Пересмотреть при наблюдаемом context exhaustion.
SDD26-15 Ввести общий blocked_by/blocks graph между changes. K deferred deferred Review trigger: первый реальный случай двух одновременно необходимых changes с доказанной ordering dependency, которую нельзя выразить текущим single-active-remediation rule.
SDD26-16 Добавить priority и sizing в Tasks. K rejected accepted 2026-08-26; Tasks уже dependency-ordered и ограничены одной рабочей сессией. Оценочные points не защищают observable invariant и создают неподтверждённую точность.
SDD26-17 Для труднообратимых changes нужен проверяемый rollback contract. K confirmed done 2026-08-26; Design template и planning verifier требуют trigger/actions/data safety/verification для risk cases либо конкретный N/A reason.
SDD26-18 Добавить отдельный multi-repo context mapping file. K already-covered accepted 2026-08-26; native openspec instructions ... --json уже возвращает planningHome, contextFiles, artifactPaths и config context. Второй context map дублировал бы CLI state.
SDD26-19 Зафиксировать commit-message convention в schema. K rejected accepted 2026-08-26; commit style не меняет artifact correctness и принадлежит repository delivery policy только при появлении отдельного проверяемого требования.
SDD26-20 Сделать enterprise sections условными, чтобы снизить overhead. Q already-covered accepted 2026-08-26; Solution Assessment уже conditional, rollback допускает содержательный N/A; Delivery Map и Contract Gate Decision остаются обязательными, потому что защищают multi-repo scope.
SDD26-21 Добавить явный feedback loop из Design/Apply в ранний затронутый artifact. Q confirmed done 2026-08-26; schema v2 и agent entrypoints маршрутизируют intent→Proposal, behavior→Specs, architecture/rollback→Design, decomposition→Tasks и инвалидируют downstream approvals.
SDD26-22 Создавать blocker.md и revision-request.md при каждом blocker/revision. Q rejected accepted 2026-08-26; новые workflow artifacts не поддерживаются native schema и быстро устаревают. Наблюдаемое основание сообщается Change Owner в разговоре; durable artifact добавится только при реальном повторяемом trigger.
SDD26-23 Требовать regression test для любой изменённой логики и happy-path test для любой новой. Q already-covered accepted 2026-08-26; risk-based testing требует tests для существенных рисков и regressions, но осознанно отклоняет универсальные малоценные tests ради каждого logic/file change.
SDD26-24 Добавлять Completion Summary в конец Tasks. Q rejected accepted 2026-08-26; Tasks содержат только planned work. Observed results и commits появляются после выполнения в verification/archive evidence, иначе checklist смешивает план и факты.
SDD26-25 Требовать точный текстовый STOP_PROTOCOL после каждого artifact. Z rejected accepted 2026-08-26; обязательная остановка и явный approval уже enforced entrypoints. Фиксация одной строки ответа хрупка и не усиливает identity или semantic approval.
SDD26-26 Сократить explanation planningHome.root до короткого imperative. Z rejected accepted 2026-08-26; пояснение предотвращает ошибочное вычисление path при store-backed и local modes OpenSpec 1.10. После удаления duplicate config rules instruction source остаётся приемлемым; пересмотреть при измеренном context regression.
SDD26-27 Добавить дополнительные contract gates вроде internal-proto. G deferred deferred Review trigger: появление второго реального межсервисного committed contract, для которого runtime-openapi и repository gates недостаточны. До этого generic gate будет speculative.
SDD26-28 Root project-owned agent projection должна восстанавливаться из versioned authority. local triage confirmed done 2026-08-26; superseded by follow-up cleanup: root .opencode остаётся local non-authority entrypoint без versioned projection source; hard constraints остаются в schema, docs и authority verifier.
SDD26-29 Exact OpenSpec version должна быть единым compatibility contract, а не вечным literal в scripts/fixtures. local triage confirmed done 2026-08-26; .cli-version остаётся единственным current contract; markers/verifiers выводят expected value из него, новая stable не включает auto-upgrade.
SDD26-30 Raw multi-source evidence и triage должны быть versioned раздельно. local triage confirmed done 2026-08-26; пять reports сохранены byte-for-byte в snapshot set; live registry хранит dispositions и statuses отдельно.

Аудит 13.08.2026

Audit ID Текущий статус Связь и следующее действие Terminal evidence или trigger
A-01 done См. WL-P2-03. CAS rotation и regression test, 2026-08-23.
A-02 accepted Ограниченная revocation model закреплена в ADR 006; access token живёт 15 минут. Пересмотреть, если продукт потребует немедленный отзыв access token.
A-03 deferred Production transport исключён из local MVP scope. Пересмотреть перед hosted deployment или reverse-proxy contract.
A-04 done docs/features/tbank-connection.md описывает поставленные Accounts, Portfolio, Ledger и Future Events. Current-state docs проверены 2026-08-24.
A-05 done См. WL-P1-03 и WL-P1-04. Canonical root и hard archive lifecycle, 2026-08-23.
A-06 done См. WL-P2-10. Architecture/development onboarding и link review, 2026-08-24.
A-07 done См. WL-P2-02. P2002 mapping и concurrent registration regression, 2026-08-23.
A-08 planned Объединить validation payload review с tighten-backend-request-feedback. Готово к выбору после active change.
A-09 planned Operations cache закрыт WL-P2-01; отдельно оценить session retention/index. Создать scoped change после решения приоритета.
A-10 deferred Текущая operational mitigation описана в T-Bank feature doc. Пересмотреть при наблюдаемой потере metadata или новом large-portfolio SLA.
A-11 done Исправлено и подтверждено самим snapshot 13.08.2026. Transport tests и единый Bearer owner.
A-12 done Исправлено в snapshot; дополнительно защищено WL-P3-03. Dependency boundary fixture passed, 2026-08-24.
A-13 deferred Frontend behavior закрыт; backend e2e зависит от WL-P2-05. Тот же stable Prisma trigger, что у WL-P2-05.
A-14 done 2026-08-24-harden-agent-sdd-governance. 2026-08-24; canonical SDD governance, local guardrails and completion evidence protocol verified.
A-15 done 2026-08-24-harden-agent-sdd-governance. 2026-08-24; current-state ADR/spec contradictions fixed and strict specs passed.
A-16 done 2026-08-24-harden-agent-sdd-governance. 2026-08-24; layered AGENTS and onboarding verified.
A-17 deferred Совпадает с accessibility scope WL-P3-04. Пересмотреть при включении accessibility/second locale в MVP scope.
A-18 done 2026-08-24-harden-agent-sdd-governance. 2026-08-24; main spec H1 normalized and strict validation passed.

Аудит 24.08.2026

Audit ID Цель Статус Связанный change Следующее действие / evidence
AUD24-01 Ввести risk-based testing без тестов ради файла или coverage. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; risk-based testing policy and gates recorded.
AUD24-02 Оценивать mature solutions и ретроспективно проверить auth platform. planned assess-auth-platform-options Готово к созданию change; миграция не предрешена.
AUD24-03 Закрепить строгий artifact graph и роли OpenSpec. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; one-artifact approvals, cascade reapproval and artifact roles verified.
AUD24-04 Синхронизировать agent projection и hard archive blockers. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; project entrypoints and authority verifier reject bypass cases.
AUD24-05 Добавить canonical repo gates и workspace dispatcher. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; workspace dispatcher ran all affected gates and runtime OpenAPI.
AUD24-06 Ввести docs-as-code gate и authoritative process policy. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; docs npm run verify passed and engineering governance is durable docs.
AUD24-07 Сделать AGENTS компактными routing/enforcement layers. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; root and repository AGENTS layers verified.
AUD24-08 Охватить одним registry все audit snapshots и исправить stale status. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; registry covers all 53 audit IDs with one snapshot source each.
AUD24-09 Исправить current-state ADR/spec contradictions. done 2026-08-24-harden-agent-sdd-governance 2026-08-24; ADR/spec contradictions fixed without editing audit snapshots.

P1

Audit ID Цель Репозитории Статус Связанный change Следующее действие Terminal evidence
WL-P1-01 Один владелец React Query cache identity. frontend done 2026-08-23-stabilize-frontend-query-and-strict-contracts — 2026-08-23; frontend 1250581, specs b8a3f96; npm run verify — passed (16 files, 48 tests).
WL-P1-02 Сделать strict TypeScript исполняемым gate и устранить 16 ошибок. frontend done 2026-08-23-stabilize-frontend-query-and-strict-contracts — 2026-08-23; frontend 1250581, specs b8a3f96; strict typecheck and full npm run verify passed.
WL-P1-03 Установить единственный canonical OpenSpec root. specs done 2026-08-23-harden-openspec-authority-and-lifecycle — 2026-08-23; frontend d870d53, backend fee4f8c, specs 51344d4, docs 0bc8d1c; authority verifier и 15 strict specs passed.
WL-P1-04 Сделать archive lifecycle доказательством завершённости. specs, docs done 2026-08-23-harden-openspec-authority-and-lifecycle — 2026-08-23; frontend d870d53, backend fee4f8c, specs 51344d4, docs 0bc8d1c; hard archive gate и independent review passed.
WL-P1-05 Разделить non-mutating lint check и auto-fix backend. backend done 2026-08-23-make-local-verification-agent-safe — 2026-08-23; backend 71d57d6, specs 72444db, docs 293df9c; npm run lint, app/test typecheck и 17 suites / 51 tests — passed.

P2

Audit ID Цель Репозитории Статус Связанный change Следующее действие Terminal evidence
WL-P2-01 Ограничить размер и eviction operations cache. backend, specs, docs done 2026-08-23-harden-auth-and-cache-concurrency — 2026-08-23; backend c77b3cf, specs 6e20cdf, docs 8568e7b; Node 22 lint, app/test typecheck и 56 unit tests passed.
WL-P2-02 Вернуть предсказуемый 409 при конкурентной регистрации. backend, specs, docs done 2026-08-23-harden-auth-and-cache-concurrency — 2026-08-23; backend c77b3cf, specs 6e20cdf, docs 8568e7b; P2002 mapping and barrier regression test passed.
WL-P2-03 Сделать refresh rotation атомарной. backend, specs, docs done 2026-08-23-harden-auth-and-cache-concurrency — 2026-08-23; backend c77b3cf, specs 6e20cdf, docs 8568e7b; CAS one-winner regression test passed.
WL-P2-04 Синхронизировать runtime, OpenAPI и auth success statuses. backend, frontend done 2026-08-24-align-api-contract-and-client-resilience — 2026-08-24; backend 9bd3400, frontend 6d892da, specs 800450d, docs b91280c; metadata regression, frontend OpenAPI check и runtime/snapshot SHA совпали.
WL-P2-05 Восстановить runnable backend e2e gate. backend done — — 2026-09-13; унаследованный RUST_LOG изолирован в Prisma config, 3 последовательных и 2 параллельных полных e2e passed. Результаты.
WL-P2-06 Добавить проходящий app/test TypeScript gate backend. backend done 2026-08-23-make-local-verification-agent-safe — 2026-08-23; backend 71d57d6, specs 72444db, docs 293df9c; npm run typecheck:app и npm run typecheck:test — passed. 2026-09-13: включён strict по P1-10.
WL-P2-07 Сохранять cached data во время background refetch. frontend done 2026-08-24-align-api-contract-and-client-resilience — 2026-08-24; frontend 6d892da, specs 800450d, docs b91280c; observable Accounts/Portfolio refetch tests и npm run verify — passed (17 files, 55 tests).
WL-P2-08 Нормализовать cold-start refresh failure. frontend done 2026-08-24-align-api-contract-and-client-resilience — 2026-08-24; frontend 6d892da, specs 800450d, docs b91280c; cold-start и protected-401 transport-failure tests passed.
WL-P2-09 Проверять backend runtime OpenAPI против frontend snapshot. backend, frontend done 2026-08-23-make-local-verification-agent-safe — 2026-08-23; frontend 7a3048c, backend 71d57d6, specs 72444db, docs 293df9c; runtime и snapshot SHA-256 совпали, frontend npm run openapi:check — passed.
WL-P2-10 Актуализировать onboarding и постоянную документацию. docs, frontend, backend, specs done 2026-08-24-refresh-project-documentation-and-agent-entrypoints — 2026-08-24; frontend be80ef2, backend fec542a, specs 9f68ae5, docs 88c0cd3; OpenSpec/authority, link-path review и independent review passed.
WL-P2-11 Зафиксировать одинаковый local bootstrap frontend/backend. frontend, backend, docs done 2026-08-23-make-local-verification-agent-safe — 2026-08-23; frontend 7a3048c, backend 71d57d6, specs 72444db, docs 293df9c; Node 22 policy и npm ci guidance зафиксированы.
WL-P2-12 Проверить применимость high dependency advisories. frontend, backend, specs, docs done 2026-08-24-address-dependency-advisories-and-repo-hygiene — 2026-08-24; frontend 826936c, backend 6052565, specs 8897bd9, docs 60a1c33; React Router обновлён, Prisma tooling risk принят с review trigger.
WL-P2-13 Дать одному agent workflow единый local verify interface. frontend, backend, specs, docs deferred — Вернуться после восстановления WL-P2-05 тем же Prisma trigger; затем выбрать минимальный общий interface. 2026-08-23; полный общий verdict не может быть достоверно зелёным, пока обязательный backend e2e migration gate блокируется Prisma 7.9.1.

P3

Audit ID Цель Репозитории Статус Связанный change Следующее действие Terminal evidence
WL-P3-01 Сделать unknown request fields явной ошибкой или документированной policy. backend planned tighten-backend-request-feedback (ещё не создан) Выбрать validation policy. —
WL-P3-02 Устранить shared i18n import cycle. frontend done 2026-08-24-tighten-frontend-quality-guardrails — 2026-08-24; frontend 1fc269a, specs 2029519, docs fa5db07; Node 22 npm run verify — passed.
WL-P3-03 Восстановить FSD public API boundary. frontend done 2026-08-24-tighten-frontend-quality-guardrails — 2026-08-24; frontend 1fc269a, specs 2029519, docs fa5db07; dependency fixture gate — passed.
WL-P3-04 Исправить базовые language/loading accessibility semantics. frontend deferred — Пересмотреть при включении accessibility в MVP scope. 2026-08-24; текущий local MVP scope не включает accessibility remediation.
WL-P3-05 Ввести пропорциональный bundle regression budget. frontend done 2026-08-24-tighten-frontend-quality-guardrails — 2026-08-24; frontend 1fc269a, specs 2029519, docs fa5db07; initial JS payload 509,165 B ≤ 512,000 B.
WL-P3-06 Добавить coverage ratchet только как regression signal. frontend done 2026-08-24-tighten-frontend-quality-guardrails — 2026-08-24; frontend 1fc269a, specs 2029519, docs fa5db07; coverage 82.57/76.08/77.35/83.48% — passed.
WL-P3-07 Защитить рабочий .env от случайного commit. frontend, specs, docs done 2026-08-24-address-dependency-advisories-and-repo-hygiene — 2026-08-24; frontend 826936c, specs 8897bd9, docs 60a1c33; hygiene check passed.
WL-P3-08 Исключить runtime SQLite DB из Git. backend, specs, docs done 2026-08-24-address-dependency-advisories-and-repo-hygiene — 2026-08-24; backend 6052565, specs 8897bd9, docs 60a1c33; hygiene check passed.

История registry

Terminal evidence добавляется сюда только после завершения соответствующего change.

2026-09-13 — WL-P2-05: воспроизводимый SQLite e2e

Закрыты TODO 03 и 03.docs, повторно проверен SQLite scope 11. Backend 8637ad2 с текущим diff, Node 22.21.0 / Prisma 7.9.1. Schema, migrations, зависимости и HTTP-контракт не менялись.

  • До исправления fresh migration: RUST_LOG=warn и error — exit 1 с пустым Schema engine error; переменная отсутствует или равна info — exit 0. В исходном окружении было RUST_LOG=warn. Это воспроизведённая зависимость запуска от окружения, а не доказательство внутреннего дефекта Rust engine.
  • Prisma config исключает унаследованный RUST_LOG после dotenv. Общий runner даёт каждому suite свою DB и один URL для migration/Jest, отклоняет прямой Jest без изоляции и очищает каталог после ошибки или сигнала.
  • npm run verify — PASS: zero-warning lint, app/test types, 35 suites / 257 unit tests, Prisma generation и build.
  • Docs npm run verify — PASS: Markdown, ссылки/якоря и git diff --check.
  • npm run test:e2e — PASS: 8 suites / 98 tests, включая runtime OpenAPI.
  • node test/sqlite-regression.cjs — PASS: три последовательных и два параллельных полных e2e (каждый 98 tests, всего 40 разных DB); внешний вымышленный файл неизменён. Недоступный schema engine возвращает exit 1; SIGINT/SIGTERM — 130/143. Все 43 созданных DB-каталога удалены.
  • npm run test:durability -- /tmp/p111-baseline — PASS: отдельная baseline сборка 8ec172f48eefa2237dc0c16919fbb2e726b39a65, additive migration, сохранение User/Session/TbankConnection, банковской истории и защиты повторов, restart, откат приложения и backup/restore. RUST_LOG=info удалён из runner; для старого baseline унаследованная переменная также исключается.
  • HTTP/durability проверены вне sandbox после воспроизведения запрета локальных портов EPERM. Это ограничение среды, не failing migration. Пользовательская DB и .env не использовались как цель записи.

Логи этой проверки: /tmp/wl-sqlite-verify.log, /tmp/wl-sqlite-e2e-1.log, /tmp/wl-sqlite-regression.log, /tmp/wl-sqlite-durability.log. Подробные regression logs сохранены в системном temp-каталоге wealthledger-sqlite-regression-pSyuoe, durability — wealthledger-bank-durability-V0u1NA. Эти локальные временные логи могут быть удалены системой; воспроизводимые команды и матрица рисков остаются в backend. Исторические evidence ниже сохранены без переписывания.

2026-09-13 — P1-12: backend responsibilities

Статус: done. Backend commit 8ba0053.

BankCards разделён на services карт, операций и категорий, сценарий сводки и конкретный repository. Общая transaction/retry boundary, ownership, idempotency, optimistic concurrency и ограничения возвратов сохранены. Stock/bond services разделены по каталогу, рынку и доходам; связные operations и T-Bank client сохранены. Business modules отделены от integrations; сложные modules используют слои ответственности, компактные остаются плоскими.

  • npm run verify — passed: lint, app/test typecheck, 35 suites / 257 tests, build.
  • Восемь существующих HTTP/e2e suites выполнены временным runner /tmp/wl-modular-http.cjs: отдельная SQLite DB на suite, migrations с RUST_LOG=info, configured HTTP, 118 tests passed. OpenAPI совпадает с frontend snapshot. Общий e2e blocker и статус задачи 03 этим не закрываются.
  • Финальный перенос 47 файлов проверен сравнением 142 исходников/tests: различий кроме относительных путей и форматирования нет.
  • Formatter, docs npm run verify, lint backend conventions и git diff --check прошли. Новые dependencies и architecture tests не добавлены.

2026-09-13 — P1-11: реальная SQLite

P1-11 поставлена в backend commit 7fde3ec. Дополнено доказательство WL-P2-03; статус общего e2e WL-P2-05 не меняется. Команды и матрица рисков — backend README.

  • npm run test:sqlite — два последовательных успешных запуска после фиксации loopback-listener: 8 auth и 21 карточный HTTP/SQLite test. Каждый suite получает собственную временную DB; Prisma не мокируется. Барьер перед CAS гарантирует, что оба refresh прочитали прежний hash; победившая сессия переживает replay.
  • Существующие карточные tests покрывают owner links, idempotency/tombstones, версии, конкурентные refund/archive/write, rollback source lock, атомарный перевод, точные суммы и FK/unique constraints. Новая тестовая платформа не нужна.
  • npm run test:durability -- /tmp/p111-baseline — PASS: migration, restart, previous-app rollback, backup/restore и чтение сохранённой финансовой истории. Baseline экспортирован из 8ec172f48eefa2237dc0c16919fbb2e726b39a65 и собран отдельно. Его lockfile совпадает с текущим; при этой проверке переиспользованы установленные node_modules. README также описывает независимый npm ci. Runner проверяет наличие build и неизменённый префикс migration history.
  • Node 22.21.0: npm run verify — PASS (35 suites, 257 unit tests, zero-warning lint, оба typecheck, Prisma generate и build).
  • Первые HTTP-запуски с автоматическим открытием/закрытием сервера Supertest дали плавающий 404. Suites теперь держат один loopback-listener до app.close(); повторные проверки прошли. Sandbox требует разрешения на локальный порт.
  • Миграции выполнены с RUST_LOG=info. Это подтверждение выбранных DB-сценариев, не снятие прежнего ограничения общего test:e2e и не выполнение задачи 03.

2026-09-13 — WL-P2-06: strict TypeScript

Поставка backend: commit 346a6f0 (refactor: enforce strict backend typing).

По продолжению P1-10 в общем tsconfig включён strict: true без отключения отдельных strict-проверок; noFallthroughCasesInSwitch сохранён отдельно. Убраны избыточные настройки, которые теперь включает strict.

После замечания владельца вариант с definite-assignment ! заменён: в 14 файлах 315 полей DTO объявлены через declare. Заполнение входных DTO принадлежит Nest/class-transformer, ответные DTO описывают возвращаемые объекты. declare не генерирует поля со значением undefined и не подменяет проверку входных данных. Optional/nullable-типы, декораторы и валидация сохранены. В TbankClient getOpenAccounts и getDividends задают тип результата на call<Response>, как соседние RPC; тип параметра .then выводится из этого результата.

В ESLint включён @typescript-eslint/no-non-null-assertion: error. Он не охватывает field!: Type, поэтому no-restricted-syntax отдельно запрещает definite-assignment ! в свойствах и переменных. Устранены также 51 прежний non-null assertion и четыре definite-assignment assertions в тестах: используются сужение типов, локальные значения, типизированные результаты фильтрации и runtime assertions в тестах. Транзакции, проверки доступа, cache generation и денежная точность сохранены; отсутствующая категория в сводке приводит к явной внутренней ошибке.

Проверено на Node 22.21.0, backend 3cf883e с указанными изменениями:

  • npm run verify — passed: lint без warnings, strict app/test typechecks, 35 Jest suites / 257 tests, Prisma generation и production build.
  • DATABASE_URL=file:/tmp/wealthledger-declared-dto-openapi-20260913.db npm run test:openapi-contract — passed, 1 test; frontend snapshot не менялся.
  • TypeScript Compiler API подтвердил все strict options в app/test/build/dev configs. Каждый config отклоняет шесть примеров: неинициализированное поле, несовместимый callback, null вместо строки, implicit any/this, доступ к unknown в catch (TS2564, TS2345, TS2322, TS7006, TS2683, TS18046).
  • Проверка ESLint через lintText подтверждает ошибки для value!, field! и let value!; декларация DTO без ! разрешена.
  • Новые тесты ValidationPipe проходят до и после замены деклараций: обязательные credentials, нормализация email, вложенные money DTO и обязательный version с optional-полями PartialType. Дополнены проверки инструментов без UID; отдельный тест проверяет имя категории и ошибку при нарушенной ссылке в банковской сводке.
  • NODE_ENV=development NODE_OPTIONS=--experimental-vm-modules npx jest --config test/jest-e2e.json --runInBand bank-cards.e2e-spec.ts с новой DATABASE_URL=file:/tmp/bank-cards-*/test.db — passed, 21 tests, включая реальные миграции, валидацию HTTP, права владельца, возвраты, транзакции и перезапуск. Runner использует RUST_LOG=info для миграций. Первый прогон дал 19 passed / 2 timeout в сценариях возвратов и потребовал остановки оставшегося Jest-процесса. Повтор на новой базе прошёл 21/21; исходный 3cf883e в отдельной копии с теми же dependencies также прошёл 21/21. Это не доказательство стабильности общего e2e gate.
  • Полный strict проходит; 317 diagnostics из предыдущей оценки устранены. Общий DB/e2e gate и ограничение WL-P2-05 остаются отдельной задачей.

2026-09-13 — WL-P2-06: backend TypeScript

Выполнен пункт P1-10 списка инженерных улучшений от 13.09.2026 как продолжение существующего TypeScript gate. В общем tsconfig включены noImplicitAny, strictBindCallApply, noFallthroughCasesInSwitch; app/test typechecks, production и dev build наследуют эти настройки. Исходный код, зависимости, unsafe-checks и публичный API не менялись.

Проверено на Node 22.21.0, backend 3cf883e с указанным изменением tsconfig:

  • npm run verify до и после изменения — passed: zero-warning ESLint, оба TypeScript gate, 33 Jest suites / 253 tests, Prisma generation и build.
  • Проверка через TypeScript Compiler API с виртуальным ошибочным файлом для каждого из четырёх configs — passed: implicit-any параметр даёт TS7006, неверные аргументы call/apply/bind — TS2345/TS2322, проваливание switch — TS7029. Контроль с выключенными тремя flags принимает тот же файл.
  • DATABASE_URL=file:/tmp/wealthledger-p1-10-openapi-20260913.db npm run test:openapi-contract — passed, 1 test; runtime OpenAPI совпал с frontend snapshot.
  • npx tsc --project tsconfig.typecheck.test.json --incremental false --strict --noImplicitAny --strictBindCallApply --noFallthroughCasesInSwitch --pretty false — оценка полного strict: 317 diagnostics, из них 315 TS2564 для полей DTO и две TS2345 в TbankClient.getOpenAccounts / getDividends из-за callback для Promise<unknown>. Полный strict пока не включён; это отдельный этап.
  • Общий DB/e2e gate не запускался; WL-P2-05 сохраняет прежний статус.

2026-08-26 — SDD26-01–SDD26-03, SDD26-09, SDD26-12, SDD26-17, SDD26-21, SDD26-28–SDD26-30: done

Change синхронизирован в canonical specs и архивирован в 2026-08-26-harden-openspec-sdd-quality.

  • Delivery Map: frontend N/A, backend N/A, specs affected, docs affected; runtime OpenAPI contract gate N/A, потому что application runtime API и generated client не менялись.
  • Затронутые Git-репозитории: specs a8b2c4eed988f7e1a7b3d6b7188bbe6791f00e2a (feat: harden OpenSpec SDD workflow), docs delivery 72c3a8a6683b95f7e734044fdabe568668097c33 (docs: record SDD audit remediation); terminal evidence фиксируется следующим docs commit.
  • Pre-archive bash specs/scripts/verify-workspace-change.sh harden-openspec-sdd-quality под Node 22.21.0 — passed: Delivery Map verified frontend/backend N/A, specs/docs affected, runtime-openapi N/A; OpenSpec CLI 1.10.0 verified; planning coverage 9/9; schema valid; change valid; main specs 20/20; authority verified; docs npm run verify passed with 36 Markdown files and 0 issues.
  • Controlled fixture suites: bash specs/scripts/verify-agent-projection.test.sh — passed at delivery time; follow-up cleanup later removed the projection layer. bash specs/scripts/verify-openspec-authority.test.sh — passed with expected controlled-negative failures.
  • Archive: openspec archive harden-openspec-sdd-quality -y --store wealth-ledger-specs — updated audit-remediation-workflow, engineering-change-governance, multi-repository-delivery and openspec-authority-and-lifecycle; archived as 2026-08-26-harden-openspec-sdd-quality.
  • Post-archive verification: openspec validate --specs --strict --store wealth-ledger-specs — 20 passed, 0 failed; bash specs/scripts/verify-openspec-authority.sh — passed; openspec schema validate wealth-ledger-sdd --verbose — passed; PATH=/Users/ksv741/.nvm/versions/node/v22.21.0/bin:$PATH npm run verify in docs — passed.
  • Semantic verification: Proposal, all 9 Delta Spec requirements, 28 scenarios, Design and 18/18 tasks matched implementation. Independent read-only review found no Critical or Important findings.

2026-08-24 — AUD24-01, AUD24-03–AUD24-09, A-14–A-16, A-18: done

Change синхронизирован в canonical specs и архивирован в 2026-08-24-harden-agent-sdd-governance.

  • Delivery Map: frontend affected, backend affected, specs affected, docs affected; runtime OpenAPI contract gate required because frontend/backend contract verification pipelines changed. Workspace root .opencode projection and root AGENTS.md were updated locally; the workspace root is not a Git repository.
  • Затронутые Git-репозитории: frontend 11be786943024699a4eccf91a8d1ad32a6d29e5f (chore: codify frontend local verification), backend 2772d53647132e6119e411c6d18234db4301e541 (chore: codify backend local verification), specs 0006aea56207ad2192c678ced562feabf1a21c45 (chore: harden SDD governance workflow), docs delivery 1944f2fc970db2bdc292981e01b1aca549f9ac52 (docs: record AI governance audit); terminal evidence фиксируется следующим docs commit.
  • bash specs/scripts/verify-workspace-change.sh harden-agent-sdd-governance под Node 22.21.0 — passed: Delivery Map verified for all four areas, OpenSpec CLI 1.10.0 verified, schema valid, change valid before archive, main specs 18/18 before sync, authority verified, frontend npm run verify passed (17 test files / 56 tests, coverage 82.57% statements / 76.08% branches / 77.35% functions / 83.48% lines, production build, initial JS 509,165 B), backend npm run verify passed (19 suites / 59 tests, build), docs npm run verify passed (34 Markdown files, 0 issues), runtime OpenAPI SHA-256 matched snapshot 96744da5f307b37ee3d9233b3259043425f65e49bcc60f78b46c585a78251db4.
  • После sync/archive openspec validate --specs --strict --store wealth-ledger-specs — 20 passed, 0 failed; git diff --check в frontend, backend, specs и docs — exit 0 before delivery commits.
  • Semantic verification: Proposal, all 19 Delta Spec requirements, Design and 25/25 tasks matched implementation. Independent read-only re-review after fixes: Spec review 19/19, 0 Critical, 0 Important, 0 Minor semantic findings; Standards review final — no findings.

2026-08-24 — WL-P3-02, WL-P3-03, WL-P3-05, WL-P3-06: done

Change синхронизирован в canonical specs и архивирован в 2026-08-24-tighten-frontend-quality-guardrails.

  • Затронутые Git-репозитории: frontend 1fc269a (feat: enforce frontend quality guardrails), specs 2029519 (docs(specs): archive frontend quality guardrails), docs fa5db07 (docs: activate frontend quality guardrails remediation); terminal evidence фиксируется следующим docs commit.
  • Frontend под Node 22.21.0: npm run verify — passed: OpenAPI and hygiene checks, strict TypeScript, Biome, 17 test files / 56 tests, coverage all committed src 82.57% statements / 76.08% branches / 77.35% functions / 83.48% lines, Knip, dependency gate с четырьмя fixtures, production build и bundle gate. Initial JavaScript payload — 509,165 B при budget 512,000 B; committed lazy baselines включают все dynamic route boundaries, включая ProtectedLayout.
  • openspec validate tighten-frontend-quality-guardrails --type change --strict --store wealth-ledger-specs — passed до archive; после sync/archive openspec validate --specs --strict --store wealth-ledger-specs — 18 passed, 0 failed; bash specs/scripts/verify-openspec-authority.sh и git diff --check по затронутым repositories — passed.
  • opsx-verify не установлен как shell executable; выполнена эквивалентная процедура из .opencode/skills/openspec-verify-change/SKILL.md: completeness 21/21 tasks, 3 requirements / 7 scenarios, correctness и coherence — без blocking findings. Independent read-only review нашёл три Important guardrail gaps; после fixes re-review — без Critical или Important findings.
  • WL-P3-04 остаётся planned по явному решению owner: application accessibility semantics не входят в текущий MVP scope. Следующая единственная recommended задача — tighten-backend-request-feedback для WL-P3-01.

2026-08-24 — WL-P2-12, WL-P3-07, WL-P3-08: done

Change синхронизирован в canonical specs и архивирован в 2026-08-24-address-dependency-advisories-and-repo-hygiene.

  • Затронутые Git-репозитории: frontend 826936c (fix: harden frontend dependency and env hygiene), backend 6052565 (fix: harden backend runtime artifact hygiene), specs 8897bd9 (docs(specs): archive dependency hygiene remediation), docs 60a1c33 (docs: record dependency hygiene remediation evidence).
  • Frontend под Node 22: npm run verify — passed: OpenAPI check, hygiene check, strict TypeScript check, Biome, 17 test files / 55 tests, coverage, Knip, dependency check и production build. npm audit --omit=dev — 0 vulnerabilities; прямой react-router обновлён с 7.9.6 до 7.18.2 для GHSA-2w69-qvjg-hvjx.
  • Backend под Node 22: npm run hygiene:check, npm run lint, npm run typecheck:app, npm run typecheck:test и npm test -- --runInBand — passed (19 suites, 59 tests). Runtime dev.db удалён из Git; intentional textual fixtures остаются versionable. npm audit --omit=dev всё ещё показывает три high по Prisma CLI path prisma -> @prisma/config -> deepmerge-ts для GHSA-ggr8-5vv4-36mx: public runtime path не найден, риск принят как tooling-only. Review trigger: совместимый stable Prisma release должен устранить deepmerge-ts < 8.0.0, либо появится доказуемый runtime call path.
  • npm run test:e2e остаётся deferred по WL-P2-05: prisma migrate deploy на чистой temporary SQLite DB завершается пустым Schema engine error до Jest. Это не менялось данным change.
  • bash specs/scripts/verify-openspec-authority.sh — passed; openspec validate --specs --strict --store wealth-ledger-specs — 17 passed, 0 failed; git diff --check по четырём репозиториям — passed. Эквивалентная opsx-verify процедура подтвердила 13/13 tasks, correctness и coherence. Независимый read-only review после исправлений — без Critical, Important или Minor findings.

2026-08-24 — WL-P2-10: done

Change синхронизирован в canonical specs и архивирован в 2026-08-24-refresh-project-documentation-and-agent-entrypoints.

  • Затронутые Git-репозитории: frontend be80ef2 (docs: refresh frontend onboarding), backend fec542a (docs: refresh backend onboarding), specs 9f68ae5 (fix(specs): remove archived change duplicate после archive commit 5b7bc0f), docs 88c0cd3 (docs: refresh project onboarding entrypoints).
  • npm run verify в frontend под Node 22 — passed: OpenAPI check, strict TypeScript check, Biome, 17 test files / 55 tests, coverage, Knip, dependency check и production build.
  • Read-only link/path review — passed: 14 Markdown entrypoints без missing local links; MVP.md и CONTEXT.md удалены, а historical audit/archive references намеренно сохранены.
  • openspec validate --all --strict --store wealth-ledger-specs — 16 passed, 0 failed; bash specs/scripts/verify-openspec-authority.sh — passed; git diff --check по затронутым путям — passed.
  • Independent read-only standards/spec review выявил только Finder metadata и две неполные README links; metadata удалены, ссылки добавлены, re-review — passed. Эквивалентная opsx-verify процедура подтвердила completeness 16/16, correctness и coherence без blocking findings.

2026-08-24 — WL-P2-04, WL-P2-07, WL-P2-08: done

Change синхронизирован в canonical specs и архивирован в 2026-08-24-align-api-contract-and-client-resilience.

  • Затронутые Git-репозитории: frontend 6d892da (fix: preserve cached data during refresh failures), backend 9bd3400 (fix: align auth success status contract), specs 800450d (docs(specs): archive api contract resilience remediation), docs b91280c (docs: document auth and client refresh resilience).
  • Frontend под Node 22: npm run verify — passed: OpenAPI check, strict TypeScript check, Biome, 17 test files / 55 tests, coverage, Knip, dependency check и production build.
  • Backend под Node 22: npm run lint, npm run typecheck:app, npm run typecheck:test и npm test -- --runInBand — passed (19 suites, 59 tests). test:e2e не запускался: WL-P2-05 остаётся deferred из-за Prisma migration gate.
  • bash specs/scripts/verify-runtime-openapi.sh — passed: runtime и snapshot SHA-256 96744da5f307b37ee3d9233b3259043425f65e49bcc60f78b46c585a78251db4 совпали. openspec validate --specs --strict --store wealth-ledger-specs — 16 passed, 0 failed; authority verifier и git diff --check — passed.
  • opsx-verify выполнен эквивалентной процедурой из .opencode/skills/openspec-verify-change/SKILL.md: completeness 16/16 tasks, correctness и coherence — без blocking findings. Независимый read-only review не нашёл Critical, Important или Minor issues.

2026-08-23 — WL-P2-01, WL-P2-02, WL-P2-03: done

Change синхронизирован в main specs и архивирован в specs/openspec/changes/archive/2026-08-23-harden-auth-and-cache-concurrency.

  • Затронутые Git-репозитории: backend c77b3cf (fix: harden auth and cache concurrency), specs 6e20cdf (docs(specs): archive auth and cache remediation), docs 8568e7b (docs: record auth and cache concurrency policy).
  • Backend под Node 22: npm run lint, npm run typecheck:app, npm run typecheck:test и npm test -- --runInBand — passed (18 suites, 56 tests). test:e2e не запускался: WL-P2-05 остаётся deferred из-за Prisma migration gate.
  • openspec validate harden-auth-and-cache-concurrency --type change --strict --store wealth-ledger-specs — passed до archive; после sync openspec validate --specs --strict --store wealth-ledger-specs — 15 passed, 0 failed; authority verifier и git diff --check — passed.
  • opsx-verify не установлен как shell executable; выполнена эквивалентная процедура из .opencode/skills/openspec-verify-change/SKILL.md: completeness 12/12 tasks, correctness и coherence — без blocking findings. Independent read-only review не нашёл Critical/Important findings.

2026-08-23 — WL-P1-05, WL-P2-06, WL-P2-09, WL-P2-11: done

Change архивирован в specs/openspec/changes/archive/2026-08-23-make-local-verification-agent-safe.

  • Затронутые Git-репозитории: frontend 7a3048c (docs: document runtime OpenAPI verification), backend 71d57d6 (fix: make backend local verification safe), specs 72444db (docs(specs): archive local verification remediation), docs 293df9c (docs: document local verification workflow).
  • Backend под Node 22: npm run lint, npm run typecheck:app, npm run typecheck:test и npm test -- --runInBand — passed (17 suites, 51 tests).
  • npm run openapi:check в frontend — passed; bash specs/scripts/verify-runtime-openapi.sh — runtime и snapshot SHA-256 совпали.
  • openspec validate make-local-verification-agent-safe --type change --strict --store wealth-ledger-specs перед archive — passed; после sync openspec validate --specs --strict --store wealth-ledger-specs — 15 passed, 0 failed; authority verifier, git diff --check и independent read-only review — passed/no findings.

2026-08-23 — WL-P2-05, WL-P2-13: deferred

Под Node 22 prisma migrate deploy 7.9.1 несколько раз завершается пустым Schema engine error на новых SQLite DB до запуска Jest; при включении engine diagnostics результат меняется. npm view prisma version вернул ту же published stable версию 7.9.1. Поэтому не вводится параллельный migration runner и не создаётся общий workspace verdict с ложным зелёным статусом. Review trigger для обоих findings: следующая stable Prisma должна трижды подряд применить существующие migrations к чистой SQLite DB на Node 22.

2026-08-23 — WL-P1-03, WL-P1-04: harden-openspec-authority-and-lifecycle

Статус: done. Change синхронизирован в main specs и архивирован в specs/openspec/changes/archive/2026-08-23-harden-openspec-authority-and-lifecycle.

  • Затронутые Git-репозитории: frontend d870d53 (docs: define canonical OpenSpec store); backend fee4f8c (docs: define canonical OpenSpec store); specs 51344d4 (docs(specs): harden OpenSpec authority lifecycle); docs 0bc8d1c (docs: document OpenSpec authority lifecycle).
  • bash specs/scripts/verify-openspec-authority.test.sh — passed: positive fixture, второй OpenSpec root, implicit/conditional store selection, parenthesized invocation, archive override и framework planning location корректно отклоняются; references/** исключён.
  • bash specs/scripts/verify-openspec-authority.sh из workspace root и всех четырёх независимых repositories — OpenSpec authority verified: wealth-ledger-specs at specs/openspec.
  • openspec validate harden-openspec-authority-and-lifecycle --type change --strict --store wealth-ledger-specs — passed перед archive; openspec validate --specs --strict --store wealth-ledger-specs — 15 passed, 0 failed после sync/archive.
  • git diff --check в frontend, backend, specs и docs — exit 0 перед commits; независимый read-only review scope — Critical/Important findings отсутствуют.

2026-08-23 — WL-P1-01, WL-P1-02: stabilize-frontend-query-and-strict-contracts

Статус: done. OpenSpec change синхронизирован в main specs и архивирован в specs/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts.

  • Затронутые Git-репозитории: frontend commit 1250581 (fix: stabilize frontend query cache contracts); specs commit b8a3f96 (docs(specs): archive frontend query remediation).
  • npm run verify в frontend — passed: OpenAPI check, strict TypeScript check, Biome, 16 test files / 48 tests, coverage, Knip, dependency check и production build.
  • openspec validate stabilize-frontend-query-and-strict-contracts --type change --store wealth-ledger-specs — Change 'stabilize-frontend-query-and-strict-contracts' is valid перед archive.
  • openspec validate --specs --store wealth-ledger-specs — 14 specs passed, 0 failed перед archive.
  • git diff --check для staged OpenSpec archive/sync changes — exit 0.
  • Archive выполнен по явному разрешению владельца с одной незакрытой только административной задачей 4.2: она требует archive path и поэтому не могла быть закрыта до archive. Сразу после archive задача отмечена [x]; WL-P1-04 теперь active в harden-openspec-authority-and-lifecycle, чтобы убрать эту циклическую зависимость из будущего процесса.

2026-08-23 — bootstrap verification: establish-audit-remediation-workflow

Этот process change не закрывает Audit ID. Перед archive выполнены следующие read-only checks:

  • cmp -s audit-20-08-2026.md docs/audits/audit-20-08-2026.md — exit 0; versioned snapshot byte-for-byte совпадает с исходной локальной копией.
  • openspec validate establish-audit-remediation-workflow --type change --store wealth-ledger-specs — Change ... is valid.
  • Структурная проверка registry — 26 records, 26 planned, 0 active, 0 done, одна «Следующая задача»; все четыре agent pointers и оба registry links разрешаются.
  • git diff --check в frontend, backend, specs и docs — exit 0.
  • Независимый read-only review registry-to-audit mapping, OpenSpec links, instruction discoverability и scope diff — findings: none.
  • opsx-verify доступен как OpenCode command, но не установлен как shell executable в этой среде; выполнена эквивалентная процедура из .opencode/skills/openspec-verify-change/SKILL.md с теми же dimensions completeness, correctness и coherence.
  • Change синхронизирован в main specs и архивирован в specs/openspec/changes/archive/2026-08-23-establish-audit-remediation-workflow.