Change quiet-user-feedback реализован во frontend коммитом 5b30bb8 (2026-10-06), но его спецификации оставались на локальной ветке. В PR #51 они согласованы с текущими canonical specs и приняты в develop (5a7e319).
Нормативное поведение — тихое чтение клиента + видимое состояние источника:
добавил SourceSyncStatus: время успеха источника, stale, исход lastAttempt, partial
Запрет относится к индикации собственного чтения клиента и ручному повтору. Состояние источника из meta — свойство данных, а не техника их получения, и показывается текстом либо доступно именованным элементом.
Что осталось
Change готов к archive, но archive заблокирован. Lifecycle spec:
Project-owned archive workflow MUST отклонять archive, если … любая affected delivery area не реализована
tasks.md объявляет 4 задачи в docs (8.1–8.4) и все отмечены [x], но фактически не выполнены:
$ git -C docs grep -lniE 'тих(ое|ого) чтени|quiet read|редкие уведомлен' origin/develop
(пусто)
$ git -C docs show origin/develop:architecture/cross-cutting/ui-resilience.md | grep -niE 'ручн|предупрежд'
31:Ручное обновление сохраняет показанный результат и applied filters; кнопка
42:портфель с предупреждением. Он не превращается в глобальный fallback.
Документация описывает отменённое поведение. Прогон archive с --skip-specs или --no-validate молча закрепил бы это расхождение, поэтому не выполнялся.
Acceptance Criteria
Нормативное поведение определено по фактической реализации и зафиксировано в delta-спецификациях.
Change присутствует в develop и проходит native validation: openspec validate quiet-user-feedback --strict → valid.
Ветки spec/50-quiet-user-feedback и spec/50-complete-quiet-user-feedback удалены; в репозитории только main и develop.
WealthLedger/docs#51 выполнена: ADR о решении и приведение ui-resilience.md, data-freshness.md и затронутых domains/** к AS-IS.
Отметки задач 8.1–8.4 в tasks.md приведены в соответствие с фактом.
openspec archive quiet-user-feedback выполнен; canonical specs обновлены native sync, change лежит в openspec/changes/archive/.
Ограничение: [x] в tasks.md этого change не является доказательством выполнения — отметки 8.1–8.4 проставлены без фактической работы в docs. Это учитывается при приёмке.
## Контекст
Change `quiet-user-feedback` реализован во `frontend` коммитом `5b30bb8` (2026-10-06), но его спецификации оставались на локальной ветке. В PR #51 они согласованы с текущими canonical specs и приняты в `develop` (`5a7e319`).
Нормативное поведение — **тихое чтение клиента + видимое состояние источника**:
| Коммит | Дата | Что сделал |
| --- | --- | --- |
| `frontend 5b30bb8` | 2026-10-06 | убрал «Обновить»/«Повторить», `Progress animated`, `investment.syncFailed`, показ `portfolio.lastSuccessfulAt` |
| `frontend 3c226f8` (`WealthLedger/main#22`) | 2026-10-09 | добавил `SourceSyncStatus`: время успеха источника, `stale`, исход `lastAttempt`, `partial` |
Запрет относится к индикации собственного чтения клиента и ручному повтору. Состояние источника из `meta` — свойство данных, а не техника их получения, и показывается текстом либо доступно именованным элементом.
## Что осталось
Change готов к archive, но archive заблокирован. Lifecycle spec:
> Project-owned archive workflow MUST отклонять archive, если … любая affected delivery area не реализована
`tasks.md` объявляет 4 задачи в `docs` (8.1–8.4) и все отмечены `[x]`, но фактически не выполнены:
```
$ git -C docs grep -lniE 'тих(ое|ого) чтени|quiet read|редкие уведомлен' origin/develop
(пусто)
$ git -C docs show origin/develop:architecture/cross-cutting/ui-resilience.md | grep -niE 'ручн|предупрежд'
31:Ручное обновление сохраняет показанный результат и applied filters; кнопка
42:портфель с предупреждением. Он не превращается в глобальный fallback.
```
Документация описывает отменённое поведение. Прогон archive с `--skip-specs` или `--no-validate` молча закрепил бы это расхождение, поэтому не выполнялся.
## Acceptance Criteria
- [x] Нормативное поведение определено по фактической реализации и зафиксировано в delta-спецификациях.
- [x] Change присутствует в `develop` и проходит native validation: `openspec validate quiet-user-feedback --strict` → valid.
- [x] Ветки `spec/50-quiet-user-feedback` и `spec/50-complete-quiet-user-feedback` удалены; в репозитории только `main` и `develop`.
- [ ] `WealthLedger/docs#51` выполнена: ADR о решении и приведение `ui-resilience.md`, `data-freshness.md` и затронутых `domains/**` к AS-IS.
- [ ] Отметки задач 8.1–8.4 в `tasks.md` приведены в соответствие с фактом.
- [ ] `openspec archive quiet-user-feedback` выполнен; canonical specs обновлены native sync, change лежит в `openspec/changes/archive/`.
## Dependencies
Блокируется `WealthLedger/docs#51`.
## Verification
```bash
npx openspec validate quiet-user-feedback --strict
npx openspec list --changes
git for-each-ref --format='%(refname:short)' refs/remotes/origin | grep -v '^origin$'
```
Ограничение: `[x]` в `tasks.md` этого change не является доказательством выполнения — отметки 8.1–8.4 проставлены без фактической работы в `docs`. Это учитывается при приёмке.
Коммит ed9025f теперь достижим из origin и не может быть собран сборщиком мусора. Локальная ветка codex/quiet-user-feedback удалена как дубликат.
Это единственная ветка, кроме main, develop и управляемых Renovate, которая осталась после очистки — по условию этой Issue.
Ветка сохранена в `origin`:
```
$ git push origin codex/quiet-user-feedback:refs/heads/spec/50-quiet-user-feedback
* [new branch] codex/quiet-user-feedback -> spec/50-quiet-user-feedback
$ git rev-parse --short origin/spec/50-quiet-user-feedback
ed9025f
```
Коммит `ed9025f` теперь достижим из `origin` и не может быть собран сборщиком мусора. Локальная ветка `codex/quiet-user-feedback` удалена как дубликат.
Это единственная ветка, кроме `main`, `develop` и управляемых Renovate, которая осталась после очистки — по условию этой Issue.
Удалению подлежали бы целые specs, появившиеся после ветки: manual-bank-cards (680 строк), stock-screener, portfolio-value-history, tbank-data-sync, hourly-investment-sync, instrument-income-schedules, online-instrument-information. Между веткой и develop прошла миграция SDD (329d66e), которую ветка не знает.
2. Перенос только каталога change — чисто, но change устарел
Вариант «взять только openspec/changes/quiet-user-feedback/» конфликтов не даёт: такого пути в develop нет, 14 файлов добавляются чисто. Проверки окружения проходят:
$ npm run verify # git diff --check
$ npm run check:openspec
openspec 1.13.1 on Node 24.21.0: toolchain matches
Причина одна и та же: блоки ## MODIFIED Requirements писались против старой редакции canonical specs. MODIFIED заменяет требование целиком, поэтому отсутствующие в блоке сценарии были бы удалены при archive. Валидатор перечисляет 10 таких сценариев, например:
Прогнозный дивиденд с неизвестной суммой
Первая загрузка либо ошибка без сохранённого прогноза
Последняя попытка неуспешна после полного списка
Resource сохраняется после неуспешной часовой попытки
Неуспешная последняя попытка сохраняет Portfolio
Это те самые сценарии, которые добавили #54, #55, #58 и hourly-работа — то есть результат уже принятой remediation.
Что при этом со change в порядке
Все целевые требования MODIFIED в canonical specs существуют — ни одно не переименовано и не удалено.
Требования в ## ADDED корректно отсутствуют в canonical specs.
frontend-user-feedback — новый spec с ## Purpose + ## ADDED, canonical-версия ему не нужна.
Структурно change жив; устарело только содержимое MODIFIED-блоков.
Требуется решение
Довести change нельзя одним merge — нужно переписать 5 delta-файлов, перенеся в MODIFIED-блоки 10 сценариев из текущих canonical specs. Это содержательная работа по спецификациям, а не очистка Git, и она требует Change Owner: решение о том, какое поведение остаётся нормативным, принимается не механически.
Варианты:
Обновить delta-блоки под текущие canonical specs и довести change штатным путём. Объём — 5 файлов, 10 сценариев, проверка openspec validate --strict.
Заархивировать как отклонённый — поместить в openspec/changes/archive/ с обоснованием, без применения к canonical specs.
Отклонить и удалить ветку — коммит ed9025f теряется.
Ветка spec/50-quiet-user-feedback (ed9025f) сохранена в origin, рабочее дерево возвращено в исходное состояние:
$ git status --porcelain | wc -l
0
$ git log --oneline -1
06d08e2 chore: adopt linear git model in specs instructions (#48)
Issue остаётся открытой: закрывать её без решения по существу означало бы молча потерять либо этот change, либо 10 принятых сценариев.
## PR не создан: change не проходит native validation против текущего `develop`
Попытка выполнить «довести change» остановлена на проверке. Фиксирую результат, потому что механический merge здесь приведёт к потере требований.
### 1. Прямой merge ветки удаляет позднейшую работу
Ветка отщепилась от `e4f10de` и отстаёт от `develop` на 44 коммита. Тестовый merge:
```
$ git merge --no-commit --no-ff ed9025f
CONFLICT (content) в 6 canonical specs
Automatic merge failed
```
Разница ветки против `develop` по `openspec/specs/`:
```
$ git diff --stat origin/develop ed9025f -- openspec/specs/
21 files changed, 687 insertions(+), 1316 deletions(-)
```
Удалению подлежали бы целые specs, появившиеся после ветки: `manual-bank-cards` (680 строк), `stock-screener`, `portfolio-value-history`, `tbank-data-sync`, `hourly-investment-sync`, `instrument-income-schedules`, `online-instrument-information`. Между веткой и `develop` прошла миграция SDD (`329d66e`), которую ветка не знает.
### 2. Перенос только каталога change — чисто, но change устарел
Вариант «взять только `openspec/changes/quiet-user-feedback/`» конфликтов не даёт: такого пути в `develop` нет, 14 файлов добавляются чисто. Проверки окружения проходят:
```
$ npm run verify # git diff --check
$ npm run check:openspec
openspec 1.13.1 on Node 24.21.0: toolchain matches
```
Но сам change не валиден:
```
$ npx openspec validate quiet-user-feedback --strict
Change 'quiet-user-feedback' has issues
✗ 5 ERROR
```
| Файл delta | Ошибок |
| --- | --- |
| `brokerage-account-upcoming-events/spec.md` | 2 |
| `brokerage-accounts/spec.md` | 1 |
| `frontend-data-resilience/spec.md` | 1 |
| `portfolio-view/spec.md` | 1 |
Причина одна и та же: блоки `## MODIFIED Requirements` писались против старой редакции canonical specs. `MODIFIED` заменяет требование целиком, поэтому отсутствующие в блоке сценарии были бы удалены при archive. Валидатор перечисляет 10 таких сценариев, например:
- `Прогнозный дивиденд с неизвестной суммой`
- `Первая загрузка либо ошибка без сохранённого прогноза`
- `Последняя попытка неуспешна после полного списка`
- `Resource сохраняется после неуспешной часовой попытки`
- `Неуспешная последняя попытка сохраняет Portfolio`
Это те самые сценарии, которые добавили `#54`, `#55`, `#58` и hourly-работа — то есть результат уже принятой remediation.
### Что при этом со change в порядке
- Все целевые требования `MODIFIED` в canonical specs существуют — ни одно не переименовано и не удалено.
- Требования в `## ADDED` корректно отсутствуют в canonical specs.
- `frontend-user-feedback` — новый spec с `## Purpose` + `## ADDED`, canonical-версия ему не нужна.
Структурно change жив; устарело только содержимое `MODIFIED`-блоков.
### Требуется решение
Довести change нельзя одним merge — нужно переписать 5 delta-файлов, перенеся в `MODIFIED`-блоки 10 сценариев из текущих canonical specs. Это содержательная работа по спецификациям, а не очистка Git, и она требует Change Owner: решение о том, какое поведение остаётся нормативным, принимается не механически.
Варианты:
1. **Обновить delta-блоки** под текущие canonical specs и довести change штатным путём. Объём — 5 файлов, 10 сценариев, проверка `openspec validate --strict`.
2. **Заархивировать как отклонённый** — поместить в `openspec/changes/archive/` с обоснованием, без применения к canonical specs.
3. **Отклонить и удалить ветку** — коммит `ed9025f` теряется.
Ветка `spec/50-quiet-user-feedback` (`ed9025f`) сохранена в `origin`, рабочее дерево возвращено в исходное состояние:
```
$ git status --porcelain | wc -l
0
$ git log --oneline -1
06d08e2 chore: adopt linear git model in specs instructions (#48)
```
Issue остаётся открытой: закрывать её без решения по существу означало бы молча потерять либо этот change, либо 10 принятых сценариев.
добавил SourceSyncStatus: время успеха источника, stale, исход lastAttempt, partial
Тихое чтение клиента + видимое состояние источника. Запрет change относится к индикации собственного чтения и ручному повтору; он не распространяется на состояние источника из meta — это свойство данных, а не техника их получения.
10 сценариев, которые MODIFIED-блоки удалили бы при archive, возвращены. В brokerage-account-upcoming-events требование «предоставляет действие повторить только HTTP-чтение» заменено на обозначение неуспеха обновления источника — реализация повтора не предоставляет с 2026-10-06.
$ npx openspec validate quiet-user-feedback --strict
Change 'quiet-user-feedback' is valid
$ npx openspec list --changes
quiet-user-feedback ✓ Complete
Canonical specs не тронуты — их обновит native sync при archive.
spec/50-quiet-user-feedback и spec/50-complete-quiet-user-feedback удалены: содержимое change в develop, а их версии canonical specs устарели относительно develop.
Issue остаётся открытой: archive блокирован
Я не выполняю openspec archive. Lifecycle spec это запрещает:
Project-owned archive workflow MUST отклонять archive, если … любая affected delivery area не реализована
tasks.md объявляет 4 задачи в docs (8.1–8.4) и все отмечены выполненными, но фактически не выполнены:
$ git -C docs grep -lniE 'тих(ое|ого) чтени|quiet read|редкие уведомлен' origin/develop
(пусто) # ADR из задачи 8.1 отсутствует
$ git -C docs show origin/develop:architecture/cross-cutting/ui-resilience.md | grep -niE 'ручн|предупрежд'
31:Ручное обновление сохраняет показанный результат и applied filters; кнопка
42:портфель с предупреждением. Он не превращается в глобальный fallback.
То есть документация всё ещё описывает отменённое поведение. Отметки задач 8.1–8.4 расходятся с фактом.
Заведена WealthLedger/docs#51 на приведение документации в соответствие. После её закрытия archive этого change разблокируется — тогда закроем и эту Issue.
Что остаётся по этой Issue:
WealthLedger/docs#51 выполнена.
Отметки задач 8.1–8.4 приведены в соответствие с фактом.
## Change согласован и принят в `develop`
PR #51 слит squash, `develop` = `5a7e319`. Change `quiet-user-feedback` больше не висит на локальной ветке.
### Нормативное поведение
Установлено по фактической реализации, а не по текстам specs. Два изменения прошли независимо и оказались **совместимы**:
| Коммит | Дата | Что сделал |
| --- | --- | --- |
| `frontend 5b30bb8` | 2026-10-06 | убрал «Обновить»/«Повторить», `Progress animated`, `investment.syncFailed`, показ `portfolio.lastSuccessfulAt` |
| `frontend 3c226f8` (`WealthLedger/main#22`) | 2026-10-09 | добавил `SourceSyncStatus`: время успеха источника, `stale`, исход `lastAttempt`, `partial` |
**Тихое чтение клиента + видимое состояние источника.** Запрет change относится к индикации собственного чтения и ручному повтору; он не распространяется на состояние источника из `meta` — это свойство данных, а не техника их получения.
Проверено по коду:
```
$ git grep -nE 'investment\.refresh|events\.retry|accounts\.retry' origin/develop -- 'src/pages/**' | wc -l
0
$ grep -cE 'Button|onClick' SourceSyncStatus.tsx
0
$ grep -cE 'sourceTime|attempt\.' SourceSyncStatus.tsx
3
```
### Исправлено в 4 delta-файлах (+79/−19)
10 сценариев, которые `MODIFIED`-блоки удалили бы при archive, возвращены. В `brokerage-account-upcoming-events` требование «предоставляет действие повторить только HTTP-чтение» заменено на обозначение неуспеха обновления источника — реализация повтора не предоставляет с 2026-10-06.
```
$ npx openspec validate quiet-user-feedback --strict
Change 'quiet-user-feedback' is valid
$ npx openspec list --changes
quiet-user-feedback ✓ Complete
```
Canonical specs не тронуты — их обновит native sync при archive.
### Ветки удалены
```
$ git for-each-ref --format='%(refname:short)' refs/remotes/origin | grep -v '^origin$'
origin/develop
origin/main
```
`spec/50-quiet-user-feedback` и `spec/50-complete-quiet-user-feedback` удалены: содержимое change в `develop`, а их версии canonical specs устарели относительно `develop`.
## Issue остаётся открытой: archive блокирован
Я не выполняю `openspec archive`. Lifecycle spec это запрещает:
> Project-owned archive workflow MUST отклонять archive, если … любая affected delivery area не реализована
`tasks.md` объявляет 4 задачи в `docs` (8.1–8.4) и **все отмечены выполненными**, но фактически не выполнены:
```
$ git -C docs grep -lniE 'тих(ое|ого) чтени|quiet read|редкие уведомлен' origin/develop
(пусто) # ADR из задачи 8.1 отсутствует
$ git -C docs show origin/develop:architecture/cross-cutting/ui-resilience.md | grep -niE 'ручн|предупрежд'
31:Ручное обновление сохраняет показанный результат и applied filters; кнопка
42:портфель с предупреждением. Он не превращается в глобальный fallback.
```
То есть документация всё ещё описывает отменённое поведение. Отметки задач 8.1–8.4 расходятся с фактом.
Заведена `WealthLedger/docs#51` на приведение документации в соответствие. После её закрытия archive этого change разблокируется — тогда закроем и эту Issue.
Что остаётся по этой Issue:
- [ ] `WealthLedger/docs#51` выполнена.
- [ ] Отметки задач 8.1–8.4 приведены в соответствие с фактом.
- [ ] `openspec archive quiet-user-feedback` выполнен; canonical specs обновлены native sync.
codex-bot
changed title from spec: decide fate of unmerged quiet-user-feedback change to spec: archive quiet-user-feedback after docs delivery2026-10-17 21:55:11 +03:00
Исходные MODIFIED-блоки удалили бы 10 принятых сценариев. После согласования в PR #51 archive дал - 0 удалений, и каждый сценарий проверен адресно:
KEPT Неуспешная последняя попытка сохраняет Portfolio (portfolio-view)
KEPT Последняя попытка неуспешна после полного списка (brokerage-accounts)
KEPT Первая загрузка списка выполняется или неуспешна (brokerage-accounts)
KEPT Открытый экран перечитывает список (brokerage-accounts)
KEPT Resource сохраняется после неуспешной часовой попытки (frontend-data-resilience)
KEPT Прогнозный дивиденд с неизвестной суммой (upcoming-events)
KEPT Первая загрузка либо ошибка без сохранённого прогноза (upcoming-events)
KEPT Ошибка обновления при сохранённом прогнозе на странице (upcoming-events)
KEPT Ближайшие события недоступны без сохранённого прогноза (upcoming-events)
KEPT Неуспешное обновление не скрывает сохранённый прогноз (upcoming-events)
Результат
9 canonical specs обновлены, новый frontend-user-feedback создан и внесён в AI_INDEX.md той строкой, которую предполагал исходный change. completion-evidence.md фиксирует delivery map по трём репозиториям и ограничения, включая расхождение отметок задач с фактом.
Pre-archive блокировка снята фактическим выполнением documentation delivery, а не флагом --skip-specs или --no-validate.
Issue закрывается: все delivery areas (frontend5b30bb8, specs5a7e319/f0478c6, docse8e3ef6) приняты, archive выполнен.
Выполнено. PR #52 слит squash, `develop` = `f0478c6`. Change заархивирован.
## Проверка Acceptance Criteria
```
$ npx openspec archive quiet-user-feedback --yes
Totals: + 9, ~ 12, - 0, → 0
Change 'quiet-user-feedback' archived as '2026-10-17-quiet-user-feedback'.
$ npx openspec list --changes
No active changes found.
$ npx openspec validate --all
Totals: 33 passed, 0 failed (33 items)
$ git ls-tree -r origin/develop --name-only -- openspec/changes/archive/2026-10-17-quiet-user-feedback/ | wc -l
15
$ git ls-tree -r origin/develop --name-only -- openspec/changes/quiet-user-feedback/ | wc -l
0
```
- [x] Нормативное поведение определено по фактической реализации и зафиксировано в delta-спецификациях.
- [x] Change проходит native validation.
- [x] Ветки удалены; в репозитории только `main` и `develop`.
- [x] `WealthLedger/docs#51` выполнена — ADR 021 создан, `ui-resilience.md` и 6 файлов `domains/**` приведены к AS-IS, `docs` PR #52 слит (`e8e3ef6`).
- [x] Отметки задач 8.1–8.4 приведены в соответствие с фактом: работа выполнена, расхождение зафиксировано в `completion-evidence.md`.
- [x] `openspec archive` выполнен; canonical specs обновлены native sync, change в `openspec/changes/archive/2026-10-17-quiet-user-feedback/`.
## Ключевая проверка: ничего не потеряно
Исходные `MODIFIED`-блоки удалили бы 10 принятых сценариев. После согласования в PR #51 archive дал `- 0` удалений, и каждый сценарий проверен адресно:
```
KEPT Неуспешная последняя попытка сохраняет Portfolio (portfolio-view)
KEPT Последняя попытка неуспешна после полного списка (brokerage-accounts)
KEPT Первая загрузка списка выполняется или неуспешна (brokerage-accounts)
KEPT Открытый экран перечитывает список (brokerage-accounts)
KEPT Resource сохраняется после неуспешной часовой попытки (frontend-data-resilience)
KEPT Прогнозный дивиденд с неизвестной суммой (upcoming-events)
KEPT Первая загрузка либо ошибка без сохранённого прогноза (upcoming-events)
KEPT Ошибка обновления при сохранённом прогнозе на странице (upcoming-events)
KEPT Ближайшие события недоступны без сохранённого прогноза (upcoming-events)
KEPT Неуспешное обновление не скрывает сохранённый прогноз (upcoming-events)
```
## Результат
9 canonical specs обновлены, новый `frontend-user-feedback` создан и внесён в `AI_INDEX.md` той строкой, которую предполагал исходный change. `completion-evidence.md` фиксирует delivery map по трём репозиториям и ограничения, включая расхождение отметок задач с фактом.
Pre-archive блокировка снята фактическим выполнением documentation delivery, а не флагом `--skip-specs` или `--no-validate`.
Issue закрывается: все delivery areas (`frontend` `5b30bb8`, `specs` `5a7e319`/`f0478c6`, `docs` `e8e3ef6`) приняты, archive выполнен.
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.
Контекст
Change
quiet-user-feedbackреализован воfrontendкоммитом5b30bb8(2026-10-06), но его спецификации оставались на локальной ветке. В PR #51 они согласованы с текущими canonical specs и приняты вdevelop(5a7e319).Нормативное поведение — тихое чтение клиента + видимое состояние источника:
frontend 5b30bb8Progress animated,investment.syncFailed, показportfolio.lastSuccessfulAtfrontend 3c226f8(WealthLedger/main#22)SourceSyncStatus: время успеха источника,stale, исходlastAttempt,partialЗапрет относится к индикации собственного чтения клиента и ручному повтору. Состояние источника из
meta— свойство данных, а не техника их получения, и показывается текстом либо доступно именованным элементом.Что осталось
Change готов к archive, но archive заблокирован. Lifecycle spec:
tasks.mdобъявляет 4 задачи вdocs(8.1–8.4) и все отмечены[x], но фактически не выполнены:Документация описывает отменённое поведение. Прогон archive с
--skip-specsили--no-validateмолча закрепил бы это расхождение, поэтому не выполнялся.Acceptance Criteria
developи проходит native validation:openspec validate quiet-user-feedback --strict→ valid.spec/50-quiet-user-feedbackиspec/50-complete-quiet-user-feedbackудалены; в репозитории толькоmainиdevelop.WealthLedger/docs#51выполнена: ADR о решении и приведениеui-resilience.md,data-freshness.mdи затронутыхdomains/**к AS-IS.tasks.mdприведены в соответствие с фактом.openspec archive quiet-user-feedbackвыполнен; canonical specs обновлены native sync, change лежит вopenspec/changes/archive/.Dependencies
Блокируется
WealthLedger/docs#51.Verification
Ограничение:
[x]вtasks.mdэтого change не является доказательством выполнения — отметки 8.1–8.4 проставлены без фактической работы вdocs. Это учитывается при приёмке.Ветка сохранена в
origin:Коммит
ed9025fтеперь достижим изoriginи не может быть собран сборщиком мусора. Локальная веткаcodex/quiet-user-feedbackудалена как дубликат.Это единственная ветка, кроме
main,developи управляемых Renovate, которая осталась после очистки — по условию этой Issue.PR не создан: change не проходит native validation против текущего
developПопытка выполнить «довести change» остановлена на проверке. Фиксирую результат, потому что механический merge здесь приведёт к потере требований.
1. Прямой merge ветки удаляет позднейшую работу
Ветка отщепилась от
e4f10deи отстаёт отdevelopна 44 коммита. Тестовый merge:Разница ветки против
developпоopenspec/specs/:Удалению подлежали бы целые specs, появившиеся после ветки:
manual-bank-cards(680 строк),stock-screener,portfolio-value-history,tbank-data-sync,hourly-investment-sync,instrument-income-schedules,online-instrument-information. Между веткой иdevelopпрошла миграция SDD (329d66e), которую ветка не знает.2. Перенос только каталога change — чисто, но change устарел
Вариант «взять только
openspec/changes/quiet-user-feedback/» конфликтов не даёт: такого пути вdevelopнет, 14 файлов добавляются чисто. Проверки окружения проходят:Но сам change не валиден:
brokerage-account-upcoming-events/spec.mdbrokerage-accounts/spec.mdfrontend-data-resilience/spec.mdportfolio-view/spec.mdПричина одна и та же: блоки
## MODIFIED Requirementsписались против старой редакции canonical specs.MODIFIEDзаменяет требование целиком, поэтому отсутствующие в блоке сценарии были бы удалены при archive. Валидатор перечисляет 10 таких сценариев, например:Прогнозный дивиденд с неизвестной суммойПервая загрузка либо ошибка без сохранённого прогнозаПоследняя попытка неуспешна после полного спискаResource сохраняется после неуспешной часовой попыткиНеуспешная последняя попытка сохраняет PortfolioЭто те самые сценарии, которые добавили
#54,#55,#58и hourly-работа — то есть результат уже принятой remediation.Что при этом со change в порядке
MODIFIEDв canonical specs существуют — ни одно не переименовано и не удалено.## ADDEDкорректно отсутствуют в canonical specs.frontend-user-feedback— новый spec с## Purpose+## ADDED, canonical-версия ему не нужна.Структурно change жив; устарело только содержимое
MODIFIED-блоков.Требуется решение
Довести change нельзя одним merge — нужно переписать 5 delta-файлов, перенеся в
MODIFIED-блоки 10 сценариев из текущих canonical specs. Это содержательная работа по спецификациям, а не очистка Git, и она требует Change Owner: решение о том, какое поведение остаётся нормативным, принимается не механически.Варианты:
openspec validate --strict.openspec/changes/archive/с обоснованием, без применения к canonical specs.ed9025fтеряется.Ветка
spec/50-quiet-user-feedback(ed9025f) сохранена вorigin, рабочее дерево возвращено в исходное состояние:Issue остаётся открытой: закрывать её без решения по существу означало бы молча потерять либо этот change, либо 10 принятых сценариев.
Change согласован и принят в
developPR #51 слит squash,
develop=5a7e319. Changequiet-user-feedbackбольше не висит на локальной ветке.Нормативное поведение
Установлено по фактической реализации, а не по текстам specs. Два изменения прошли независимо и оказались совместимы:
frontend 5b30bb8Progress animated,investment.syncFailed, показportfolio.lastSuccessfulAtfrontend 3c226f8(WealthLedger/main#22)SourceSyncStatus: время успеха источника,stale, исходlastAttempt,partialТихое чтение клиента + видимое состояние источника. Запрет change относится к индикации собственного чтения и ручному повтору; он не распространяется на состояние источника из
meta— это свойство данных, а не техника их получения.Проверено по коду:
Исправлено в 4 delta-файлах (+79/−19)
10 сценариев, которые
MODIFIED-блоки удалили бы при archive, возвращены. Вbrokerage-account-upcoming-eventsтребование «предоставляет действие повторить только HTTP-чтение» заменено на обозначение неуспеха обновления источника — реализация повтора не предоставляет с 2026-10-06.Canonical specs не тронуты — их обновит native sync при archive.
Ветки удалены
spec/50-quiet-user-feedbackиspec/50-complete-quiet-user-feedbackудалены: содержимое change вdevelop, а их версии canonical specs устарели относительноdevelop.Issue остаётся открытой: archive блокирован
Я не выполняю
openspec archive. Lifecycle spec это запрещает:tasks.mdобъявляет 4 задачи вdocs(8.1–8.4) и все отмечены выполненными, но фактически не выполнены:То есть документация всё ещё описывает отменённое поведение. Отметки задач 8.1–8.4 расходятся с фактом.
Заведена
WealthLedger/docs#51на приведение документации в соответствие. После её закрытия archive этого change разблокируется — тогда закроем и эту Issue.Что остаётся по этой Issue:
WealthLedger/docs#51выполнена.openspec archive quiet-user-feedbackвыполнен; canonical specs обновлены native sync.spec: decide fate of unmerged quiet-user-feedback changeto spec: archive quiet-user-feedback after docs deliveryВыполнено. PR #52 слит squash,
develop=f0478c6. Change заархивирован.Проверка Acceptance Criteria
mainиdevelop.WealthLedger/docs#51выполнена — ADR 021 создан,ui-resilience.mdи 6 файловdomains/**приведены к AS-IS,docsPR #52 слит (e8e3ef6).completion-evidence.md.openspec archiveвыполнен; canonical specs обновлены native sync, change вopenspec/changes/archive/2026-10-17-quiet-user-feedback/.Ключевая проверка: ничего не потеряно
Исходные
MODIFIED-блоки удалили бы 10 принятых сценариев. После согласования в PR #51 archive дал- 0удалений, и каждый сценарий проверен адресно:Результат
9 canonical specs обновлены, новый
frontend-user-feedbackсоздан и внесён вAI_INDEX.mdтой строкой, которую предполагал исходный change.completion-evidence.mdфиксирует delivery map по трём репозиториям и ограничения, включая расхождение отметок задач с фактом.Pre-archive блокировка снята фактическим выполнением documentation delivery, а не флагом
--skip-specsили--no-validate.Issue закрывается: все delivery areas (
frontend5b30bb8,specs5a7e319/f0478c6,docse8e3ef6) приняты, archive выполнен.