29 KiB
Audit remediation registry
Назначение
Это versioned реестр текущего состояния remediation для findings из технического аудита 20.08.2026. Аудит — неизменяемый source of facts; этот документ хранит только приоритет, статус, путь продолжения и evidence последующих решений.
Правила работы
- Каждая audit-derived запись имеет один статус:
planned,active,done,deferredилиaccepted. - Одновременно допускается не более одного
activeremediation 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
- Bootstrap change:
2026-08-23-establish-audit-remediation-workflow—archived; это process foundation и не закрывает ни одного Audit ID. - Последний завершённый audit remediation change:
2026-08-24-tighten-frontend-quality-guardrails—archived; WL-P3-02, WL-P3-03, WL-P3-05 и WL-P3-06 закрыты. - Активных audit remediation changes нет.
Следующая задача
tighten-backend-request-feedback: выбрать policy для unknown request fields и
зафиксировать её в новом OpenSpec change для WL-P3-01.
Реестр 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, 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 | planned | — | Пересмотреть при включении accessibility в MVP scope. | — |
| 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-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.