Переносит change quiet-user-feedback в develop и приводит его delta-блоки в соответствие с текущими canonical specs. Change был реализован во frontend коммитом 5b30bb8 (2026-10-06), но его спецификации в develop не попали — ветка codex/quiet-user-feedback осталась локальной.
Delta писались против редакции canonical specs до часовой синхронизации. ## MODIFIED Requirements заменяет требование целиком, поэтому блоки удаляли бы 10 принятых сценариев при archive — валидатор это блокировал:
добавил 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 # время и исход попытки показываются
InvestmentRefreshState (кнопка «Обновить») остался в дереве, но не используется ни на одной странице — только в stories.
Changes
4 delta-файла, +79/−19. Canonical specs не затронуты — их обновит native sync при archive.
portfolio-view — уточнено, что запрет касается индикации собственного чтения; возвращён сценарий «Неуспешная последняя попытка сохраняет Portfolio»; «Показ устаревшего Portfolio» согласован с показом устаревания.
frontend-data-resilience — добавлен абзац про представление состояния источника (владелец этого языка); возвращён сценарий «Resource сохраняется после неуспешной часовой попытки».
brokerage-accounts — возвращены «Открытый экран перечитывает список», «Последняя попытка неуспешна после полного списка», «Первая загрузка списка выполняется или неуспешна».
brokerage-account-upcoming-events — возвращены 5 сценариев; требование ручного повтора заменено на обозначение неуспеха обновления источника, так как реализация повтор не предоставляет с 2026-10-06.
Остальные 10 файлов change (proposal, design, tasks, 6 delta, frontend-user-feedback) перенесены из ed9025f без изменений.
openspec 1.13.1 on Node 24.21.0: toolchain matches
npx commitlint --from HEAD~1 --to HEAD
pass
git diff --cached --name-only -- openspec/specs/
пусто — canonical specs не изменены
Ограничения: frontend gates не запускались — реализация уже принята в develop и этим PR не меняется. Изменение затрагивает только specs-репозиторий.
Breaking Changes
Нет. Поведение приложения не меняется — specs приводятся в соответствие с уже реализованным.
## Summary
Переносит change `quiet-user-feedback` в `develop` и приводит его delta-блоки в соответствие с текущими canonical specs. Change был реализован во `frontend` коммитом `5b30bb8` (2026-10-06), но его спецификации в `develop` не попали — ветка `codex/quiet-user-feedback` осталась локальной.
## Linked Issue
#50
## Почему потребовалось согласование
Delta писались против редакции canonical specs до часовой синхронизации. `## MODIFIED Requirements` заменяет требование целиком, поэтому блоки удаляли бы **10 принятых сценариев** при archive — валидатор это блокировал:
```
$ npx openspec validate quiet-user-feedback --strict
Change 'quiet-user-feedback' has issues
✗ 5 ERROR
```
## Нормативное поведение
Зафиксировано по фактической реализации в `develop`, а не по текстам specs. Два изменения прошли независимо и **совместимы**:
| Коммит | Дата | Что сделал |
| --- | --- | --- |
| `5b30bb8` (frontend) | 2026-10-06 | убрал кнопки «Обновить»/«Повторить», `Progress animated`, предупреждение `investment.syncFailed`, показ `portfolio.lastSuccessfulAt` |
| `3c226f8` (frontend, `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 # время и исход попытки показываются
```
`InvestmentRefreshState` (кнопка «Обновить») остался в дереве, но не используется ни на одной странице — только в stories.
## Changes
4 delta-файла, +79/−19. Canonical specs не затронуты — их обновит native sync при archive.
- `portfolio-view` — уточнено, что запрет касается индикации собственного чтения; возвращён сценарий «Неуспешная последняя попытка сохраняет Portfolio»; «Показ устаревшего Portfolio» согласован с показом устаревания.
- `frontend-data-resilience` — добавлен абзац про представление состояния источника (владелец этого языка); возвращён сценарий «Resource сохраняется после неуспешной часовой попытки».
- `brokerage-accounts` — возвращены «Открытый экран перечитывает список», «Последняя попытка неуспешна после полного списка», «Первая загрузка списка выполняется или неуспешна».
- `brokerage-account-upcoming-events` — возвращены 5 сценариев; требование ручного повтора заменено на обозначение неуспеха обновления источника, так как реализация повтор не предоставляет с 2026-10-06.
Остальные 10 файлов change (`proposal`, `design`, `tasks`, 6 delta, `frontend-user-feedback`) перенесены из `ed9025f` без изменений.
## Verification
| Команда | Результат |
| --- | --- |
| `npx openspec validate quiet-user-feedback --strict` | `Change 'quiet-user-feedback' is valid` |
| `npx openspec list --changes` | `quiet-user-feedback ✓ Complete` |
| `npm run verify` | pass (`git diff --check`) |
| `npm run check:openspec` | `openspec 1.13.1 on Node 24.21.0: toolchain matches` |
| `npx commitlint --from HEAD~1 --to HEAD` | pass |
| `git diff --cached --name-only -- openspec/specs/` | пусто — canonical specs не изменены |
Ограничения: `frontend` gates не запускались — реализация уже принята в `develop` и этим PR не меняется. Изменение затрагивает только specs-репозиторий.
## Breaking Changes
Нет. Поведение приложения не меняется — specs приводятся в соответствие с уже реализованным.
Delta-блоки писались против редакции canonical specs до часовой
синхронизации. MODIFIED заменяет требование целиком, поэтому они
удаляли бы 10 принятых сценариев при archive.
Нормативное поведение зафиксировано по реализации в develop:
тихое чтение клиента (frontend 5b30bb8) и видимое состояние источника
из meta (frontend 3c226f8, WealthLedger/main#22) совместимы.
Запрет относится к индикации собственного чтения и ручному повтору,
а не к показу времени, устаревания и исхода часовой попытки.
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.
Summary
Переносит change
quiet-user-feedbackвdevelopи приводит его delta-блоки в соответствие с текущими canonical specs. Change был реализован воfrontendкоммитом5b30bb8(2026-10-06), но его спецификации вdevelopне попали — веткаcodex/quiet-user-feedbackосталась локальной.Linked Issue
#50
Почему потребовалось согласование
Delta писались против редакции canonical specs до часовой синхронизации.
## MODIFIED Requirementsзаменяет требование целиком, поэтому блоки удаляли бы 10 принятых сценариев при archive — валидатор это блокировал:Нормативное поведение
Зафиксировано по фактической реализации в
develop, а не по текстам specs. Два изменения прошли независимо и совместимы:5b30bb8(frontend)Progress animated, предупреждениеinvestment.syncFailed, показportfolio.lastSuccessfulAt3c226f8(frontend,WealthLedger/main#22)SourceSyncStatus: время успеха источника,stale, исходlastAttempt,partialИтог: тихое чтение клиента + видимое состояние источника.
Запрет change относится к индикации собственного чтения клиента и ручному повтору. Он не распространяется на состояние источника из
meta— время последнего успеха, устаревание, исход часовой попытки и неполноту. Это разные вещи: первое — техника получения данных, второе — свойство самих данных.Проверено по коду:
InvestmentRefreshState(кнопка «Обновить») остался в дереве, но не используется ни на одной странице — только в stories.Changes
4 delta-файла, +79/−19. Canonical specs не затронуты — их обновит native sync при archive.
portfolio-view— уточнено, что запрет касается индикации собственного чтения; возвращён сценарий «Неуспешная последняя попытка сохраняет Portfolio»; «Показ устаревшего Portfolio» согласован с показом устаревания.frontend-data-resilience— добавлен абзац про представление состояния источника (владелец этого языка); возвращён сценарий «Resource сохраняется после неуспешной часовой попытки».brokerage-accounts— возвращены «Открытый экран перечитывает список», «Последняя попытка неуспешна после полного списка», «Первая загрузка списка выполняется или неуспешна».brokerage-account-upcoming-events— возвращены 5 сценариев; требование ручного повтора заменено на обозначение неуспеха обновления источника, так как реализация повтор не предоставляет с 2026-10-06.Остальные 10 файлов change (
proposal,design,tasks, 6 delta,frontend-user-feedback) перенесены изed9025fбез изменений.Verification
npx openspec validate quiet-user-feedback --strictChange 'quiet-user-feedback' is validnpx openspec list --changesquiet-user-feedback ✓ Completenpm run verifygit diff --check)npm run check:openspecopenspec 1.13.1 on Node 24.21.0: toolchain matchesnpx commitlint --from HEAD~1 --to HEADgit diff --cached --name-only -- openspec/specs/Ограничения:
frontendgates не запускались — реализация уже принята вdevelopи этим PR не меняется. Изменение затрагивает только specs-репозиторий.Breaking Changes
Нет. Поведение приложения не меняется — specs приводятся в соответствие с уже реализованным.