diff --git a/audits/2026-10-11/README.md b/audits/2026-10-11/README.md index eb2de69..db73641 100644 --- a/audits/2026-10-11/README.md +++ b/audits/2026-10-11/README.md @@ -4,7 +4,7 @@ frontend, backend, specs и docs. Программа управляется Gitea Issues; этот архив сохраняет доказательства и решения triage, а не текущие статусы задач. -Главный Issue: ссылка будет добавлена после подтверждённого создания в Gitea. +Главный Issue: [Technical Audit Remediation — WealthLedger — 2026-10-11](https://git.personal.ksv741.ru/WealthLedger/main/issues/23). Нормализованный реестр и задачи: [triage](triage.md). ## Исследованные revisions @@ -86,3 +86,29 @@ integrity validators не вводятся: версии архива прина Архив публикуется в task branch `codex/audit-remediation-2026-10-11` от свежего `origin/develop`. Локальный commit без подтверждённого push не считается публикацией. Release/version bump из названия программы не следует. + +Первый архивный commit `0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e` успешно +отправлен и прочитан через Gitea; отчёты в нём неизменяемы. Финальные README и +triage доступны в той же remote task branch и имеют фактические Issue URLs. + +## Gitea программа + +39 нормализованных engineering topics поставляются 43 working Issues: +40 новых и 3 повторно используемых. Главный navigation Issue создан отдельно; +итого 41 новое Issue и 44 participating Issues. Все новые задачи неназначены; +существующие assignees/тексты сохранены, audit supplements добавлены comments. + +| Repository | Milestone | Participating Issues | +| --- | --- | --- | +| main | [milestone 1](https://git.personal.ksv741.ru/WealthLedger/main/milestone/1) | 3, включая главный Issue | +| backend | [milestone 4](https://git.personal.ksv741.ru/WealthLedger/backend/milestone/4) | 23 | +| frontend | [milestone 3](https://git.personal.ksv741.ru/WealthLedger/frontend/milestone/3) | 11 | +| specs | [milestone 5](https://git.personal.ksv741.ru/WealthLedger/specs/milestone/5) | 5 | +| docs | [milestone 2](https://git.personal.ksv741.ru/WealthLedger/docs/milestone/2) | 2 | + +Milestones не имеют due date. Переиспользованы organization labels; +8 новых repo-scoped labels — 5 audit и 3 investigation. Создание org labels +отвергнуто недостатком organization-owner permission; repo-scoped fallback +подтверждён. Для reused Issues назначение labels сделано через replace_labels: +обычный issue update в MCP их не применяет. Оба ограничения API обработаны. +Native dependencies установлены и прочитаны обратно, cycles отсутствуют. diff --git a/audits/2026-10-11/triage.md b/audits/2026-10-11/triage.md index 9eb6dbe..7af3efb 100644 --- a/audits/2026-10-11/triage.md +++ b/audits/2026-10-11/triage.md @@ -25,45 +25,45 @@ verification owners и четыре title-trigger owners поставляютс | Topic | Priority / owner | Результат / Issue | | --- | --- | --- | -| T01 | P1 backend | Hourly completion, durable recovery и executable coordinator proof | -| T02 | P1 backend | Latest complete forecast, persisted identity, saved filtering и failed-source policy proof | -| T03 | P2 backend | Eligibility после пропущенных long-walk terms | -| T04 | P2 backend | Повторное обновление mutable calendars с сохранением fallback | -| T05 | P2 backend | Local Income и только missing requested Ledger interval; прямой interval planner | -| T06 | P2 backend | Permanent invalid-token translation на всех online entrypoints | -| T07 | P2 backend | Accounts/Income meta получает resource-relevant durable hourly attempt | -| T08 | P2 backend | UTF-8 password bounds и согласованный OpenAPI artifact | -| T09 | P2 backend | Auth token-role, expiry и cookie regression distinctions | -| T10 | P2 backend | Dead manual/discovery producer closure, orphan DTO, active readers/fences сохранены | -| T11 | P2 backend | Проверенное compatibility решение для status/observe consumers | -| T12 | P2 backend | Настоящие source races, post-write rollback и controlled completion вместо sleeps | -| T13 | P2 backend | Self-contained HTTP scenarios и отсутствие uncontrolled scheduler | -| T14 | P2 backend + frontend | Соразмерные local gates; backend single preparation; frontend lean pre-commit | -| T15 | P2 backend | Один adapter-supported SQLite driver, native/durability guarantees сохранены | -| T16 | P2 backend | Удалены только неподдерживаемые unused direct compiler dependencies | -| T17 | P2 backend | Bounded banking page relations вместо per-row loaders, adoption по измерению | -| T18 | P3 backend | Один safe publicInstrument projection owner | -| T19 | P3 backend | Малый real SQLite workload runner-regression при тех же safety assertions | -| T20 | P2 frontend | Query-owned read lifecycle; disabled/session gating; pruning unused observe/facade | -| T21 | P2 frontend | Source/client failure visibility и GET-only recovery инвестиционных sections | -| T22 | P2 frontend | Cold/cached banking read recovery без потери сумм/draft | -| T23 | P3 frontend | Один payment-system tuple у существующей bank-card schema | -| T24 | P2 frontend | Auth navigation disabled для pointer/keyboard во время submit | -| T25 | P2 frontend | Late-response assertions после полного settlement проигравшего | -| T26 | P2 frontend | Явное решение о видимости CURRENCY без double counting | -| T27 | P2 frontend | Согласованный Events screen contract и актуальные test oracles | -| T28 | P3 frontend | Native openapi-typescript --check вместо custom temp wrapper | -| T29 | P2 specs | Task-first/documentation authority без competing audit/feature trees | -| T30 | P2 specs | Пять точных current capability entries в AI_INDEX | -| T31 | P2 specs | Достоверный completion disposition, оригинальный archive не переписан | -| T32 | P2 specs | Meaningful committed-range CI check; native validation scope явно определён | -| T33 | P2 docs | Непротиворечивое current hourly/local/online объяснение | -| T34 | P3 frontend + backend + specs + docs | Title edit перезапускает только commits proof | -| T35 | P2 main | Generic workflow applicability, evidence reuse, approval precedence и nvm bootstrap | -| T36 | P2 main | Проверка live provider credential handling без раскрытия значения | -| T37 | P2 backend | Published screener constraints согласованы с target и HTTP boundary | -| T38 | P2 backend | Пассивная проверка реального auth perimeter/admission policy | -| T39 | P2 backend | Независимый prices RPC стартует вместе с выбранными bond details | +| T01 | P1 backend | [#56: Hourly completion/recovery и executable proof](https://git.personal.ksv741.ru/WealthLedger/backend/issues/56) | +| T02 | P1 backend | [#55: Latest complete forecast/identity/filtering/failure policy](https://git.personal.ksv741.ru/WealthLedger/backend/issues/55) | +| T03 | P2 backend | [#54: Long-walk eligibility](https://git.personal.ksv741.ru/WealthLedger/backend/issues/54) | +| T04 | P2 backend | [#53: Mutable calendars/fallback](https://git.personal.ksv741.ru/WealthLedger/backend/issues/53) | +| T05 | P2 backend | [#57: Local Income/narrow Ledger interval](https://git.personal.ksv741.ru/WealthLedger/backend/issues/57) | +| T06 | P2 backend | [#59: Online invalid-token translation](https://git.personal.ksv741.ru/WealthLedger/backend/issues/59) | +| T07 | P2 backend | [#58: Accounts/Income hourly meta](https://git.personal.ksv741.ru/WealthLedger/backend/issues/58) | +| T08 | P2 backend | [#60: Password bytes/artifact](https://git.personal.ksv741.ru/WealthLedger/backend/issues/60) | +| T09 | P2 backend | [#61: Auth role/expiry/cookie regressions](https://git.personal.ksv741.ru/WealthLedger/backend/issues/61) | +| T10 | P2 backend | [#62: Dead producer closure](https://git.personal.ksv741.ru/WealthLedger/backend/issues/62) | +| T11 | P2 backend | [#64: Legacy reader compatibility](https://git.personal.ksv741.ru/WealthLedger/backend/issues/64) | +| T12 | P2 backend | [#63: Source races/rollback/barriers](https://git.personal.ksv741.ru/WealthLedger/backend/issues/63) | +| T13 | P2 backend | [#65: HTTP case isolation](https://git.personal.ksv741.ru/WealthLedger/backend/issues/65) | +| T14 | P2 backend + frontend | [backend #66: Single preparation](https://git.personal.ksv741.ru/WealthLedger/backend/issues/66); [frontend #62: Lean local gates/hook](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/62) | +| T15 | P2 backend | [#67: Compatible SQLite driver](https://git.personal.ksv741.ru/WealthLedger/backend/issues/67) | +| T16 | P2 backend | [#4, reused: Compiler dependencies](https://git.personal.ksv741.ru/WealthLedger/backend/issues/4#issuecomment-1083) | +| T17 | P2 backend | [#68: Banking page batches](https://git.personal.ksv741.ru/WealthLedger/backend/issues/68) | +| T18 | P3 backend | [#69: Single publicInstrument projection](https://git.personal.ksv741.ru/WealthLedger/backend/issues/69) | +| T19 | P3 backend | [#72: Small real runner workload](https://git.personal.ksv741.ru/WealthLedger/backend/issues/72) | +| T20 | P2 frontend | [#54: Query-owned lifecycle/eligibility/API pruning](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/54) | +| T21 | P2 frontend | [#55: Investment source/client feedback](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/55) | +| T22 | P2 frontend | [#57: Banking read recovery](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/57) | +| T23 | P3 frontend | [#58: Payment-system tuple](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/58) | +| T24 | P2 frontend | [#56: Pending auth navigation](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/56) | +| T25 | P2 frontend | [#61: Late-response client barriers](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/61) | +| T26 | P2 frontend | [#59: CURRENCY visibility decision](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/59) | +| T27 | P2 frontend | [#63: Events screen contract/oracles](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/63) | +| T28 | P3 frontend | [#60: Native OpenAPI check](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/60) | +| T29 | P2 specs | [#1, reused: Documentation authority](https://git.personal.ksv741.ru/WealthLedger/specs/issues/1#issuecomment-1080) | +| T30 | P2 specs | [#28: Five capability index entries](https://git.personal.ksv741.ru/WealthLedger/specs/issues/28) | +| T31 | P2 specs | [#29: Completion disposition](https://git.personal.ksv741.ru/WealthLedger/specs/issues/29) | +| T32 | P2 specs | [#2, reused: Meaningful committed CI input](https://git.personal.ksv741.ru/WealthLedger/specs/issues/2#issuecomment-1067) | +| T33 | P2 docs | [#34: Current system explanation](https://git.personal.ksv741.ru/WealthLedger/docs/issues/34) | +| T34 | P3 frontend + backend + specs + docs | [frontend #64](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/64), [backend #74](https://git.personal.ksv741.ru/WealthLedger/backend/issues/74), [specs #30](https://git.personal.ksv741.ru/WealthLedger/specs/issues/30), [docs #35](https://git.personal.ksv741.ru/WealthLedger/docs/issues/35): title edit proof | +| T35 | P2 main | [#24: Generic applicability/evidence/approval/bootstrap](https://git.personal.ksv741.ru/WealthLedger/main/issues/24) | +| T36 | P2 main | [#25: Private provider credential investigation](https://git.personal.ksv741.ru/WealthLedger/main/issues/25) | +| T37 | P2 backend | [#70: Published screener constraints](https://git.personal.ksv741.ru/WealthLedger/backend/issues/70) | +| T38 | P2 backend | [#73: Actual auth perimeter evidence](https://git.personal.ksv741.ru/WealthLedger/backend/issues/73) | +| T39 | P2 backend | [#71: Independent prices/detail start](https://git.personal.ksv741.ru/WealthLedger/backend/issues/71) | P1 обоснован финансовой publication/recovery boundary, а не частотой упоминаний. T34 понижен до P3: это metadata policy proof, не financial/security runtime bug. @@ -309,6 +309,64 @@ Labels организации переиспользуются: Priority/High=P1 Kind/Bug, Enhancement, Testing, Documentation. Reviewed/status labels не используются для дублирования lifecycle. Assignees новых Issues не угадываются. -Read-back URLs/metadata, итоговые counts и опубликованные revisions будут -добавлены после фактического создания. Полный application verify, build, -tests, codegen, migration и реальная финансовая сеть в planning не запускались. +Все 44 participating Issues прочитаны обратно через API: 43 working и один +[главный Issue](https://git.personal.ksv741.ru/WealthLedger/main/issues/23). +Новых Issues 41 (40 working + navigation), reused 3. Working priorities: +P1=2, P2=33, P3=8; navigation дополнительно P2. 39 topics, не 190 Issues. + +| Source disposition | Count | +| --- | --- | +| FIX | 31 | +| REFACTOR | 0 | +| SIMPLIFY | 20 | +| DELETE | 8 | +| INVESTIGATE | 7 | +| KEEP | 40 | +| DUPLICATE | 67 | +| NO_ACTION | 17 | +| Total | 190 | + +Source disposition и Issue kind — разные единицы: структурные simplification/ +deletion tasks используют existing Kind/Enhancement без дублирующего kind label. +Оригинальные user-authored тела/assignees reused #4/#1/#2 сохранены; supplements +даны comments с stable markers. Старые priority префиксы в titles исторические, +актуальный campaign priority задаёт единственный Priority/Medium label. + +Непривязанных actionable findings: 0. Все INVESTIGATE имеют Issue либо bounded +proof внутри соответствующего fix. Два findings явно требуют недоступного +внешнего private input: RISK-008 (actual proxy) и RC-17 (actual local credential +owner); это 2 mapped external-evidence blockers, не подтверждённые runtime bugs. +Product/compatibility decisions T05/T11/T20/T26/T27/T29 и original completion +review T31 остаются named preconditions, сроки/ответы не выдуманы. Отдельный +publication blocker — один original report, не потерянный finding. + +Native dependency read-back: backend #53 → backend #55; frontend #63 → backend +#55; specs #2 → specs #4 (исходные native toolchain criteria, Git-range portion +можно исправить независимо). Других technical blocking edges нет, cycles нет. + +Новые labels: 8 repo-scoped, только используемые. Organization label creation +вернуло permission denial, resolved repo fallback; MCP issue update не меняет +labels, resolved dedicated replace_labels для reused Issues. Необработанных +API write failures нет. Milestone URLs проверены HTTP 200, due dates пусты. + +Final read-back: 44 Issues и 44 уникальных stable markers, 0 template/metadata +errors; у каждого ровно один priority, один primary kind, audit label и нужный +milestone. 59 linked Git resources существуют на указанных commits; главный +Issue перечисляет все 43 working Issues. Все 8 новых labels реально используются. +Первая широкая параллельная HEAD-проверка прервана connection timeout, не +ошибкой созданной сущности. Заменена адресным API/Git read-back и последовательным +HTTP check: campaign, README, triage, original archive и все 5 milestones — 200. +Этот verification transport failure обработан; полный parallel URL scan +успешным не объявляется. + +Дополнительные cross-audit signals/open questions не удваивают finding count. +SDD DR-08 одноразовый pilot/transition — NO_ACTION до конкретной потребности; +off-host backup/dummy hashing/logout bounded access/native lifecycle — KEEP +существующих guarantees, без заявлений об их live verification. Ни история, +ни role/security protections не удаляются ради неподтверждённой экономии. + +Root gates: original/archived Git blob equality, redacted Gitleaks exit 0, +staged allowlist review, semantic/Boy Scout review, diff check и commitlint. +Первый archive push/read-back успешен; финальные links публикуются вторым commit +в той же task branch. Полный application verify, build, tests, codegen, +migration и реальная финансовая сеть в planning не запускались.