В #36 архив audits/2026-10-11/ перенесён в develop squash-merge'ем (PR #37, результат d07fbfa). Исходные коммиты 0d6344a и 7dc1c76 в develop не попали и после удаления ветки codex/audit-remediation-2026-10-11 стали недостижимы:
$ git for-each-ref --format='%(refname)' | while read r; do \
git merge-base --is-ancestor 0d6344a "$r" 2>/dev/null && echo "reachable from $r"; done
(пусто)
Issues кампании audit/2026-10-11 используют Evidence-permalink вида:
Такие ссылки отдают 404. Содержимое не потеряно — те же 19 файлов идентичны и доступны из d07fbfa.
Ожидаемое поведение
Evidence-ссылки Issues кампании открываются и ведут на те же отчёты по достижимому коммиту.
Scope
In scope
Замена 0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e → d07fbfabb1295780952a554185989d2d5b5c8349 в телах Issues кампании.
Замена 7dc1c76964da17cce6f5ad6d0c08186063901aee → d07fbfabb1295780952a554185989d2d5b5c8349 там же, включая комментарии #23.
Только часть URL с SHA. Путь audits/2026-10-11/... не менялся и правке не подлежит.
Out of scope
Текст Problem/Expected Behavior/Scope/AC — не трогаем.
Ссылки на revision исходного кода (0ad84ff, c8821200, 197ffe2 и подобные): это коммиты frontend/backend/specs, они достижимы из своих develop и остаются как есть.
Содержание отчётов: архив read-only.
Issues вне кампании (specs#1, specs#2 ссылаются на свои репозитории, dead SHA не содержат).
Затронутые Issues
44 Issue с label audit/2026-10-11:
repo
Issues
main
23, 24, 25
frontend
54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64
backend
53–74
docs
34, 35
specs
28, 29, 30
Правятся только те, в чьём теле фактически найден dead SHA.
Acceptance Criteria
Ни одно тело Issue и ни один комментарий в кампании не содержат 0d6344a или 7dc1c76 в составе permalink.
Каждая заменённая ссылка отдаёт HTTP 200 и ведёт на тот же файл отчёта.
Остальной текст Issues побайтово не изменён, кроме подменённого SHA.
Ссылки на revision прикладных репозиториев не затронуты.
Плюс выборочная проверка нескольких обновлённых URL на HTTP 200.
Ограничение: правка тел Issues необратима через API — исходные тексты сохраняются локально до завершения работы.
## Контекст
В `#36` архив `audits/2026-10-11/` перенесён в `develop` squash-merge'ем (PR `#37`, результат `d07fbfa`). Исходные коммиты `0d6344a` и `7dc1c76` в `develop` не попали и после удаления ветки `codex/audit-remediation-2026-10-11` стали недостижимы:
```
$ git for-each-ref --format='%(refname)' | while read r; do \
git merge-base --is-ancestor 0d6344a "$r" 2>/dev/null && echo "reachable from $r"; done
(пусто)
```
Issues кампании `audit/2026-10-11` используют Evidence-permalink вида:
```
https://git.personal.ksv741.ru/WealthLedger/main/src/commit/0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e/audits/2026-10-11/reports/06-backend-architecture-report.md
```
Такие ссылки отдают 404. Содержимое не потеряно — те же 19 файлов идентичны и доступны из `d07fbfa`.
## Ожидаемое поведение
Evidence-ссылки Issues кампании открываются и ведут на те же отчёты по достижимому коммиту.
## Scope
### In scope
- Замена `0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e` → `d07fbfabb1295780952a554185989d2d5b5c8349` в телах Issues кампании.
- Замена `7dc1c76964da17cce6f5ad6d0c08186063901aee` → `d07fbfabb1295780952a554185989d2d5b5c8349` там же, включая комментарии `#23`.
- Только часть URL с SHA. Путь `audits/2026-10-11/...` не менялся и правке не подлежит.
### Out of scope
- Текст Problem/Expected Behavior/Scope/AC — не трогаем.
- Ссылки на revision исходного кода (`0ad84ff`, `c8821200`, `197ffe2` и подобные): это коммиты `frontend`/`backend`/`specs`, они достижимы из своих `develop` и остаются как есть.
- Содержание отчётов: архив read-only.
- Issues вне кампании (`specs#1`, `specs#2` ссылаются на свои репозитории, dead SHA не содержат).
## Затронутые Issues
44 Issue с label `audit/2026-10-11`:
| repo | Issues |
| --- | --- |
| `main` | 23, 24, 25 |
| `frontend` | 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 |
| `backend` | 53–74 |
| `docs` | 34, 35 |
| `specs` | 28, 29, 30 |
Правятся только те, в чьём теле фактически найден dead SHA.
## Acceptance Criteria
- [ ] Ни одно тело Issue и ни один комментарий в кампании не содержат `0d6344a` или `7dc1c76` в составе permalink.
- [ ] Каждая заменённая ссылка отдаёт HTTP 200 и ведёт на тот же файл отчёта.
- [ ] Остальной текст Issues побайтово не изменён, кроме подменённого SHA.
- [ ] Ссылки на revision прикладных репозиториев не затронуты.
## Verification
```bash
git rev-parse d07fbfa
git ls-tree -r d07fbfa --name-only -- audits/ | wc -l # ожидается 19
git diff --stat d07fbfa 7dc1c76 -- audits/ # ожидается пустой вывод
```
Плюс выборочная проверка нескольких обновлённых URL на HTTP 200.
Ограничение: правка тел Issues необратима через API — исходные тексты сохраняются локально до завершения работы.
Выполнено. Обновлено 43 объекта (42 по SHA + 1 по branch-ссылкам).
Что заменено
Было
Стало
Объектов
0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e
d07fbfabb1295780952a554185989d2d5b5c8349
42 (тела + комментарии)
7dc1c76964da17cce6f5ad6d0c08186063901aee
то же
входит в 42
src/branch/codex/audit-remediation-2026-10-11
src/commit/d07fbfa…
3 вхождения в #23
Ветко-ориентированные ссылки в #23 изначально не были в scope — обнаружены при проверке HTTP и исправлены тем же способом.
Разбивка по репозиториям: backend 22 (#4 комментарий, #53–#74), frontend 9 (#54–#64), main 3 (#23 тело и комментарий, #25), specs 5 (#1, #2 комментарии, #28, #29, #30), docs 2 (#34, #35).
Проверка Acceptance Criteria
$ python3 scan.py # поиск dead SHA во всех телах и комментариях 5 repo
ITEMS: 1 TOTAL OCCURRENCES: 3
main #38 body
Dead SHA не осталось нигде, кроме тела этой Issue — здесь они приведены намеренно как описание проблемы.
Все ссылки отдают 200: из 20 уникальных audit-URL кампании 19 файловых вернули 200; двадцатый — ссылка на каталог .../reports в #23, она отдаёт 200 в форме src/ (через raw/ каталог недоступен по определению).
Остальной текст не изменён: замена выполнена строго str.replace по 40-символьному SHA, длина тела проверена assert'ом до записи (len(new) == len(body)).
Ссылки на revision прикладных repo (0ad84ff, c8821200, 197ffe2, fcdc805) не затронуты — они достижимы из своих develop.
На момент работы 0d6344a ещё отдавался сервером с кодом 200 — Gitea держит dangling-объекты до сборки мусора. Но по refs он недостижим:
$ curl .../api/v1/repos/WealthLedger/main/branches
develop d07fbfab
main 3027fd51
То есть ссылки сломались бы отложенно, при следующем git gc на сервере. Замена выполнена до этого момента, поэтому разрыва не произошло вовсе.
Исходные тексты всех 43 объектов сохранены локально до закрытия Issue.
Выполнено. Обновлено **43 объекта** (42 по SHA + 1 по branch-ссылкам).
## Что заменено
| Было | Стало | Объектов |
| --- | --- | --- |
| `0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e` | `d07fbfabb1295780952a554185989d2d5b5c8349` | 42 (тела + комментарии) |
| `7dc1c76964da17cce6f5ad6d0c08186063901aee` | то же | входит в 42 |
| `src/branch/codex/audit-remediation-2026-10-11` | `src/commit/d07fbfa…` | 3 вхождения в `#23` |
Ветко-ориентированные ссылки в `#23` изначально не были в scope — обнаружены при проверке HTTP и исправлены тем же способом.
Разбивка по репозиториям: `backend` 22 (#4 комментарий, #53–#74), `frontend` 9 (#54–#64), `main` 3 (#23 тело и комментарий, #25), `specs` 5 (#1, #2 комментарии, #28, #29, #30), `docs` 2 (#34, #35).
## Проверка Acceptance Criteria
```
$ python3 scan.py # поиск dead SHA во всех телах и комментариях 5 repo
ITEMS: 1 TOTAL OCCURRENCES: 3
main #38 body
```
- [x] Dead SHA не осталось нигде, кроме тела этой Issue — здесь они приведены намеренно как описание проблемы.
- [x] Все ссылки отдают 200: из 20 уникальных audit-URL кампании 19 файловых вернули `200`; двадцатый — ссылка на каталог `.../reports` в `#23`, она отдаёт `200` в форме `src/` (через `raw/` каталог недоступен по определению).
- [x] Остальной текст не изменён: замена выполнена строго `str.replace` по 40-символьному SHA, длина тела проверена assert'ом до записи (`len(new) == len(body)`).
- [x] Ссылки на revision прикладных repo (`0ad84ff`, `c8821200`, `197ffe2`, `fcdc805`) не затронуты — они достижимы из своих `develop`.
```
$ git rev-parse d07fbfa
d07fbfabb1295780952a554185989d2d5b5c8349
$ git ls-tree -r d07fbfa --name-only -- audits/ | wc -l
19
$ git diff --stat d07fbfa 7dc1c76 -- audits/
(пусто)
```
## Уточнение по срочности
На момент работы `0d6344a` ещё отдавался сервером с кодом 200 — Gitea держит dangling-объекты до сборки мусора. Но по refs он недостижим:
```
$ curl .../api/v1/repos/WealthLedger/main/branches
develop d07fbfab
main 3027fd51
```
То есть ссылки сломались бы отложенно, при следующем `git gc` на сервере. Замена выполнена до этого момента, поэтому разрыва не произошло вовсе.
Исходные тексты всех 43 объектов сохранены локально до закрытия Issue.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Контекст
В
#36архивaudits/2026-10-11/перенесён вdevelopsquash-merge'ем (PR#37, результатd07fbfa). Исходные коммиты0d6344aи7dc1c76вdevelopне попали и после удаления веткиcodex/audit-remediation-2026-10-11стали недостижимы:Issues кампании
audit/2026-10-11используют Evidence-permalink вида:Такие ссылки отдают 404. Содержимое не потеряно — те же 19 файлов идентичны и доступны из
d07fbfa.Ожидаемое поведение
Evidence-ссылки Issues кампании открываются и ведут на те же отчёты по достижимому коммиту.
Scope
In scope
0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690e→d07fbfabb1295780952a554185989d2d5b5c8349в телах Issues кампании.7dc1c76964da17cce6f5ad6d0c08186063901aee→d07fbfabb1295780952a554185989d2d5b5c8349там же, включая комментарии#23.audits/2026-10-11/...не менялся и правке не подлежит.Out of scope
0ad84ff,c8821200,197ffe2и подобные): это коммитыfrontend/backend/specs, они достижимы из своихdevelopи остаются как есть.specs#1,specs#2ссылаются на свои репозитории, dead SHA не содержат).Затронутые Issues
44 Issue с label
audit/2026-10-11:mainfrontendbackenddocsspecsПравятся только те, в чьём теле фактически найден dead SHA.
Acceptance Criteria
0d6344aили7dc1c76в составе permalink.Verification
Плюс выборочная проверка нескольких обновлённых URL на HTTP 200.
Ограничение: правка тел Issues необратима через API — исходные тексты сохраняются локально до завершения работы.
Выполнено. Обновлено 43 объекта (42 по SHA + 1 по branch-ссылкам).
Что заменено
0d6344abfdf9c4c6139e4d2b50bf3bd3b2ee690ed07fbfabb1295780952a554185989d2d5b5c83497dc1c76964da17cce6f5ad6d0c08186063901aeesrc/branch/codex/audit-remediation-2026-10-11src/commit/d07fbfa…#23Ветко-ориентированные ссылки в
#23изначально не были в scope — обнаружены при проверке HTTP и исправлены тем же способом.Разбивка по репозиториям:
backend22 (#4 комментарий, #53–#74),frontend9 (#54–#64),main3 (#23 тело и комментарий, #25),specs5 (#1, #2 комментарии, #28, #29, #30),docs2 (#34, #35).Проверка Acceptance Criteria
200; двадцатый — ссылка на каталог.../reportsв#23, она отдаёт200в формеsrc/(черезraw/каталог недоступен по определению).str.replaceпо 40-символьному SHA, длина тела проверена assert'ом до записи (len(new) == len(body)).0ad84ff,c8821200,197ffe2,fcdc805) не затронуты — они достижимы из своихdevelop.Уточнение по срочности
На момент работы
0d6344aещё отдавался сервером с кодом 200 — Gitea держит dangling-объекты до сборки мусора. Но по refs он недостижим:То есть ссылки сломались бы отложенно, при следующем
git gcна сервере. Замена выполнена до этого момента, поэтому разрыва не произошло вовсе.Исходные тексты всех 43 объектов сохранены локально до закрытия Issue.