Skip to content

docs(docs): round-9 follow-up summary for diagnostic items #6/#8/#15/#16#1753

Merged
Skords-01 merged 1 commit into
mainfrom
devin/1777927374-round9-docs
May 4, 2026
Merged

docs(docs): round-9 follow-up summary for diagnostic items #6/#8/#15/#16#1753
Skords-01 merged 1 commit into
mainfrom
devin/1777927374-round9-docs

Conversation

@Skords-01
Copy link
Copy Markdown
Owner

@Skords-01 Skords-01 commented May 4, 2026

Summary

Round-9 follow-up summary для diagnostic-серії docs/diagnostics/2026-05-03-web-deep-dive. Документує чотири follow-up-PR-и за тим самим патерном (top-4 за залишковим ROI з roadmap-таблиці):

  • Item Claude/review project structure l2 ke1 #6 (#1745) — localStorage budget 14 → 13: weeklyDigestStorage.ts webStorageReader.getItem мігровано з inline try/catch на safeReadStringLS. +2 RTL-hardening-тести (Safari Private Mode / disabled storage), бюджет жорстко зафіксовано на 13 (headroom 0).
  • Item UI: Dashboard/Measurements/Progress - add quick stats, hero revamp and sheet padding/z-index fixes #8 (#1748) — useApiForm rollout вийшов за межі auth + settings: WaitlistForm (/pricing) тепер на useApiForm + zod. 6 нових RTL-тестів (валідація email/tier, happy-path created=true/false, 429 rate-limit toast без банера, 400 details → field error).
  • Item Claude/review project structure l2 ke1 #15 (#1750) — noUncheckedIndexedAccess: true для @sergeant/finyk-domain. Strict-coverage 8/13 → 9/13 пакетів (69%). 11 production-помилок виправлено через дефенсивні narrow-и (?? 0 fallback, локальні const + if (!x) continue); 41 test-assertions через non-null !-assertion (продовження api-client-стилю round 8 — runtime-error у разі порушення інваріанту). 224/224 тестів пакету зелені.
  • Item Codex/find issues in the date module #16 (#1752) — Storybook 16 → 20: IconButton / SkeletonCard / ProgressRing / EmptyState. 24 stories разом з JSDoc-секціями «коли застосовувати/не застосовувати», module-tinted illustrations для EmptyState, custom labels (kcal/kg/UAH) для ProgressRing, TS-enforced aria-label для IconButton.

Changes

Governing Skill

  • Primary skill: sergeant-review-and-merge (документуємо merged та open follow-up-PR-и в roadmap-таблиці).
  • Secondary skill: n/a

Verification

git diff --stat main

Result: 2 files changed, 31 insertions, 20 deletions.

ESLint/typecheck/tests не застосовуються — це pure-docs зміна.

Docs and Governance

  • I updated docs that changed with the behavior, contract, workflow, or rollout.
  • I checked whether AGENTS.md needed an update.
  • I checked whether a playbook or skill needed an update.
  • I checked whether governance docs or review docs needed an update.

Risk and Rollout

  • User-visible risk: none. Pure-docs зміна.
  • Rollout: merge → diagnostic документи стають актуальними.
  • Backout plan: revert single commit.

Hard Rule #15

  • I read AGENTS.md before coding.
  • Internal docs I touched are in Ukrainian.
  • I did not use --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), WaitlistForm moved to useApiForm + zod (+6 tests), strict noUncheckedIndexedAccess for @sergeant/finyk-domain (strict coverage 8/13→9/13 with defensive narrows), and Storybook 16→20 (IconButton, SkeletonCard, ProgressRing, EmptyState); edits docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md and 02-architecture-and-state.md.

Written for commit 1baf3d0. Summary will update on new commits.

Summary by CodeRabbit

  • Documentation
    • Updated internal diagnostic documentation with progress tracking for ongoing development initiatives, including completion details from the latest development round and updated metrics for related technical improvements.



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>
@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 4, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
sergeant Ready Ready Preview, Comment May 4, 2026 8:46pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

📝 Walkthrough

Walkthrough

Documentation 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.

