89 KiB
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 как проверенное решение ничего не внедрять. - Одновременно допускается не более одного
activeremediation 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
- Bootstrap change:
2026-08-23-establish-audit-remediation-workflow—archived; это process foundation и не закрывает ни одного Audit ID. - Последний завершённый audit remediation change:
2026-09-06-complete-frontend-audit-remediation—archived; FE26-02–FE26-18 закрыты, FE26-01 сохраняет прежнее evidence. - Единственный active change: отсутствует.
Текущая задача
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. |
2026-09-13 — WL-P2-11: переход на Node 24 LTS
Продолжение bootstrap policy из WL-P2-11, части 14.backend/frontend/docs рабочего TODO. Node 24.21.0 / npm 11.19.0 выбран по официальному каталогу релизов и расписанию поддержки: ветка Krypton LTS поддерживается до 30.04.2028.
.nvmrc frontend/backend/docs фиксируют 24.21.0, engines — 24.x.
Backend @types/node обновлён до 24.13.3; runtime dependencies не обновлялись.
Npm дополнил backend lockfile платформенными optional dependencies существующего
resolver. Для npm 11.19 явно разрешены install scripts сборочных зависимостей
с pin версий. Инструкция переустановки и отката — в
локальном окружении.
Specs продолжает наследовать frontend runtime; самостоятельный bootstrap CLI
из части 14.specs и CI остаются отдельными незавершёнными задачами.
Проверки относятся к frontend 53c852b, backend ce24a84, docs c74c573,
specs 834f2d1 с текущим diff перехода Node:
npm ciв frontend/backend/docs — PASS; backend native modules установлены под Node 24,npm run buildс генерацией Prisma client — PASS.- Frontend
npm run verify— PASS: 46 files, 268 tests, coverage, OpenAPI drift, TypeScript, Biome, Knip, dependency boundaries, приложение и Storybook. Прогон одновременно с установкой backend упирался в UI timeout; отдельный повтор полного gate прошёл без изменения тестов или их таймаутов. - Backend
npm run verify— PASS: 35 suites, 257 tests, lint, оба typecheck и build. - Backend
npm run test:e2e— PASS: 8 suites, 98 tests; новая SQLite и штатные migrations для каждой suite, включая runtime OpenAPI. Для HTTP-портов нужен запуск вне sandbox. Рабочая БД не использовалась. - Docs
npm run verify— PASS: 54 Markdown-файла, 0 issues;git diff --checkво всех четырёх repos — PASS. - OpenSpec CLI 1.10.0, существующая установка, исполненная Node 24.21.0:
schema validate wealth-ledger-sdd --verboseиvalidate --specs --strict --store wealth-ledger-specs— PASS, 25 specs.
История 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вместо строки, implicitany/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, backendN/A, specs affected, docs affected; runtime OpenAPI contract gateN/A, потому что application runtime API и generated client не менялись. - Затронутые Git-репозитории: specs
a8b2c4eed988f7e1a7b3d6b7188bbe6791f00e2a(feat: harden OpenSpec SDD workflow), docs delivery72c3a8a6683b95f7e734044fdabe568668097c33(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/backendN/A, specs/docs affected, runtime-openapiN/A; OpenSpec CLI 1.10.0 verified; planning coverage 9/9; schema valid; change valid; main specs 20/20; authority verified; docsnpm run verifypassed 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— updatedaudit-remediation-workflow,engineering-change-governance,multi-repository-deliveryandopenspec-authority-and-lifecycle; archived as2026-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 verifyindocs— 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
.opencodeprojection and rootAGENTS.mdwere updated locally; the workspace root is not a Git repository. - Затронутые Git-репозитории: frontend
11be786943024699a4eccf91a8d1ad32a6d29e5f(chore: codify frontend local verification), backend2772d53647132e6119e411c6d18234db4301e541(chore: codify backend local verification), specs0006aea56207ad2192c678ced562feabf1a21c45(chore: harden SDD governance workflow), docs delivery1944f2fc970db2bdc292981e01b1aca549f9ac52(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, frontendnpm run verifypassed (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), backendnpm run verifypassed (19 suites / 59 tests, build), docsnpm run verifypassed (34 Markdown files, 0 issues), runtime OpenAPI SHA-256 matched snapshot96744da5f307b37ee3d9233b3259043425f65e49bcc60f78b46c585a78251db4.- После 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), specs2029519(docs(specs): archive frontend quality guardrails), docsfa5db07(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 committedsrc82.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/archiveopenspec 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), backend6052565(fix: harden backend runtime artifact hygiene), specs8897bd9(docs(specs): archive dependency hygiene remediation), docs60a1c33(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). Runtimedev.dbудалён из Git; intentional textual fixtures остаются versionable.npm audit --omit=devвсё ещё показывает три high по Prisma CLI pathprisma -> @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), backendfec542a(docs: refresh backend onboarding), specs9f68ae5(fix(specs): remove archived change duplicateпосле archive commit5b7bc0f), docs88c0cd3(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), backend9bd3400(fix: align auth success status contract), specs800450d(docs(specs): archive api contract resilience remediation), docsb91280c(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-25696744da5f307b37ee3d9233b3259043425f65e49bcc60f78b46c585a78251db4совпали.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), specs6e20cdf(docs(specs): archive auth and cache remediation), docs8568e7b(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; после syncopenspec 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), backend71d57d6(fix: make backend local verification safe), specs72444db(docs(specs): archive local verification remediation), docs293df9c(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; после syncopenspec 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); backendfee4f8c(docs: define canonical OpenSpec store); specs51344d4(docs(specs): harden OpenSpec authority lifecycle); docs0bc8d1c(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 commitb8a3f96(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, 0active, 0done, одна «Следующая задача»; все четыре 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.