Files
docs/development/audit-remediation.md
T

26 KiB
Raw Blame History

Audit remediation registry

Назначение

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

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

  • Каждая audit-derived запись имеет один статус: planned, active, done, deferred или accepted.
  • Одновременно допускается не более одного active remediation change. При отсутствии active change раздел «Следующая задача» содержит ровно один рекомендуемый change.
  • done требует даты, archive path OpenSpec change, commit для каждого затронутого Git-репозитория и точных non-mutating verification commands с observed results.
  • deferred и accepted требуют даты, rationale и review trigger либо ссылки на явное решение владельца.
  • При смене статуса обновляется только этот реестр; versioned audit snapshot не редактируется.

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

Следующая задача

tighten-frontend-quality-guardrails: закрыть WL-P3-02--WL-P3-06 одним OpenSpec change. Change ещё не создан; начать с согласования требований для import-cycle/FSD boundary, accessibility, bundle budget и coverage ratchet.

Реестр findings

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 deferred — Пересмотреть после следующей stable Prisma: три чистых migrate deploy на Node 22 должны пройти подряд. 2026-08-23; Prisma 7.9.1 на Node 22 воспроизводимо возвращает пустой schema-engine error даже для fresh SQLite DB; published latest также 7.9.1.
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.
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; 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 planned tighten-frontend-quality-guardrails (ещё не создан) Добавить cycle rule и leaf import. —
WL-P3-03 Восстановить FSD public API boundary. frontend planned tighten-frontend-quality-guardrails (ещё не создан) Расширить dependency rule. —
WL-P3-04 Исправить базовые language/loading accessibility semantics. frontend planned tighten-frontend-quality-guardrails (ещё не создан) Добавить semantic status primitive. —
WL-P3-05 Ввести пропорциональный bundle regression budget. frontend planned tighten-frontend-quality-guardrails (ещё не создан) Проверить route splitting boundaries. —
WL-P3-06 Добавить coverage ratchet только как regression signal. frontend planned tighten-frontend-quality-guardrails (ещё не создан) Зафиксировать baseline после risk tests. —
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; 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; hygiene check passed.

История registry

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

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 commit указан в следующем registry update.
  • 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.