Changes

Web Deep-Dive Documentation Round-9 Update

Layer / File(s) Summary
Round-9 Follow-up Entry
docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md
New "Update 2026-05-04 (round 9)" section added with four follow-up items (#6, #8, #15, #16) detailing localStorage burndown, WaitlistForm migration, noUncheckedIndexedAccess enablement for @sergeant/finyk-domain, and Storybook component expansion, each with PR links and outcome summaries.
Roadmap Table Expansion
docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md
Roadmap table entries updated to incorporate round-9 completion details and test/coverage results for the same four follow-up items.
Architecture Documentation Update
docs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md
New "Update 2026-05-04 (follow-up #4 — round 9)" block added documenting noUncheckedIndexedAccess rollout for @sergeant/finyk-domain, including production fixes via defensive guards and updated test coverage metrics (8/13 → 9/13).

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

  • Skords-01/Sergeant#1745: Implements localStorage burndown (item #6) by refactoring weeklyDigestStorage off raw localStorage, directly corresponding to the round-9 completion documented here.
  • Skords-01/Sergeant#1723: Migrates usePushNotifications off raw localStorage as part of the item #6 storage abstraction work tracked in this documentation update.
  • Skords-01/Sergeant#1404: Contains the strict-TypeScript changes and module refinements (item #15) whose completion and coverage metrics are now documented in the architecture-and-state update.

Suggested labels

size/S, documentation


🐰 Round nine hops are done, the docs now gleam,
With guards and storage dreams all in alignment,
TypeScript strict flows, Storybook beams bright,
Each follow-up marked in roadmap light,
Progress marches on, the checklist takes flight! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically summarizes the main change: documentation update for round-9 follow-up items with their PR references.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch devin/1777927374-round9-docs

Review rate limit: 0/10 reviews remaining, refill in 59 minutes and 17 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e8f5975 and 1baf3d0.

📒 Files selected for processing (2)
  • docs/diagnostics/2026-05-03-web-deep-dive/00-overview.md
  • docs/diagnostics/2026-05-03-web-deep-dive/02-architecture-and-state.md

Comment on lines +31 to 39
> **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 — лише дотичні точки).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Перемісти статус-бейдж одразу після 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 залишилось).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Документуємо завершення, яке не підтверджене поточним 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.

@Skords-01 Skords-01 merged commit c0dd26a into main May 4, 2026
23 of 44 checks passed
@Skords-01 Skords-01 deleted the devin/1777927374-round9-docs branch May 4, 2026 20:51
@github-actions github-actions Bot added the size/S label May 4, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 4, 2026

⏱️ CI Pipeline Duration Report

Based on the last 50 successful runs on the default branch.

Overall Pipeline

Metric Value
p50 6m 26s
p95 7m 55s
p99 9m 3s
Current run 75m 0s
vs p95 +847.4%

Trend (last 20 runs): ▃▃▁▂▃▃▃▂▃▃▂▂▄▃▃▆▅▄█▆

Per-Job Breakdown

Job p50 p95 p99 Current vs p95
Accessibility (axe-core) 2m 5s 2m 21s 2m 23s 0s -100.0%
Commit messages (commitlint) 0s 0s 0s 44s N/A
Critical-flow E2E (Playwright) 1m 36s 1m 44s 1m 44s 6m 10s +255.8%
Migration lint (AGENTS rule 0s 0s 0s 9s N/A
Pipeline duration (p95 trend) 26s 27s 27s
Secret scan (gitleaks) 8s 11s 11s 7s -36.4%
Smoke E2E (Playwright) 1m 26s 1m 40s 1m 40s
Test coverage (vitest) 2m 4s 2m 33s 2m 33s 2m 16s -11.1%
Workflow lint (actionlint) 7s 7s 7s 6s -14.3%
check 4m 12s 4m 54s 5m 6s 52s -82.3%
tsconfig strict guard (PR-1.A) 5s 14s 14s 8s -42.9%

⚠️ Warning: Current run (75m 0s) exceeds p95 + 20% threshold (9m 30s). Consider reviewing slow jobs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant