docs(docs): round-9 follow-up summary for diagnostic items #6/#8/#15/#16#1753
Conversation
Round-9 follow-up rollout: top-4 за залишковим ROI з roadmap-таблиці docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md. - Item #6 (#1745): localStorage budget 14 → 13 (`weeklyDigestStorage.ts` → `safeReadStringLS`). - Item #8 (#1748): `useApiForm` rollout — `WaitlistForm` (/pricing). Тепер +1 public marketing-form поверх auth + settings. - Item #15 (#1750): `noUncheckedIndexedAccess` для `@sergeant/finyk-domain`. Strict-coverage 8/13 → 9/13 пакетів (69%). - Item #16 (#1752): Storybook 16 → 20 (IconButton, SkeletonCard, ProgressRing, EmptyState). Оновлюю: - 00-overview.md — round-9 update-блок + додаю round-9-фрази до 4 roadmap-рядків з PR-лінками й короткими summary. - 02-architecture-and-state.md — додаю follow-up #4 round-9 update-блок для finyk-domain з підсумком strict-coverage 8/13 → 9/13 (69%) і оновленим backlog-ом (4 пакети залишилось). Co-Authored-By: Бу Ка <dmytro.s.stakhov@gmail.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughDocumentation update to the web deep-dive diagnostics files recording the completion and outcomes of round-9 follow-up items. Two markdown files are updated: the overview adds "Update 2026-05-04 (round 9)" with four follow-up bullets and PR links, and the roadmap table is expanded with completion details; the architecture-and-state file adds similar round-9 update notes for strict TypeScript migration. ChangesWeb Deep-Dive Documentation Round-9 Update
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 0/10 reviews remaining, refill in 59 minutes and 17 seconds. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md`:
- Around line 31-39: Move the status badge line "> **Status:** Active" so it
appears immediately after the freshness marker line "> **Last validated:**" and
before any update blocks; leave the existing update-block content (the round 9
bullet list) intact below the status line. Locate the strings "**Last
validated:**" and "**Status:** Active" in 00-overview.md and cut/paste the
Status line to sit directly beneath Last validated, ensuring blockquote
formatting (leading "> ") is preserved and no other text ordering or content is
changed.
In `@docs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md`:
- Line 22: The doc line stating that noUncheckedIndexedAccess is enabled for
`@sergeant/finyk-domain` is incorrect; update the "Update 2026-05-04 (follow-up `#4`
— round 9):" entry to reflect the real tsconfig state (noUncheckedIndexedAccess
is currently false) or append a clear note that the change is not yet merged
into main (i.e., the repo still has noUncheckedIndexedAccess:false), so readers
won’t be misled; target the sentence mentioning noUncheckedIndexedAccess and the
package name to make this correction.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: a0f44cb4-999c-490c-b031-64ac992f910b
📒 Files selected for processing (2)
docs/diagnostics/2026-05-03-web-deep-dive/00-overview.mddocs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md
| > **Update 2026-05-04 (round 9 — наступна хвиля follow-up-ів):** Виконано ще чотири follow-up-PR-и за тим самим патерном (top-4 за залишковим ROI з roadmap-таблиці). Зміни production rollout, без зміни roadmap-чисел items. Підсумок раунду 9: | ||
| > | ||
| > - Item #6 follow-up — localStorage burndown 14 → 13: `weeklyDigestStorage.ts` `webStorageReader.getItem` мігровано з inline `try/catch` на `safeReadStringLS` ([#1745](https://github.com/Skords-01/Sergeant/pull/1745)). +2 RTL-hardening-тести (Safari Private Mode / disabled storage), бюджет 13, headroom 0. | ||
| > - Item #8 follow-up — `WaitlistForm` (`/pricing`) мігровано на `useApiForm` + zod ([#1748](https://github.com/Skords-01/Sergeant/pull/1748)). `useApiForm` rollout вийшов за межі auth-флоу та settings: тепер +1 public marketing-form. 6 RTL-тестів (валідація email/tier, happy-path created=true / created=false, 429 rate-limit toast без банера, 400 details → field error). | ||
| > - Item #15 follow-up — `noUncheckedIndexedAccess` для `@sergeant/finyk-domain` ([#1750](https://github.com/Skords-01/Sergeant/pull/1750)). Strict-coverage 8/13 → 9/13 пакетів (69%); 11 production-помилок виправлено через дефенсивні narrow-и (`?? 0`, явні `if (!x) continue`), 41 test-assertions через non-null `!`-assertion (продовження api-client-стилю round 8). 224 тести зелені. | ||
| > - Item #16 follow-up — Storybook 16 → 20 компонентів: `IconButton` / `SkeletonCard` / `ProgressRing` / `EmptyState` ([#1752](https://github.com/Skords-01/Sergeant/pull/1752)). 24 stories разом з JSDoc-секціями «коли застосовувати/не застосовувати», синхронізованими з реальними патернами Sergeant (HubChat toolbars, KPI-картки, onboarding-сценарії). | ||
| > | ||
| > **Status:** Active | ||
| > **Scope:** `apps/web` + `apps/server` + `packages/*` (mobile — лише дотичні точки). |
There was a problem hiding this comment.
Перемісти статус-бейдж одразу після freshness marker
У цьому документі > **Status:** Active стоїть не одразу після > **Last validated:** (зараз він після блоку оновлень). Перемісти Status прямо під Last validated, а update-блоки залиш нижче.
As per coding guidelines, docs/**/*.md: “Documentation status badges: every published doc declares > **Status:** Active | Scaffolded | Deprecated | Archived right after the freshness marker.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md` around lines 31 -
39, Move the status badge line "> **Status:** Active" so it appears immediately
after the freshness marker line "> **Last validated:**" and before any update
blocks; leave the existing update-block content (the round 9 bullet list) intact
below the status line. Locate the strings "**Last validated:**" and "**Status:**
Active" in 00-overview.md and cut/paste the Status line to sit directly beneath
Last validated, ensuring blockquote formatting (leading "> ") is preserved and
no other text ordering or content is changed.
| > | ||
| > **Update 2026-05-04 (follow-up #3 — round 8):** [#1727](https://github.com/Skords-01/Sergeant/pull/1727) поширив `noUncheckedIndexedAccess: true` на `@sergeant/api-client`. Production-source-и були чисті (0 помилок); 24 type-error у 4 тестових файлах (`httpClient.test.ts`, `endpoints/me.test.ts`, `endpoints/mono-webhook.test.ts`, `endpoints/push.test.ts`) — усі на патерні `fn.mock.calls[0][i]`, де перший елемент `mock.calls` під strict-index стає `T \| undefined`. Замість розкидати `!` non-null assertions, додано `packages/api-client/src/__test-utils/firstCall.ts` — тонкий typed helper, що **runtime-кидає** `Error("firstCall: expected mock to have been called at least once, got 0 calls")`, якщо мок не викликали. На сайт-ах: `firstCall(fetchMock)[1] as RequestInit`. 57/57 тестів пакету зелені. **Strict-coverage 7/13 → 8/13 пакетів (62%)**. Backlog: `@sergeant/finyk-domain` (169 errors / 46 файлів), `@sergeant/fizruk-domain` (52 / 14), `apps/mobile` (25 / 14), `apps/server` (335 / 57), `apps/web` (625 / 147). | ||
| > | ||
| > **Update 2026-05-04 (follow-up #4 — round 9):** [#1750](https://github.com/Skords-01/Sergeant/pull/1750) поширив `noUncheckedIndexedAccess: true` на `@sergeant/finyk-domain`. 11 production-помилок у 7 файлах (`domain/categories.ts.getCatColor`, `domain/overview.ts.parseLocalDate`, `domain/personalization.ts.stripLeadingSymbols`, `lib/forecastEngine.ts` bridge-point, `lib/goals.ts` UTC-parse, `lib/recurringDetect.ts` lastTx narrow, `lib/spending.ts` ×2 `Object.keys` ітерації) виправлено через дефенсивні narrow-и: `?? 0` fallback, локальні `const` + `if (!x) continue`, та `palette[idx % len] ?? palette[0]!` для регулярного-розміру масиву кольорів. 41 test-assertions полагоджено через non-null `!`-assertion (продовження api-client-стилю round 8 — runtime-error у разі порушення інваріанту). 224/224 тестів пакету зелені. **Strict-coverage 8/13 → 9/13 пакетів (69%)**. Backlog: `apps/web`, `apps/server`, `apps/mobile`, `@sergeant/fizruk-domain` (4 залишилось). |
There was a problem hiding this comment.
Документуємо завершення, яке не підтверджене поточним tsconfig
На Line 22 вказано, що для @sergeant/finyk-domain увімкнено noUncheckedIndexedAccess: true, але в packages/finyk-domain/tsconfig.json зараз зафіксовано "noUncheckedIndexedAccess": false. Онови цей пункт до фактичного стану (або додай чітку примітку, що це ще не в main).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md` at
line 22, The doc line stating that noUncheckedIndexedAccess is enabled for
`@sergeant/finyk-domain` is incorrect; update the "Update 2026-05-04 (follow-up `#4`
— round 9):" entry to reflect the real tsconfig state (noUncheckedIndexedAccess
is currently false) or append a clear note that the change is not yet merged
into main (i.e., the repo still has noUncheckedIndexedAccess:false), so readers
won’t be misled; target the sentence mentioning noUncheckedIndexedAccess and the
package name to make this correction.
⏱️ CI Pipeline Duration ReportBased on the last 50 successful runs on the default branch. Overall Pipeline
Trend (last 20 runs): Per-Job Breakdown
|
Summary
Round-9 follow-up summary для diagnostic-серії
docs/diagnostics/2026-05-03-web-deep-dive. Документує чотири follow-up-PR-и за тим самим патерном (top-4 за залишковим ROI з roadmap-таблиці):weeklyDigestStorage.tswebStorageReader.getItemмігровано з inlinetry/catchнаsafeReadStringLS. +2 RTL-hardening-тести (Safari Private Mode / disabled storage), бюджет жорстко зафіксовано на 13 (headroom 0).useApiFormrollout вийшов за межі auth + settings:WaitlistForm(/pricing) тепер наuseApiForm+ zod. 6 нових RTL-тестів (валідація email/tier, happy-path created=true/false, 429 rate-limit toast без банера, 400 details → field error).noUncheckedIndexedAccess: trueдля@sergeant/finyk-domain. Strict-coverage 8/13 → 9/13 пакетів (69%). 11 production-помилок виправлено через дефенсивні narrow-и (?? 0fallback, локальніconst+if (!x) continue); 41 test-assertions через non-null!-assertion (продовження api-client-стилю round 8 — runtime-error у разі порушення інваріанту). 224/224 тестів пакету зелені.IconButton/SkeletonCard/ProgressRing/EmptyState. 24 stories разом з JSDoc-секціями «коли застосовувати/не застосовувати», module-tinted illustrations дляEmptyState, custom labels (kcal/kg/UAH) дляProgressRing, TS-enforcedaria-labelдляIconButton.Changes
docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md— round-9 update-блок з 4 буллетами + round-9-фрази додані до 4 roadmap-рядків (Claude/review project structure l2 ke1 #6 / UI: Dashboard/Measurements/Progress - add quick stats, hero revamp and sheet padding/z-index fixes #8 / Claude/review project structure l2 ke1 #15 / Codex/find issues in the date module #16) з PR-лінками й короткими summary.docs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md— follow-up Dashboard: Add time-based greeting, summary cards and quick action buttons to hero #4 round-9 update-блок для finyk-domain з backlog-ом залишку (apps/web,apps/server,apps/mobile,@sergeant/fizruk-domain— 4 пакети залишилось).Governing Skill
sergeant-review-and-merge(документуємо merged та open follow-up-PR-и в roadmap-таблиці).Verification
Result: 2 files changed, 31 insertions, 20 deletions.
ESLint/typecheck/tests не застосовуються — це pure-docs зміна.
Docs and Governance
AGENTS.mdneeded an update.Risk and Rollout
Hard Rule #15
AGENTS.mdbefore coding.--no-verify.Summary by cubic
Updates the web deep‑dive diagnostics with round‑9 follow‑ups for items #6/#8/#15/#16 and aligns the roadmap entries. Covers LS allowlist burndown 14→13 via
safeReadStringLS(+2 RTL tests),WaitlistFormmoved touseApiForm+ zod (+6 tests), strictnoUncheckedIndexedAccessfor@sergeant/finyk-domain(strict coverage 8/13→9/13 with defensive narrows), and Storybook 16→20 (IconButton, SkeletonCard, ProgressRing, EmptyState); editsdocs/diagnostics/2026-05-03-web-deep-dive/00-overview.mdand02-architecture-and-state.md.Written for commit 1baf3d0. Summary will update on new commits.
Summary by CodeRabbit